aboutsummaryrefslogtreecommitdiff
path: root/lib/libUPnP/Neptune/Source
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source')
-rw-r--r--lib/libUPnP/Neptune/Source/Apps/MiniHttpServer/MiniHttpServer.cpp92
-rw-r--r--lib/libUPnP/Neptune/Source/Apps/NetConfig/NetConfig.cpp125
-rw-r--r--lib/libUPnP/Neptune/Source/Apps/NetEcho/NetEcho.cpp170
-rw-r--r--lib/libUPnP/Neptune/Source/Apps/NetPing/NetPing.cpp212
-rw-r--r--lib/libUPnP/Neptune/Source/Apps/NetPump/NetPump.cpp704
-rw-r--r--lib/libUPnP/Neptune/Source/Core/Neptune.cpp0
-rw-r--r--lib/libUPnP/Neptune/Source/Core/Neptune.h84
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptArray.h522
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptBase64.cpp192
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptBase64.h68
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.cpp423
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.h101
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptCommon.cpp38
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptCommon.h169
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptConfig.h306
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptConsole.cpp67
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptConsole.h55
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptConstants.h44
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDataBuffer.cpp256
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDataBuffer.h83
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDebug.cpp83
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDebug.h56
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDefs.h0
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDynamicCast.h89
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.cpp36
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.h84
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptFile.cpp416
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptFile.h203
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptHttp.cpp2378
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptHttp.h698
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptInterfaces.h115
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptList.cpp34
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptList.h605
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptLogging.cpp1393
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptLogging.h512
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptMap.h330
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptMessaging.cpp51
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptMessaging.h176
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptNetwork.cpp256
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptNetwork.h228
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptQueue.cpp36
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptQueue.h96
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptReferences.h146
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptResults.cpp116
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptResults.h160
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptRingBuffer.cpp270
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptRingBuffer.h84
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSelectableMessageQueue.h68
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSerialPort.h119
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.cpp94
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.h68
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSockets.cpp59
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSockets.h335
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptStack.h72
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptStreams.cpp724
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptStreams.h322
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptStrings.cpp1108
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptStrings.h339
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSystem.cpp37
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptSystem.h60
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptThreads.cpp156
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptThreads.h283
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptTime.cpp524
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptTime.h150
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptTls.cpp492
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptTls.h161
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptTypes.h149
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptUri.cpp756
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptUri.h170
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptUtils.cpp800
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptUtils.h219
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptVersion.h41
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptXml.cpp2517
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptXml.h385
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptZip.cpp496
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptZip.h144
-rw-r--r--lib/libUPnP/Neptune/Source/System/Android/NptAndroidDebug.cpp30
-rw-r--r--lib/libUPnP/Neptune/Source/System/Bsd/NptBsdNetwork.cpp231
-rw-r--r--lib/libUPnP/Neptune/Source/System/Bsd/NptBsdSockets.cpp2005
-rw-r--r--lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.h39
-rw-r--r--lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.mm98
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullHttpProxy.cpp23
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullNetwork.cpp23
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullQueue.cpp30
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullSerialPort.cpp83
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullSystem.cpp61
-rw-r--r--lib/libUPnP/Neptune/Source/System/Null/NptNullThreads.cpp48
-rw-r--r--lib/libUPnP/Neptune/Source/System/PS3/NptPs3System.cpp113
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPDirectory.cpp199
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPFile.cpp441
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPNetwork.cpp71
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPQueue.cpp141
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPSystem.cpp142
-rw-r--r--lib/libUPnP/Neptune/Source/System/PSP/NptPSPThreads.cpp487
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixDynamicLibraries.cpp108
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixFile.cpp260
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixNetwork.cpp35
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixQueue.cpp291
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixSystem.cpp181
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptPosixThreads.cpp578
-rw-r--r--lib/libUPnP/Neptune/Source/System/Posix/NptSelectableMessageQueue.cpp84
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdCTime.cpp128
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdcConsole.cpp25
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdcDebug.cpp30
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp51
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdcFile.cpp511
-rw-r--r--lib/libUPnP/Neptune/Source/System/Symbian/NptSymbianSystem.cpp116
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Console.cpp28
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Debug.cpp36
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp146
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32File.cpp412
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32HttpProxy.cpp43
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp183
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h49
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.cpp253
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.h20
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp216
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp337
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32System.cpp138
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.cpp590
-rw-r--r--lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.h73
-rw-r--r--lib/libUPnP/Neptune/Source/System/WinCE/NptWinCeUtils.h92
-rw-r--r--lib/libUPnP/Neptune/Source/System/WinCE/NptWinceConsole.cpp26
-rw-r--r--lib/libUPnP/Neptune/Source/System/WinCE/NptWinceEnvironment.cpp63
-rw-r--r--lib/libUPnP/Neptune/Source/System/WinCE/NptWinceMain.cpp47
-rw-r--r--lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.cpp97
-rw-r--r--lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.h19
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Arrays1/ArraysTest1.cpp200
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/BufferedStreams1/BufferedStreamsTest1.cpp57
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/FileTest1/FileTest1.cpp340
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/FileTest2/FileTest2.cpp114
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/HttpClient1/HttpClientTest1.cpp283
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/HttpServer1/HttpServerTest1.cpp272
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Lists1/ListsTest1.cpp184
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Logging1/LoggingTest1.cpp181
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Logging2/LoggingTest2.cpp59
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Maps1/MapsTest1.cpp146
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp408
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Messages2/MessagesTest2.cpp243
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Misc1/MiscTest1.cpp514
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Queue1/QueueTest1.cpp302
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp113
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Streams1/StreamsTest1.cpp74
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp631
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Threads1/ThreadsTest1.cpp455
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp354
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate1.h27
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate2.h108
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Tls1/TlsTest1.cpp140
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Udp1/UdpTest1.cpp94
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Url1/UrlTest1.cpp254
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1.cpp578
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1Data.cpp843
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Xml1/big.xml3277
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Xml1/test.xml16
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Xml1/unicode.xml1
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTest1.cpp193
-rw-r--r--lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTestData1.cpp21332
158 files changed, 64534 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Apps/MiniHttpServer/MiniHttpServer.cpp b/lib/libUPnP/Neptune/Source/Apps/MiniHttpServer/MiniHttpServer.cpp
new file mode 100644
index 0000000000..59afba5b5f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Apps/MiniHttpServer/MiniHttpServer.cpp
@@ -0,0 +1,92 @@
+/*****************************************************************
+|
+| Mini HTTP Server
+|
+| (c) 2001-2009 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+
+/*----------------------------------------------------------------------
+| MiniServer
++---------------------------------------------------------------------*/
+static void
+MiniServer(const char* root, unsigned int port, bool verbose)
+{
+ NPT_HttpServer server(port);
+ NPT_InputStreamReference input;
+ NPT_OutputStreamReference output;
+ NPT_HttpRequestContext context;
+
+ NPT_HttpFileRequestHandler* file_handler = new NPT_HttpFileRequestHandler("/", root, true);
+ server.AddRequestHandler(file_handler, "/", true);
+
+ for (;;) {
+ if (verbose) NPT_Console::Output("waiting for connection...\n");
+ NPT_Result result = server.WaitForNewClient(input,
+ output,
+ &context);
+ if (verbose) NPT_Console::OutputF("WaitForNewClient returned %d (%s)\n", result, NPT_ResultText(result));
+ if (NPT_FAILED(result)) return;
+
+ result = server.RespondToClient(input, output, context);
+ if (verbose) NPT_Console::OutputF("RespondToClient returned %d (%s)\n", result, NPT_ResultText(result));
+
+ input = NULL;
+ output = NULL;
+ }
+
+ delete file_handler;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** argv)
+{
+ NPT_String file_root;
+ unsigned int port = 8000;
+ bool verbose = false;
+
+ while (const char* arg = *++argv) {
+ if (NPT_StringsEqual(arg, "--help") ||
+ NPT_StringsEqual(arg, "-h")) {
+ NPT_Console::Output("usage: minihttpserver [--file-root <dir>] [--port <port>] [--verbose]\n");
+ return 0;
+ } else if (NPT_StringsEqual(arg, "--file-root")) {
+ arg = *++argv;
+ if (arg == NULL) {
+ NPT_Console::Output("ERROR: missing argument for --root option\n");
+ return 1;
+ }
+ file_root = arg;
+ } else if (NPT_StringsEqual(arg, "--port")) {
+ arg = *++argv;
+ if (arg == NULL) {
+ NPT_Console::Output("ERROR: missing argument for --port option\n");
+ return 1;
+ }
+ NPT_ParseInteger(arg, port, true);
+ } else if (NPT_StringsEqual(arg, "--verbose")) {
+ verbose = true;
+ }
+ }
+
+ if (file_root.GetLength() == 0) {
+ NPT_File::GetWorkingDir(file_root);
+ }
+
+ if (verbose) {
+ NPT_Console::OutputF("Starting server on port %d, root=%s\n", port, file_root.GetChars());
+ }
+ MiniServer(file_root, port, verbose);
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Apps/NetConfig/NetConfig.cpp b/lib/libUPnP/Neptune/Source/Apps/NetConfig/NetConfig.cpp
new file mode 100644
index 0000000000..6ad81c6617
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Apps/NetConfig/NetConfig.cpp
@@ -0,0 +1,125 @@
+/*****************************************************************
+|
+| Neptune Utilities - Network Configuration Dump
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_STDLIB_H)
+#include <stdlib.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(void)
+{
+ fprintf(stderr,
+ "usage: NetConfig\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| PrintFlags
++---------------------------------------------------------------------*/
+static void
+PrintFlags(NPT_Flags flags)
+{
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_LOOPBACK) {
+ printf("LOOPBACK ");
+ }
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_PROMISCUOUS) {
+ printf("PROMISCUOUS ");
+ }
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_BROADCAST) {
+ printf("BROADCAST ");
+ }
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_MULTICAST) {
+ printf("MULTICAST ");
+ }
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT) {
+ printf("POINT-TO-POINT ");
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char**)
+{
+ // check command line
+ if (argc < 1) {
+ PrintUsageAndExit();
+ }
+
+ NPT_List<NPT_NetworkInterface*> interfaces;
+ NPT_Result result = NPT_NetworkInterface::GetNetworkInterfaces(interfaces);
+ if (NPT_FAILED(result)) {
+ printf("GetNetworkInterfaces() failed\n");
+ return 0;
+ }
+ NPT_List<NPT_NetworkInterface*>::Iterator iface = interfaces.GetFirstItem();
+ unsigned int index = 0;
+ while (iface) {
+ printf("Interface %d: -------------------------------------\n", index);
+ printf(" name = %s\n", (*iface)->GetName().GetChars());
+ printf(" flags = %x [ ", (*iface)->GetFlags());
+ PrintFlags((*iface)->GetFlags());
+ printf("]\n");
+ printf(" mac = %s (type=%d)\n", (*iface)->GetMacAddress().ToString().GetChars(), (*iface)->GetMacAddress().GetType());
+
+ // print all addresses
+ NPT_List<NPT_NetworkInterfaceAddress>::Iterator nwifaddr =
+ (*iface)->GetAddresses().GetFirstItem();
+ unsigned int addr_index = 0;
+ while (nwifaddr) {
+ printf(" address %d:\n", addr_index);
+ printf(" primary address = ");
+ printf("%s\n", nwifaddr->GetPrimaryAddress().ToString().GetChars());
+ if ((*iface)->GetFlags() & NPT_NETWORK_INTERFACE_FLAG_BROADCAST) {
+ printf(" broadcast address = ");
+ printf("%s\n", nwifaddr->GetBroadcastAddress().ToString().GetChars());
+ }
+ if ((*iface)->GetFlags() & NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT) {
+ printf(" destination address = ");
+ printf("%s\n", nwifaddr->GetDestinationAddress().ToString().GetChars());
+ }
+ printf(" netmask = ");
+ printf("%s\n", nwifaddr->GetNetMask().ToString().GetChars());
+ ++nwifaddr;
+ }
+
+ ++iface;
+ ++index;
+ }
+
+ return 0;
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Apps/NetEcho/NetEcho.cpp b/lib/libUPnP/Neptune/Source/Apps/NetEcho/NetEcho.cpp
new file mode 100644
index 0000000000..90e1093714
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Apps/NetEcho/NetEcho.cpp
@@ -0,0 +1,170 @@
+/*****************************************************************
+|
+| Neptune Utilities - Network Echo Server
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_STDLIB_H)
+#include <stdlib.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ SERVER_TYPE_UNKNOWN,
+ SERVER_TYPE_UDP,
+ SERVER_TYPE_TCP
+} ServerType;
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static struct {
+ bool verbose;
+} Options;
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(void)
+{
+ fprintf(stderr,
+ "usage: NetEcho udp|tcp <port>\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| UdpServerLoop
++---------------------------------------------------------------------*/
+static void
+UdpServerLoop(int port)
+{
+ NPT_UdpSocket listener;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("listening on port %d\n", port);
+ }
+
+ NPT_Result result = listener.Bind(NPT_SocketAddress(NPT_IpAddress::Any, port));
+ if (NPT_FAILED(result)) {
+ NPT_Debug("ERROR: Bind() failed (%d : %s)\n", result, NPT_ResultText(result));
+ }
+
+ // packet loop
+ NPT_DataBuffer packet(32768);
+ NPT_SocketAddress address;
+
+ do {
+ result = listener.Receive(packet, &address);
+ if (NPT_SUCCEEDED(result)) {
+ if (Options.verbose) {
+ NPT_String ip = address.GetIpAddress().ToString();
+ NPT_Debug("Received %d bytes from %s:%d\n", packet.GetDataSize(), ip.GetChars(), address.GetPort());
+ }
+
+ listener.Send(packet, &address);
+ }
+ } while (NPT_SUCCEEDED(result));
+}
+
+/*----------------------------------------------------------------------
+| TcpServerLoop
++---------------------------------------------------------------------*/
+static void
+TcpServerLoop(int port)
+{
+ NPT_TcpServerSocket listener;
+
+ NPT_Result result = listener.Bind(NPT_SocketAddress(NPT_IpAddress::Any, port));
+ if (NPT_FAILED(result)) {
+ NPT_Debug("ERROR: Bind() failed (%d : %s)\n", result, NPT_ResultText(result));
+ }
+
+ NPT_Socket* client;
+
+ for (;;) {
+ NPT_Debug("waiting for client on port %d\n", port);
+ result = listener.WaitForNewClient(client);
+ NPT_SocketInfo socket_info;
+ client->GetInfo(socket_info);
+ NPT_Debug("client connected from %s:%d\n",
+ socket_info.remote_address.GetIpAddress().ToString().GetChars(),
+ socket_info.remote_address.GetPort());
+ NPT_InputStreamReference input;
+ client->GetInputStream(input);
+ NPT_OutputStreamReference output;
+ client->GetOutputStream(output);
+ do {
+ char buffer[1024];
+ NPT_Size bytes_read;
+ result = input->Read(buffer, sizeof(buffer), &bytes_read);
+ if (NPT_SUCCEEDED(result)) {
+ NPT_Debug("read %ld bytes\n", bytes_read);
+ output->Write(buffer, bytes_read);
+ }
+ } while (NPT_SUCCEEDED(result));
+ delete client;
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ // check command line
+ if (argc != 3) {
+ PrintUsageAndExit();
+ }
+
+ // init options
+ Options.verbose = true;
+ ServerType server_type = SERVER_TYPE_UNKNOWN;
+ int port = -1;
+
+ // parse command line
+ if (!strcmp(argv[1], "udp")) {
+ server_type = SERVER_TYPE_UDP;
+ } else if (!strcmp(argv[1], "tcp")) {
+ server_type = SERVER_TYPE_TCP;
+ } else {
+ fprintf(stderr, "ERROR: unknown server type\n");
+ exit(1);
+ }
+
+ port = strtoul(argv[2], NULL, 10);
+
+ switch (server_type) {
+ case SERVER_TYPE_TCP: TcpServerLoop(port); break;
+ case SERVER_TYPE_UDP: UdpServerLoop(port); break;
+ default: break;
+ }
+
+ return 0;
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Apps/NetPing/NetPing.cpp b/lib/libUPnP/Neptune/Source/Apps/NetPing/NetPing.cpp
new file mode 100644
index 0000000000..fddd8b3b20
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Apps/NetPing/NetPing.cpp
@@ -0,0 +1,212 @@
+/*****************************************************************
+|
+| Neptune Utilities - Network Ping Client
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_STDLIB_H)
+#include <stdlib.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ CLIENT_TYPE_UNKNOWN,
+ CLIENT_TYPE_UDP,
+ CLIENT_TYPE_TCP
+} ClientType;
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static struct {
+ bool verbose;
+} Options;
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(void)
+{
+ fprintf(stderr,
+ "usage: NetPing udp|tcp <hostname> <port>\n");
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| UdpPing
++---------------------------------------------------------------------*/
+static void
+UdpPing(const char* hostname, int port)
+{
+ NPT_UdpSocket sender;
+ NPT_Result result;
+
+ // build ping packet
+ NPT_DataBuffer packet;
+ const char* packet_data = "PING";
+ packet.SetData((NPT_Byte*)packet_data, sizeof(packet_data));
+
+ // resolve hostname
+ NPT_IpAddress ip_address;
+ result = ip_address.ResolveName(hostname);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "ERROR: failed to resolve name\n");
+ return;
+ }
+
+ // get the current timestamp
+ NPT_TimeStamp before;
+ NPT_System::GetCurrentTimeStamp(before);
+
+ // send the packet
+ sender.Connect(NPT_SocketAddress(ip_address, port));
+ sender.Send(packet);
+ //NPT_SocketAddress destination_address(ip_address, port);
+ //sender.Send(packet, &destination_address);
+ NPT_SocketInfo socket_info;
+ sender.GetInfo(socket_info);
+ NPT_Debug("sent from %s:%d to %s:%d\n",
+ socket_info.local_address.GetIpAddress().ToString().GetChars(),
+ socket_info.local_address.GetPort(),
+ socket_info.remote_address.GetIpAddress().ToString().GetChars(),
+ socket_info.remote_address.GetPort());
+ //sender.Connect(NPT_SocketAddress(ip_address, port));
+ NPT_SocketAddress destination_address(ip_address, port);
+ sender.Send(packet, &destination_address);
+ //NPT_SocketInfo socket_info;
+ //sender.GetInfo(socket_info);
+ //NPT_Debug("sent from %s:%d to %s:%d\n",
+ // socket_info.local_address.GetIpAddress().ToString().GetChars(),
+ // socket_info.local_address.GetPort(),
+ // socket_info.remote_address.GetIpAddress().ToString().GetChars(),
+ // socket_info.remote_address.GetPort());
+ NPT_Debug("send %d bytes\n", 4);
+
+ // receive response
+ NPT_DataBuffer response(32768);
+ result = sender.Receive(response);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "ERROR: failed to receive response (%d)\n", result);
+ return;
+ }
+ sender.GetInfo(socket_info);
+ printf("RESPONSE: %ld bytes from %s:%d\n",
+ response.GetDataSize(),
+ socket_info.remote_address.GetIpAddress().ToString().GetChars(),
+ socket_info.remote_address.GetPort());
+
+ NPT_TimeStamp after;
+ NPT_System::GetCurrentTimeStamp(after);
+ NPT_TimeInterval i = after-before;
+ printf("RTT: %f ms\n", ((float)i)*1000.0f);
+}
+
+/*----------------------------------------------------------------------
+| TcpPing
++---------------------------------------------------------------------*/
+static void
+TcpPing(const char* hostname, int port)
+{
+ NPT_TcpClientSocket sender;
+ NPT_Result result;
+
+ // resolve name
+ NPT_IpAddress ip_address;
+ result = ip_address.ResolveName(hostname);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "ERROR: failed to resolve name\n");
+ return;
+ }
+
+ // connect to server
+ sender.Connect(NPT_SocketAddress(ip_address, port));
+ NPT_OutputStreamReference output;
+
+ // get the current timestamp
+ NPT_TimeStamp before;
+ NPT_System::GetCurrentTimeStamp(before);
+
+ // send the ping
+ sender.GetOutputStream(output);
+ output->Write("PING", 4);
+
+ // receive response
+ NPT_InputStreamReference input;
+ sender.GetInputStream(input);
+ char buffer[1024];
+
+ NPT_Size bytes_read;
+ result = input->Read(buffer, sizeof(buffer), &bytes_read);
+ if (NPT_SUCCEEDED(result)) {
+ NPT_Debug("read %ld bytes\n", bytes_read);
+ }
+
+ NPT_TimeStamp after;
+ NPT_System::GetCurrentTimeStamp(after);
+ NPT_TimeInterval i = after-before;
+ printf("RTT: %f ms\n", ((float)i)*1000.0f);
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ // check command line
+ if (argc != 4) {
+ PrintUsageAndExit();
+ }
+
+ // init options
+ Options.verbose = false;
+ ClientType client_type = CLIENT_TYPE_UNKNOWN;
+ int port = -1;
+ char* hostname = NULL;
+
+ // parse command line
+ if (!strcmp(argv[1], "udp")) {
+ client_type = CLIENT_TYPE_UDP;
+ } else if (!strcmp(argv[1], "tcp")) {
+ client_type = CLIENT_TYPE_TCP;
+ } else {
+ fprintf(stderr, "ERROR: unknown client type\n");
+ exit(1);
+ }
+
+ hostname = argv[2];
+ port = strtoul(argv[3], NULL, 10);
+
+ switch (client_type) {
+ case CLIENT_TYPE_TCP: TcpPing(hostname, port); break;
+ case CLIENT_TYPE_UDP: UdpPing(hostname, port); break;
+ default: break;
+ }
+
+ return 0;
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Apps/NetPump/NetPump.cpp b/lib/libUPnP/Neptune/Source/Apps/NetPump/NetPump.cpp
new file mode 100644
index 0000000000..c6f49f568b
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Apps/NetPump/NetPump.cpp
@@ -0,0 +1,704 @@
+/*****************************************************************
+|
+| Neptune Utilities - Network Data Pump
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_STDLIB_H)
+#include <stdlib.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ ENDPOINT_TYPE_UDP_CLIENT,
+ ENDPOINT_TYPE_UDP_SERVER,
+ ENDPOINT_TYPE_TCP_CLIENT,
+ ENDPOINT_TYPE_TCP_SERVER,
+ ENDPOINT_TYPE_MULTICAST_CLIENT,
+ ENDPOINT_TYPE_MULTICAST_SERVER,
+ ENDPOINT_TYPE_FILE,
+ ENDPOINT_TYPE_SERIAL_PORT
+} EndPointType;
+
+typedef enum {
+ ENDPOINT_DIRECTION_IN,
+ ENDPOINT_DIRECTION_OUT
+} EndPointDirection;
+
+typedef struct {
+ EndPointType type;
+ EndPointDirection direction;
+ union {
+ struct {
+ int port;
+ } udp_server;
+ struct {
+ char* hostname;
+ int port;
+ } udp_client;
+ struct {
+ int port;
+ } tcp_server;
+ struct {
+ char* hostname;
+ int port;
+ } tcp_client;
+ struct {
+ char* groupname;
+ int port;
+ } multicast_server;
+ struct {
+ char* groupname;
+ int port;
+ int ttl;
+ } multicast_client;
+ struct {
+ char* name;
+ } file;
+ struct {
+ char* name;
+ unsigned int speed;
+ } serial_port;
+ } info;
+} EndPoint;
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define PUMP_DEFAULT_PACKET_SIZE 16384
+#define PUMP_MAX_UNDERFLOW 5000
+#define PUMP_MIN_SLEEP 10
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static struct {
+ bool verbose;
+ bool show_progress;
+} Options;
+
+/*----------------------------------------------------------------------
+| PrintUsageAndExit
++---------------------------------------------------------------------*/
+static void
+PrintUsageAndExit(void)
+{
+ fprintf(stderr,
+ "usage: NetPump [options] <input endpoint> <output endpoint>, \n"
+ "where each endpoint is:\n"
+ " udp [client <hostname> <port>]|[server <port>]\n"
+ " or\n"
+ " tcp [client <hostname> <port>]|[server <port>]\n"
+ " or\n"
+ " multicast [client <groupname> <port> <ttl>]|[server <groupname> <port>]\n"
+ " or\n"
+ " file [<filename>|" NPT_FILE_STANDARD_INPUT "|" NPT_FILE_STANDARD_OUTPUT "|" NPT_FILE_STANDARD_ERROR "\n"
+ " or\n"
+ " serial <portname> <speed>\n"
+ "\n"
+ "options are:\n"
+ " --verbose: show more info\n"
+ " --show-progress: show progress\n"
+ " --packet-size <packet_size>: send by burst of <packet_size> (default: %d)"
+ "\n", PUMP_DEFAULT_PACKET_SIZE);
+ exit(1);
+}
+
+/*----------------------------------------------------------------------
+| GetEndPointStreams
++---------------------------------------------------------------------*/
+static NPT_Result
+GetEndPointStreams(EndPoint* endpoint,
+ NPT_InputStreamReference* input_stream,
+ NPT_OutputStreamReference* output_stream)
+{
+ // default return values
+ if (input_stream) *input_stream = NULL;
+ if (output_stream) *output_stream = NULL;
+
+ switch (endpoint->type) {
+ case ENDPOINT_TYPE_UDP_CLIENT:
+ {
+ NPT_UdpSocket sender;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("sending to %s on port %d\n",
+ endpoint->info.udp_client.hostname,
+ endpoint->info.udp_client.port);
+ }
+
+ // resolve name
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(endpoint->info.udp_client.hostname));
+
+ // connect socket
+ NPT_CHECK(sender.Connect(NPT_SocketAddress(address,
+ endpoint->info.udp_client.port)));
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(sender.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(sender.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_TCP_CLIENT:
+ {
+ NPT_TcpClientSocket client;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("connecting to %s on port %d\n",
+ endpoint->info.tcp_client.hostname,
+ endpoint->info.tcp_client.port);
+ }
+
+ // resolve the name
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(endpoint->info.tcp_client.hostname));
+
+ // connect
+ NPT_CHECK(client.Connect(NPT_SocketAddress(address,
+ endpoint->info.tcp_client.port)));
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("connected\n");
+ }
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(client.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(client.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_MULTICAST_CLIENT:
+ {
+ NPT_UdpMulticastSocket sender;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("sending to %s on port %d\n",
+ endpoint->info.multicast_client.groupname,
+ endpoint->info.multicast_client.port);
+ }
+
+ // set time to live
+ NPT_CHECK(sender.SetTimeToLive(endpoint->info.multicast_client.ttl));
+
+ // resolve name
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(endpoint->info.multicast_client.groupname));
+
+ // connect socket
+ NPT_CHECK(sender.Connect(NPT_SocketAddress(address, endpoint->info.multicast_client.port)));
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(sender.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(sender.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_UDP_SERVER:
+ {
+ NPT_UdpSocket listener;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("listening on port %d", endpoint->info.udp_server.port);
+ }
+
+ // listen on port, any addr
+ NPT_CHECK(listener.Bind(NPT_SocketAddress(NPT_IpAddress::Any, endpoint->info.udp_server.port)));
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(listener.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(listener.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_TCP_SERVER:
+ {
+ NPT_TcpServerSocket server;
+ NPT_Socket* client;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("waiting for client on port %d\n",
+ endpoint->info.tcp_server.port);
+ }
+
+ // bind to the address
+ NPT_CHECK(server.Bind(NPT_SocketAddress(NPT_IpAddress::Any,
+ endpoint->info.tcp_server.port)));
+
+ // wait for connection
+ NPT_CHECK(server.WaitForNewClient(client));
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("client connected\n");
+ }
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(client->GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(client->GetOutputStream(*output_stream));
+ }
+
+ delete client;
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_MULTICAST_SERVER:
+ {
+ NPT_UdpMulticastSocket listener;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("listening on port %d\n", endpoint->info.multicast_server.port);
+ }
+
+ // listen on port, any addr
+ NPT_CHECK(listener.Bind(NPT_SocketAddress(NPT_IpAddress::Any, endpoint->info.multicast_server.port)));
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("joining multicast group %s\n", endpoint->info.multicast_server.groupname);
+ }
+
+ // resolve name
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(endpoint->info.multicast_server.groupname));
+
+ // join the group
+ NPT_CHECK(listener.JoinGroup(address));
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(listener.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(listener.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_FILE:
+ {
+ // create a file object
+ NPT_File file(endpoint->info.file.name);
+ if (endpoint->direction == ENDPOINT_DIRECTION_IN) {
+ NPT_CHECK(file.Open(NPT_FILE_OPEN_MODE_READ |
+ NPT_FILE_OPEN_MODE_UNBUFFERED));
+ } else {
+ NPT_CHECK(file.Open(NPT_FILE_OPEN_MODE_WRITE |
+ NPT_FILE_OPEN_MODE_CREATE|
+ NPT_FILE_OPEN_MODE_UNBUFFERED));
+ }
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(file.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(file.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ case ENDPOINT_TYPE_SERIAL_PORT:
+ {
+ // create a serial port object
+ NPT_SerialPort serial_port(endpoint->info.serial_port.name);
+ NPT_CHECK(serial_port.Open(endpoint->info.serial_port.speed));
+
+ // get the streams
+ if (input_stream) {
+ NPT_CHECK(serial_port.GetInputStream(*input_stream));
+ }
+ if (output_stream) {
+ NPT_CHECK(serial_port.GetOutputStream(*output_stream));
+ }
+
+ return NPT_SUCCESS;
+ }
+ break;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| GetEndPointUdpSocket
++---------------------------------------------------------------------*/
+static NPT_Result
+GetEndPointUdpSocket(EndPoint* endpoint, NPT_UdpSocket*& udp_socket)
+{
+ // default return values
+ udp_socket = NULL;
+
+ switch (endpoint->type) {
+ case ENDPOINT_TYPE_UDP_SERVER:
+ {
+ udp_socket = new NPT_UdpSocket();
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("listening on port %d", endpoint->info.udp_server.port);
+ }
+
+ // listen on port, any addr
+ return udp_socket->Bind(NPT_SocketAddress(NPT_IpAddress::Any, endpoint->info.udp_server.port));
+ }
+ break;
+
+ case ENDPOINT_TYPE_MULTICAST_SERVER:
+ {
+ NPT_UdpMulticastSocket* udp_multicast_socket = new NPT_UdpMulticastSocket();
+ udp_socket = udp_multicast_socket;
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("listening on port %d\n", endpoint->info.multicast_server.port);
+ }
+
+ // listen on port, any addr
+ NPT_CHECK(udp_socket->Bind(NPT_SocketAddress(NPT_IpAddress::Any, endpoint->info.multicast_server.port)));
+
+ // info
+ if (Options.verbose) {
+ NPT_Debug("joining multicast group %s\n", endpoint->info.multicast_server.groupname);
+ }
+
+ // resolve name
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(endpoint->info.multicast_server.groupname));
+
+ // join the group
+ NPT_CHECK(udp_multicast_socket->JoinGroup(address));
+
+ return NPT_SUCCESS;
+ }
+ break;
+
+ default:
+ return NPT_FAILURE;
+ }
+
+ return NPT_SUCCESS;
+}
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ // check command line
+ if (argc < 2) {
+ PrintUsageAndExit();
+ }
+
+ // init endpoints
+ EndPoint in_endpoint;
+ in_endpoint.direction = ENDPOINT_DIRECTION_IN;
+ EndPoint out_endpoint;
+ out_endpoint.direction = ENDPOINT_DIRECTION_OUT;
+ EndPoint* current_endpoint = &in_endpoint;
+
+ // init other parameters
+ unsigned int packet_size = PUMP_DEFAULT_PACKET_SIZE;
+
+ // init options
+ Options.verbose = false;
+ Options.show_progress = false;
+
+ // parse command line
+ argv++;
+ char* arg;
+ while ((arg = *argv++)) {
+ if (current_endpoint == NULL) {
+ NPT_Debug("ERROR: unexpected argument (%s)\n", arg);
+ exit(1);
+ }
+
+ if (!strcmp(arg, "--packet-size")) {
+ packet_size = strtoul(*argv++, NULL, 10);
+ continue;
+ } else if (!strcmp(arg, "--verbose")) {
+ Options.verbose = true;
+ continue;
+ } else if (!strcmp(arg, "--show-progress")) {
+ Options.show_progress = true;
+ continue;
+ } else if (!strcmp(arg, "udp")) {
+ if (argv[0] && argv[1]) {
+ if (!strcmp(argv[0], "server")) {
+ if (current_endpoint->direction == ENDPOINT_DIRECTION_OUT){
+ NPT_Debug("ERROR: cannot use 'udp server' as output\n");
+ exit(1);
+ }
+ current_endpoint->type = ENDPOINT_TYPE_UDP_SERVER;
+ current_endpoint->info.udp_server.port =
+ strtoul(argv[1], NULL, 10);
+ argv += 2;
+ } else if (!strcmp(argv[0], "client")) {
+ if (current_endpoint->direction == ENDPOINT_DIRECTION_IN) {
+ NPT_Debug("ERROR: cannot use 'udp client' as input\n");
+ exit(1);
+ }
+ if (argv[2]) {
+ current_endpoint->type = ENDPOINT_TYPE_UDP_CLIENT;
+ current_endpoint->info.udp_client.hostname = argv[1];
+ current_endpoint->info.udp_client.port =
+ strtoul(argv[2], NULL, 10);
+ argv += 3;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'udp client'\n");
+ exit(1);
+ }
+ }
+ } else {
+ NPT_Debug("ERROR: missing argument for 'udp' endpoint\n");
+ exit(1);
+ }
+ } else if (!strcmp(arg, "multicast")) {
+ if (argv[0] && argv[1]) {
+ if (!strcmp(argv[0], "server")) {
+ if (current_endpoint->direction == ENDPOINT_DIRECTION_OUT){
+ NPT_Debug("ERROR: cannot use 'multicast server' as output\n");
+ exit(1);
+ }
+ if (argv[2]) {
+ current_endpoint->type = ENDPOINT_TYPE_MULTICAST_SERVER;
+ current_endpoint->info.multicast_server.groupname = argv[1];
+ current_endpoint->info.multicast_server.port =
+ strtoul(argv[2], NULL, 10);
+ argv += 3;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'multicast server'\n");
+ exit(1);
+ }
+ } else if (!strcmp(argv[0], "client")) {
+ if (current_endpoint->direction == ENDPOINT_DIRECTION_IN) {
+ NPT_Debug("ERROR: cannot use 'udp client' as input\n");
+ exit(1);
+ }
+ if (argv[2] && argv[3]) {
+ current_endpoint->type = ENDPOINT_TYPE_MULTICAST_CLIENT;
+ current_endpoint->info.multicast_client.groupname = argv[1];
+ current_endpoint->info.multicast_client.port =
+ strtoul(argv[2], NULL, 10);
+ current_endpoint->info.multicast_client.ttl =
+ strtoul(argv[3], NULL, 10);
+ argv += 4;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'multicast client'\n");
+ exit(1);
+ }
+ }
+ } else {
+ NPT_Debug("ERROR: missing argument for 'multicast' endpoint\n");
+ exit(1);
+ }
+ } else if (!strcmp(arg, "tcp")) {
+ if (argv[0] && argv[1]) {
+ if (!strcmp(argv[0], "server")) {
+ current_endpoint->type = ENDPOINT_TYPE_TCP_SERVER;
+ current_endpoint->info.tcp_server.port =
+ strtoul(argv[1], NULL, 10);
+ argv += 2;
+ } else if (!strcmp(argv[0], "client")) {
+ if (argv[2]) {
+ current_endpoint->type = ENDPOINT_TYPE_TCP_CLIENT;
+ current_endpoint->info.tcp_client.hostname = argv[1];
+ current_endpoint->info.tcp_client.port =
+ strtoul(argv[2], NULL, 10);
+ argv += 3;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'tcp client'\n");
+ exit(1);
+ }
+ }
+ } else {
+ NPT_Debug("ERROR: missing argument for 'tcp' endpoint\n");
+ exit(1);
+ }
+ } else if (!strcmp(arg, "file")) {
+ if (argv[0]) {
+ current_endpoint->type = ENDPOINT_TYPE_FILE;
+ current_endpoint->info.file.name = *argv++;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'file' endpoint\n");
+ exit(1);
+ }
+ } else if (!strcmp(arg, "serial")) {
+ if (argv[0]) {
+ current_endpoint->type = ENDPOINT_TYPE_SERIAL_PORT;
+ current_endpoint->info.serial_port.name = *argv++;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'serial' endpoint\n");
+ exit(1);
+ }
+ if (argv[0]) {
+ int speed = 0;
+ if (NPT_FAILED(NPT_ParseInteger(*argv++, speed))) {
+ NPT_Debug("ERROR: invalid speed for 'serial' endpoint\n");
+ exit(1);
+ }
+ current_endpoint->info.serial_port.speed = (unsigned int)speed;
+ } else {
+ NPT_Debug("ERROR: missing argument for 'serial' endpoint\n");
+ exit(1);
+ }
+ } else {
+ NPT_Debug("ERROR: invalid argument (%s)\n", arg);
+ exit(1);
+ }
+
+ if (current_endpoint == &in_endpoint) {
+ current_endpoint = &out_endpoint;
+ } else {
+ current_endpoint = NULL;
+ }
+ }
+
+ if (current_endpoint) {
+ NPT_Debug("ERROR: missing endpoint specification\n");
+ exit(1);
+ }
+
+ // data pump
+ NPT_Result result;
+
+ // allocate buffer
+ unsigned char* buffer;
+ buffer = (unsigned char*)malloc(packet_size);
+ if (buffer == NULL) {
+ NPT_Debug("ERROR: out of memory\n");
+ exit(1);
+ }
+
+ // get output stream
+ NPT_OutputStreamReference out;
+ result = GetEndPointStreams(&out_endpoint, NULL, &out);
+ if (NPT_FAILED(result)) {
+ NPT_Debug("ERROR: failed to get stream for output (%d)", result);
+ exit(1);
+ }
+
+ unsigned long offset = 0;
+ unsigned long total = 0;
+ if (in_endpoint.type == ENDPOINT_TYPE_UDP_SERVER ||
+ in_endpoint.type == ENDPOINT_TYPE_MULTICAST_SERVER) {
+ NPT_UdpSocket* udp_socket;
+ result = GetEndPointUdpSocket(&in_endpoint, udp_socket);
+
+ // packet loop
+ NPT_DataBuffer packet(32768);
+ NPT_SocketAddress address;
+
+ do {
+ result = udp_socket->Receive(packet, &address);
+ if (NPT_SUCCEEDED(result)) {
+ if (Options.verbose) {
+ NPT_String ip = address.GetIpAddress().ToString();
+ NPT_Debug("Received %d bytes from %s\n", packet.GetDataSize(), ip.GetChars());
+ }
+ result = out->Write(packet.GetData(), packet.GetDataSize(), NULL);
+ offset += packet.GetDataSize();
+ total += packet.GetDataSize();
+ }
+ } while (NPT_SUCCEEDED(result));
+ } else {
+ // get the input stream
+ NPT_InputStreamReference in;
+ result = GetEndPointStreams(&in_endpoint, &in, NULL);
+ if (NPT_FAILED(result)) {
+ NPT_Debug("ERROR: failed to get stream for input (%d : %s)\n", result, NPT_ResultText(result));
+ exit(1);
+ }
+
+ // stream loop
+ do {
+ NPT_Size bytes_read;
+ NPT_Size bytes_written;
+
+ // send
+ result = in->Read(buffer, packet_size, &bytes_read);
+ if (Options.show_progress) {
+ NPT_Debug("[%d]\r", total);
+ }
+ if (NPT_SUCCEEDED(result) && bytes_read) {
+ result = out->Write(buffer, bytes_read, &bytes_written);
+ if (Options.show_progress) {
+ NPT_Debug("[%d]\r", total);
+ }
+ offset += bytes_written;
+ total += bytes_written;
+ } else {
+ printf("[%d] *******************\n", result);
+ exit(1);
+ }
+ } while (NPT_SUCCEEDED(result));
+ }
+
+ delete buffer;
+ return 0;
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Core/Neptune.cpp b/lib/libUPnP/Neptune/Source/Core/Neptune.cpp
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/Neptune.cpp
diff --git a/lib/libUPnP/Neptune/Source/Core/Neptune.h b/lib/libUPnP/Neptune/Source/Core/Neptune.h
new file mode 100644
index 0000000000..6c3c1f6c55
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/Neptune.h
@@ -0,0 +1,84 @@
+/*****************************************************************
+|
+| Neptune - Toplevel Include
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NEPTUNE_H_
+#define _NEPTUNE_H_
+
+/*----------------------------------------------------------------------
+| flags
++---------------------------------------------------------------------*/
+#define NPT_EXTERNAL_USE /* do not expose internal definitions */
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptCommon.h"
+#include "NptResults.h"
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptReferences.h"
+#include "NptStreams.h"
+#include "NptBufferedStreams.h"
+#include "NptFile.h"
+#include "NptNetwork.h"
+#include "NptSockets.h"
+#include "NptTime.h"
+#include "NptThreads.h"
+#include "NptSystem.h"
+#include "NptMessaging.h"
+#include "NptQueue.h"
+#include "NptSimpleMessageQueue.h"
+#include "NptSelectableMessageQueue.h"
+#include "NptXml.h"
+#include "NptStrings.h"
+#include "NptArray.h"
+#include "NptList.h"
+#include "NptMap.h"
+#include "NptStack.h"
+#include "NptUri.h"
+#include "NptHttp.h"
+#include "NptDataBuffer.h"
+#include "NptUtils.h"
+#include "NptRingBuffer.h"
+#include "NptBase64.h"
+#include "NptConsole.h"
+#include "NptLogging.h"
+#include "NptSerialPort.h"
+#include "NptVersion.h"
+#include "NptDynamicLibraries.h"
+#include "NptDynamicCast.h"
+
+// optional modules
+#include "NptZip.h"
+#include "NptTls.h"
+
+#endif // _NEPTUNE_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptArray.h b/lib/libUPnP/Neptune/Source/Core/NptArray.h
new file mode 100644
index 0000000000..721bac8943
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptArray.h
@@ -0,0 +1,522 @@
+/*****************************************************************
+|
+| Neptune - Arrays
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+#ifndef _NPT_ARRAY_H_
+#define _NPT_ARRAY_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#if defined(NPT_CONFIG_HAVE_NEW_H)
+#include <new>
+#endif
+#include "NptTypes.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ARRAY_INITIAL_MAX_SIZE = 128; // bytes
+
+/*----------------------------------------------------------------------
+| NPT_Array
++---------------------------------------------------------------------*/
+template <typename T>
+class NPT_Array
+{
+public:
+ // types
+ typedef T Element;
+ typedef T* Iterator;
+
+ // methods
+ NPT_Array<T>(): m_Capacity(0), m_ItemCount(0), m_Items(0) {}
+ explicit NPT_Array<T>(NPT_Cardinal count);
+ NPT_Array<T>(NPT_Cardinal count, const T& item);
+ NPT_Array<T>(const T* items, NPT_Cardinal item_count);
+ ~NPT_Array<T>();
+ NPT_Array<T>(const NPT_Array<T>& copy);
+ NPT_Array<T>& operator=(const NPT_Array<T>& copy);
+ bool operator==(const NPT_Array<T>& other) const;
+ bool operator!=(const NPT_Array<T>& other) const;
+ NPT_Cardinal GetItemCount() const { return m_ItemCount; }
+ NPT_Result Add(const T& item);
+ T& operator[](NPT_Ordinal pos) { return m_Items[pos]; }
+ const T& operator[](NPT_Ordinal pos) const { return m_Items[pos]; }
+ NPT_Result Erase(Iterator which);
+ NPT_Result Erase(NPT_Ordinal which) { return Erase(&m_Items[which]); }
+ NPT_Result Erase(Iterator first, Iterator last);
+ NPT_Result Erase(NPT_Ordinal first, NPT_Ordinal last) { return Erase(&m_Items[first], &m_Items[last]); }
+ NPT_Result Insert(Iterator where, const T& item, NPT_Cardinal count = 1);
+ NPT_Result Reserve(NPT_Cardinal count);
+ NPT_Cardinal GetCapacity() const { return m_Capacity; }
+ NPT_Result Resize(NPT_Cardinal count);
+ NPT_Result Resize(NPT_Cardinal count, const T& fill);
+ NPT_Result Clear();
+ bool Contains(const T& data) const;
+ Iterator GetFirstItem() const { return m_ItemCount?&m_Items[0]:NULL; }
+ Iterator GetLastItem() const { return m_ItemCount?&m_Items[m_ItemCount-1]:NULL; }
+ Iterator GetItem(NPT_Ordinal n) { return n<m_ItemCount?&m_Items[n]:NULL; }
+
+ // template list operations
+ // keep these template members defined here because MSV6 does not let
+ // us define them later
+ template <typename X>
+ NPT_Result Apply(const X& function) const
+ {
+ for (unsigned int i=0; i<m_ItemCount; i++) function(m_Items[i]);
+ return NPT_SUCCESS;
+ }
+
+ template <typename X, typename P>
+ NPT_Result ApplyUntil(const X& function, const P& predicate, bool* match = NULL) const
+ {
+ for (unsigned int i=0; i<m_ItemCount; i++) {
+ NPT_Result return_value;
+ if (predicate(function(m_Items[i]), return_value)) {
+ if (match) *match = true;
+ return return_value;
+ }
+ }
+ if (match) *match = false;
+ return NPT_SUCCESS;
+ }
+
+ template <typename X>
+ T* Find(const X& predicate, NPT_Ordinal n=0, NPT_Ordinal* pos = NULL) const
+ {
+ if (pos) *pos = -1;
+
+ for (unsigned int i=0; i<m_ItemCount; i++) {
+ if (predicate(m_Items[i])) {
+ if (pos) *pos = i;
+ if (n == 0) return &m_Items[i];
+ --n;
+ }
+ }
+ return NULL;
+ }
+
+protected:
+ // methods
+ T* Allocate(NPT_Cardinal count, NPT_Cardinal& allocated);
+
+ // members
+ NPT_Cardinal m_Capacity;
+ NPT_Cardinal m_ItemCount;
+ T* m_Items;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::NPT_Array<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Array<T>::NPT_Array(NPT_Cardinal count) :
+ m_Capacity(0),
+ m_ItemCount(0),
+ m_Items(0)
+{
+ Reserve(count);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::NPT_Array<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Array<T>::NPT_Array(const NPT_Array<T>& copy) :
+ m_Capacity(0),
+ m_ItemCount(0),
+ m_Items(0)
+{
+ Reserve(copy.GetItemCount());
+ for (NPT_Ordinal i=0; i<copy.m_ItemCount; i++) {
+ new ((void*)&m_Items[i]) T(copy.m_Items[i]);
+ }
+ m_ItemCount = copy.m_ItemCount;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::NPT_Array<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Array<T>::NPT_Array(NPT_Cardinal count, const T& item) :
+ m_Capacity(0),
+ m_ItemCount(count),
+ m_Items(0)
+{
+ Reserve(count);
+ for (NPT_Ordinal i=0; i<count; i++) {
+ new ((void*)&m_Items[i]) T(item);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::NPT_Array<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Array<T>::NPT_Array(const T* items, NPT_Cardinal item_count) :
+ m_Capacity(0),
+ m_ItemCount(item_count),
+ m_Items(0)
+{
+ Reserve(item_count);
+ for (NPT_Ordinal i=0; i<item_count; i++) {
+ new ((void*)&m_Items[i]) T(items[i]);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::~NPT_Array<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Array<T>::~NPT_Array()
+{
+ // remove all items
+ Clear();
+
+ // free the memory
+ ::operator delete((void*)m_Items);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::operator=
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Array<T>&
+NPT_Array<T>::operator=(const NPT_Array<T>& copy)
+{
+ // do nothing if we're assigning to ourselves
+ if (this == &copy) return *this;
+
+ // destroy all elements
+ Clear();
+
+ // copy all elements from the other object
+ Reserve(copy.GetItemCount());
+ m_ItemCount = copy.m_ItemCount;
+ for (NPT_Ordinal i=0; i<copy.m_ItemCount; i++) {
+ new ((void*)&m_Items[i]) T(copy.m_Items[i]);
+ }
+
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Clear
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Clear()
+{
+ // destroy all items
+ for (NPT_Ordinal i=0; i<m_ItemCount; i++) {
+ m_Items[i].~T();
+ }
+
+ m_ItemCount = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Allocate
++---------------------------------------------------------------------*/
+template <typename T>
+T*
+NPT_Array<T>::Allocate(NPT_Cardinal count, NPT_Cardinal& allocated)
+{
+ if (m_Capacity) {
+ allocated = 2*m_Capacity;
+ } else {
+ // start with just enough elements to fill
+ // NPT_ARRAY_INITIAL_MAX_SIZE worth of memory
+ allocated = NPT_ARRAY_INITIAL_MAX_SIZE/sizeof(T);
+ if (allocated == 0) allocated = 1;
+ }
+ if (allocated < count) allocated = count;
+
+ // allocate the items
+ return (T*)::operator new(allocated*sizeof(T));
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Reserve
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Reserve(NPT_Cardinal count)
+{
+ if (count <= m_Capacity) return NPT_SUCCESS;
+
+ // (re)allocate the items
+ NPT_Cardinal new_capacity;
+ T* new_items = Allocate(count, new_capacity);
+ if (new_items == NULL) {
+ return NPT_ERROR_OUT_OF_MEMORY;
+ }
+ if (m_ItemCount && m_Items) {
+ for (unsigned int i=0; i<m_ItemCount; i++) {
+ // construct the copy
+ new ((void*)&new_items[i])T(m_Items[i]);
+
+ // destroy the item
+ m_Items[i].~T();
+ }
+ }
+ ::operator delete((void*)m_Items);
+ m_Items = new_items;
+ m_Capacity = new_capacity;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Add
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Result
+NPT_Array<T>::Add(const T& item)
+{
+ // ensure capacity
+ NPT_Result result = Reserve(m_ItemCount+1);
+ if (result != NPT_SUCCESS) return result;
+
+ // store the item
+ new ((void*)&m_Items[m_ItemCount++]) T(item);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Erase
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Result
+NPT_Array<T>::Erase(Iterator which)
+{
+ return Erase(which, which);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Erase
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Erase(Iterator first, Iterator last)
+{
+ // check parameters
+ if (first == NULL || last == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // check the bounds
+ NPT_Ordinal first_index = (NPT_Ordinal)(NPT_POINTER_TO_LONG(first-m_Items));
+ NPT_Ordinal last_index = (NPT_Ordinal)(NPT_POINTER_TO_LONG(last-m_Items));
+ if (first_index >= m_ItemCount ||
+ last_index >= m_ItemCount ||
+ first_index > last_index) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // shift items to the left
+ NPT_Cardinal interval = last_index-first_index+1;
+ NPT_Cardinal shifted = m_ItemCount-last_index-1;
+ for (NPT_Ordinal i=first_index; i<first_index+shifted; i++) {
+ m_Items[i] = m_Items[i+interval];
+ }
+
+ // destruct the remaining items
+ for (NPT_Ordinal i=first_index+shifted; i<m_ItemCount; i++) {
+ m_Items[i].~T();
+ }
+
+ // update the item count
+ m_ItemCount -= interval;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Insert
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Insert(Iterator where, const T& item, NPT_Cardinal repeat)
+{
+ // check bounds
+ NPT_Ordinal where_index = where?((NPT_Ordinal)NPT_POINTER_TO_LONG(where-m_Items)):m_ItemCount;
+ if (where > &m_Items[m_ItemCount] || repeat == 0) return NPT_ERROR_INVALID_PARAMETERS;
+
+ NPT_Cardinal needed = m_ItemCount+repeat;
+ if (needed > m_Capacity) {
+ // allocate more memory
+ NPT_Cardinal new_capacity;
+ T* new_items = Allocate(needed, new_capacity);
+ if (new_items == NULL) return NPT_ERROR_OUT_OF_MEMORY;
+ m_Capacity = new_capacity;
+
+ // move the items before the insertion point
+ for (NPT_Ordinal i=0; i<where_index; i++) {
+ new((void*)&new_items[i])T(m_Items[i]);
+ m_Items[i].~T();
+ }
+
+ // move the items after the insertion point
+ for (NPT_Ordinal i=where_index; i<m_ItemCount; i++) {
+ new((void*)&new_items[i+repeat])T(m_Items[i]);
+ m_Items[i].~T();
+ }
+
+ // use the new items instead of the current ones
+ ::operator delete((void*)m_Items);
+ m_Items = new_items;
+ } else {
+ // shift items after the insertion point to the right
+ for (NPT_Ordinal i=m_ItemCount; i>where_index; i--) {
+ new((void*)&m_Items[i+repeat-1])T(m_Items[i-1]);
+ m_Items[i-1].~T();
+ }
+ }
+
+ // insert the new items
+ for (NPT_Cardinal i=where_index; i<where_index+repeat; i++) {
+ new((void*)&m_Items[i])T(item);
+ }
+
+ // update the item count
+ m_ItemCount += repeat;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Resize
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Resize(NPT_Cardinal size)
+{
+ if (size < m_ItemCount) {
+ // shrink
+ for (NPT_Ordinal i=size; i<m_ItemCount; i++) {
+ m_Items[i].~T();
+ }
+ m_ItemCount = size;
+ } else if (size > m_ItemCount) {
+ return Resize(size, T());
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Resize
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_Array<T>::Resize(NPT_Cardinal size, const T& fill)
+{
+ if (size < m_ItemCount) {
+ return Resize(size);
+ } else if (size > m_ItemCount) {
+ Reserve(size);
+ for (NPT_Ordinal i=m_ItemCount; i<size; i++) {
+ new ((void*)&m_Items[i]) T(fill);
+ }
+ m_ItemCount = size;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::Contains
++---------------------------------------------------------------------*/
+template <typename T>
+bool
+NPT_Array<T>::Contains(const T& data) const
+{
+ for (NPT_Ordinal i=0; i<m_ItemCount; i++) {
+ if (m_Items[i] == data) return true;
+ }
+
+ return false;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::operator==
++---------------------------------------------------------------------*/
+template <typename T>
+bool
+NPT_Array<T>::operator==(const NPT_Array<T>& other) const
+{
+ // we need the same number of items
+ if (other.m_ItemCount != m_ItemCount) return false;
+
+ // compare all items
+ for (NPT_Ordinal i=0; i<m_ItemCount; i++) {
+ if (!(m_Items[i] == other.m_Items[i])) return false;
+ }
+
+ return true;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Array<T>::operator!=
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+bool
+NPT_Array<T>::operator!=(const NPT_Array<T>& other) const
+{
+ return !(*this == other);
+}
+
+#endif // _NPT_ARRAY_H_
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptBase64.cpp b/lib/libUPnP/Neptune/Source/Core/NptBase64.cpp
new file mode 100644
index 0000000000..f675a65aad
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptBase64.cpp
@@ -0,0 +1,192 @@
+/*****************************************************************
+|
+| Neptune - Base64
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptBase64.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+static const signed char NPT_Base64_Bytes[128] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0x3E, -1, -1, -1, 0x3F,
+ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, -1, -1, -1, 0x7F, -1, -1,
+ -1, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
+ 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, -1, -1, -1, -1, -1,
+ -1, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
+ 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, -1, -1, -1, -1, -1
+};
+
+static const char NPT_Base64_Chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+const char NPT_BASE64_PAD_CHAR = '=';
+const char NPT_BASE64_PAD_BYTE = 0x7F;
+
+/*----------------------------------------------------------------------
+| NPT_Base64::Decode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Base64::Decode(const char* base64,
+ NPT_Size size,
+ NPT_DataBuffer& data,
+ bool url_safe /* = false */)
+{
+ // estimate the data size
+ data.SetBufferSize(size);
+
+ // reset the buffer
+ data.SetDataSize(0);
+
+ // keep a pointer to the buffer
+ unsigned char* buffer = data.UseData();
+ NPT_Size data_size = 0;
+
+ // iterate over all characters
+ unsigned char codes[4];
+ unsigned int code_count = 0;
+ while (size--) {
+ unsigned char c = *base64++;
+ if (c >= NPT_ARRAY_SIZE(NPT_Base64_Bytes)) continue;
+ if (url_safe) {
+ // remap some characters
+ if (c == '-') {
+ c = '+';
+ } else if (c == '_') {
+ c = '/';
+ }
+ }
+ signed char code = NPT_Base64_Bytes[c];
+ if (code >= 0) {
+ // valid code
+ codes[code_count++] = code;
+ if (code_count == 4) {
+ // group complete
+ if (codes[0] == NPT_BASE64_PAD_BYTE || codes[1] == NPT_BASE64_PAD_BYTE) {
+ return NPT_ERROR_INVALID_FORMAT;
+ }
+ if (codes[2] == NPT_BASE64_PAD_BYTE) {
+ // pad at char 3
+ if (codes[3] == NPT_BASE64_PAD_BYTE) {
+ // double padding
+ unsigned int packed = (codes[0]<<2)|(codes[1]>>4);
+ buffer[data_size++] = (unsigned char)packed;
+ } else {
+ // invalid padding
+ return NPT_ERROR_INVALID_FORMAT;
+ }
+ } else if (codes[3] == NPT_BASE64_PAD_BYTE) {
+ // single padding
+ unsigned int packed = (codes[0]<<10)|(codes[1]<<4)|(codes[2]>>2);
+ buffer[data_size++] = (unsigned char)(packed >> 8);
+ buffer[data_size++] = (unsigned char)(packed );
+ } else {
+ // no padding
+ unsigned int packed = (codes[0]<<18)|(codes[1]<<12)|(codes[2]<<6)|codes[3];
+ buffer[data_size++] = (unsigned char)(packed >> 16);
+ buffer[data_size++] = (unsigned char)(packed >> 8);
+ buffer[data_size++] = (unsigned char)(packed );
+ }
+ code_count = 0;
+ }
+ }
+ }
+
+ if (code_count) return NPT_ERROR_INVALID_FORMAT;
+
+ // update the data size
+ data.SetDataSize(data_size);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Base64::Encode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Base64::Encode(const NPT_Byte* data,
+ NPT_Size size,
+ NPT_String& base64,
+ NPT_Cardinal max_blocks_per_line /* = 0 */,
+ bool url_safe /* = false */)
+{
+ unsigned int block_count = 0;
+ unsigned int i = 0;
+
+ // reserve space for the string
+ base64.Reserve(4*((size+3)/3) + 2*(max_blocks_per_line?(size/(3*max_blocks_per_line)):0));
+ char* buffer = base64.UseChars();
+
+ // encode each byte
+ while (size >= 3) {
+ // output a block
+ *buffer++ = NPT_Base64_Chars[ (data[i ] >> 2) & 0x3F];
+ *buffer++ = NPT_Base64_Chars[((data[i ] & 0x03) << 4) | ((data[i+1] >> 4) & 0x0F)];
+ *buffer++ = NPT_Base64_Chars[((data[i+1] & 0x0F) << 2) | ((data[i+2] >> 6) & 0x03)];
+ *buffer++ = NPT_Base64_Chars[ data[i+2] & 0x3F];
+
+ size -= 3;
+ i += 3;
+ if (++block_count == max_blocks_per_line) {
+ *buffer++ = '\r';
+ *buffer++ = '\n';
+ block_count = 0;
+ }
+ }
+
+ // deal with the tail
+ if (size == 2) {
+ *buffer++ = NPT_Base64_Chars[ (data[i ] >> 2) & 0x3F];
+ *buffer++ = NPT_Base64_Chars[((data[i ] & 0x03) << 4) | ((data[i+1] >> 4) & 0x0F)];
+ *buffer++ = NPT_Base64_Chars[ (data[i+1] & 0x0F) << 2];
+ *buffer++ = NPT_BASE64_PAD_CHAR;
+ } else if (size == 1) {
+ *buffer++ = NPT_Base64_Chars[(data[i] >> 2) & 0x3F];
+ *buffer++ = NPT_Base64_Chars[(data[i] & 0x03) << 4];
+ *buffer++ = NPT_BASE64_PAD_CHAR;
+ *buffer++ = NPT_BASE64_PAD_CHAR;
+ }
+
+ // update the string size
+ NPT_ASSERT((NPT_Size)(buffer-base64.GetChars()) <= base64.GetCapacity());
+ base64.SetLength((NPT_Size)(buffer-base64.GetChars()));
+
+ // deal with url safe remapping
+ if (url_safe) {
+ base64.Replace('+','-');
+ base64.Replace('/','_');
+ }
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptBase64.h b/lib/libUPnP/Neptune/Source/Core/NptBase64.h
new file mode 100644
index 0000000000..89950de194
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptBase64.h
@@ -0,0 +1,68 @@
+/*****************************************************************
+|
+| Neptune - Base64
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+#ifndef _NPT_BASE64_H_
+#define _NPT_BASE64_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptDataBuffer.h"
+#include "NptStrings.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const NPT_Cardinal NPT_BASE64_MIME_BLOCKS_PER_LINE = 19;
+const NPT_Cardinal NPT_BASE64_PEM_BLOCKS_PER_LINE = 16;
+
+/*----------------------------------------------------------------------
+| NPT_Base64
++---------------------------------------------------------------------*/
+class NPT_Base64 {
+public:
+ // class methods
+ static NPT_Result Decode(const char* base64,
+ NPT_Size size,
+ NPT_DataBuffer& data,
+ bool url_safe = false);
+ static NPT_Result Encode(const NPT_Byte* data,
+ NPT_Size size,
+ NPT_String& base64,
+ NPT_Cardinal max_blocks_per_line = 0,
+ bool url_safe = false);
+
+private:
+ // this class is purely static
+ NPT_Base64();
+};
+
+#endif // _NPT_BASE64_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.cpp b/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.cpp
new file mode 100644
index 0000000000..1e8c5baf35
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.cpp
@@ -0,0 +1,423 @@
+/*****************************************************************
+|
+| Neptune - Buffered Streams
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptInterfaces.h"
+#include "NptConstants.h"
+#include "NptBufferedStreams.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::NPT_BufferedInputStream
++---------------------------------------------------------------------*/
+NPT_BufferedInputStream::NPT_BufferedInputStream(NPT_InputStreamReference& source, NPT_Size buffer_size) :
+ m_Source(source),
+ m_SkipNewline(false),
+ m_Eos(false)
+{
+ // setup the read buffer
+ m_Buffer.data = NULL;
+ m_Buffer.offset = 0;
+ m_Buffer.valid = 0;
+ m_Buffer.size = buffer_size;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::~NPT_BufferedInputStream
++---------------------------------------------------------------------*/
+NPT_BufferedInputStream::~NPT_BufferedInputStream()
+{
+ // release the buffer
+ delete[] m_Buffer.data;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::SetBufferSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::SetBufferSize(NPT_Size size, bool force /* = false */)
+{
+ if (m_Buffer.data != NULL) {
+ // we already have a buffer
+ if (m_Buffer.size < size || force) {
+ // the current buffer is too small or we want to move
+ // existing data to the beginning of the buffer, reallocate
+ NPT_Byte* buffer = new NPT_Byte[size];
+ if (buffer == NULL) return NPT_ERROR_OUT_OF_MEMORY;
+
+ // copy existing data
+ NPT_Size need_to_copy = m_Buffer.valid - m_Buffer.offset;
+ if (need_to_copy) {
+ NPT_CopyMemory((void*)buffer,
+ m_Buffer.data+m_Buffer.offset,
+ need_to_copy);
+ }
+
+ // use the new buffer
+ delete[] m_Buffer.data;
+ m_Buffer.data = buffer;
+ m_Buffer.valid -= m_Buffer.offset;
+ m_Buffer.offset = 0;
+ }
+ }
+ m_Buffer.size = size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::FillBuffer
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::FillBuffer()
+{
+ // shortcut
+ if (m_Eos) return NPT_ERROR_EOS;
+
+ // check that there is nothing left in the buffer and the buffer
+ // size is not 0
+ NPT_ASSERT(m_Buffer.valid == m_Buffer.offset);
+ NPT_ASSERT(m_Buffer.size != 0);
+
+ // allocate the read buffer if it has not been done yet
+ if (m_Buffer.data == NULL) {
+ m_Buffer.data = new NPT_Byte[m_Buffer.size];
+ if (m_Buffer.data == NULL) return NPT_ERROR_OUT_OF_MEMORY;
+ }
+
+ // refill the buffer
+ m_Buffer.offset = 0;
+ NPT_Result result = m_Source->Read(m_Buffer.data, m_Buffer.size, &m_Buffer.valid);
+ if (NPT_FAILED(result)) m_Buffer.valid = 0;
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::ReleaseBuffer
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::ReleaseBuffer()
+{
+ NPT_ASSERT(m_Buffer.size == 0);
+ NPT_ASSERT(m_Buffer.offset == m_Buffer.valid);
+
+ delete[] m_Buffer.data;
+ m_Buffer.data = NULL;
+ m_Buffer.offset = 0;
+ m_Buffer.valid = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::ReadLine
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::ReadLine(char* buffer,
+ NPT_Size size,
+ NPT_Size* chars_read,
+ bool break_on_cr)
+{
+ NPT_Result result = NPT_SUCCESS;
+ char* buffer_start = buffer;
+ bool skip_newline = false;
+
+ // check parameters
+ if (buffer == NULL || size < 1) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // read until EOF or newline
+ while (buffer-buffer_start < (long)(size-1)) {
+ while (m_Buffer.offset != m_Buffer.valid) {
+ // there is some data left in the buffer
+ NPT_Byte c = m_Buffer.data[m_Buffer.offset++];
+ if (c == '\r') {
+ if (break_on_cr) {
+ skip_newline = true;
+ goto done;
+ }
+ } else if (c == '\n') {
+ if (m_SkipNewline && (buffer == buffer_start)) {
+ continue;
+ }
+ goto done;
+ } else {
+ *buffer++ = c;
+ }
+ }
+
+ if (m_Buffer.size == 0 && !m_Eos) {
+ // unbuffered mode
+ if (m_Buffer.data != NULL) ReleaseBuffer();
+ while (NPT_SUCCEEDED(result = m_Source->Read(buffer, 1, NULL))) {
+ if (*buffer == '\r') {
+ if (break_on_cr) {
+ skip_newline = true;
+ goto done;
+ }
+ } else if (*buffer == '\n') {
+ goto done;
+ } else {
+ ++buffer;
+ }
+ }
+ } else {
+ // refill the buffer
+ result = FillBuffer();
+ }
+ if (NPT_FAILED(result)) goto done;
+ }
+
+done:
+ // update the newline skipping state
+ m_SkipNewline = skip_newline;
+
+ // NULL-terminate the line
+ *buffer = '\0';
+
+ // return what we have
+ if (chars_read) *chars_read = (NPT_Size)(buffer-buffer_start);
+ if (result == NPT_ERROR_EOS) {
+ m_Eos = true;
+ if (buffer != buffer_start) {
+ // we have reached the end of the stream, but we have read
+ // some chars, so do not return EOS now
+ return NPT_SUCCESS;
+ }
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::ReadLine
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::ReadLine(NPT_String& line,
+ NPT_Size max_chars,
+ bool break_on_cr)
+{
+ // clear the line
+ line.SetLength(0);
+
+ // reserve space for the chars
+ line.Reserve(max_chars);
+
+ // read the line
+ NPT_Size chars_read = 0;
+ NPT_CHECK(ReadLine(line.UseChars(), max_chars, &chars_read, break_on_cr));
+
+ // adjust the length of the string object
+ line.SetLength(chars_read);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ NPT_Result result = NPT_SUCCESS;
+ NPT_Size total_read = 0;
+ NPT_Size buffered;
+
+ // check for a possible shortcut
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // skip a newline char if needed
+ if (m_SkipNewline) {
+ m_SkipNewline = false;
+ result = Read(buffer, 1, NULL);
+ if (NPT_FAILED(result)) goto done;
+ NPT_Byte c = *(NPT_Byte*)buffer;
+ if (c != '\n') {
+ buffer = (void*)((NPT_Byte*)buffer+1);
+ --bytes_to_read;
+ total_read = 1;
+ }
+ }
+
+ // compute how much is buffered
+ buffered = m_Buffer.valid-m_Buffer.offset;
+ if (bytes_to_read > buffered) {
+ // there is not enough in the buffer, take what's there
+ if (buffered) {
+ NPT_CopyMemory(buffer,
+ m_Buffer.data + m_Buffer.offset,
+ buffered);
+ buffer = (void*)((NPT_Byte*)buffer+buffered);
+ m_Buffer.offset += buffered;
+ bytes_to_read -= buffered;
+ total_read += buffered;
+ goto done;
+ }
+
+ // read the rest from the source
+ if (m_Buffer.size == 0) {
+ // unbuffered mode, read directly into the supplied buffer
+ if (m_Buffer.data != NULL) ReleaseBuffer(); // cleanup if necessary
+ NPT_Size local_read = 0;
+ result = m_Source->Read(buffer, bytes_to_read, &local_read);
+ if (NPT_SUCCEEDED(result)) {
+ total_read += local_read;
+ }
+ goto done;
+ } else {
+ // refill the buffer
+ result = FillBuffer();
+ if (NPT_FAILED(result)) goto done;
+ buffered = m_Buffer.valid;
+ if (bytes_to_read > buffered) bytes_to_read = buffered;
+ }
+ }
+
+ // get what we can from the buffer
+ if (bytes_to_read) {
+ NPT_CopyMemory(buffer,
+ m_Buffer.data + m_Buffer.offset,
+ bytes_to_read);
+ m_Buffer.offset += bytes_to_read;
+ total_read += bytes_to_read;
+ }
+
+done:
+ if (bytes_read) *bytes_read = total_read;
+ if (result == NPT_ERROR_EOS) {
+ m_Eos = true;
+ if (total_read != 0) {
+ // we have reached the end of the stream, but we have read
+ // some chars, so do not return EOS now
+ return NPT_SUCCESS;
+ }
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::Peek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::Peek(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ NPT_Result result = NPT_SUCCESS;
+ NPT_Size buffered;
+ NPT_Size new_size = m_Buffer.size?m_Buffer.size:NPT_BUFFERED_BYTE_STREAM_DEFAULT_SIZE;
+
+ // check for a possible shortcut
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // compute how much is buffered
+ buffered = m_Buffer.valid-m_Buffer.offset;
+ if (bytes_to_read > buffered && buffered < new_size && !m_Eos) {
+ // we need more data than what we have
+ // switch to unbuffer mode and resize to force relocation
+ // of data to the beginning of the buffer
+ SetBufferSize(new_size, true);
+ // fill up the end of the buffer
+ result = FillBuffer();
+ // continue even if it failed
+ buffered = m_Buffer.valid;
+ }
+
+ // make sure we're returning what we can
+ if (bytes_to_read > buffered) bytes_to_read = buffered;
+
+ // get what we can from the buffer
+ NPT_CopyMemory(buffer,
+ m_Buffer.data + m_Buffer.offset,
+ bytes_to_read);
+
+ if (bytes_read) *bytes_read = bytes_to_read;
+ if (result == NPT_ERROR_EOS) {
+ m_Eos = true;
+ if (bytes_to_read != 0) {
+ // we have reached the end of the stream, but we have read
+ // some chars, so do not return EOS now
+ return NPT_SUCCESS;
+ }
+
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::Seek(NPT_Position /*offset*/)
+{
+ // not implemented yet
+ return NPT_ERROR_NOT_IMPLEMENTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::Tell(NPT_Position& offset)
+{
+ // not implemented yet
+ offset = 0;
+ return NPT_ERROR_NOT_IMPLEMENTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::GetSize(NPT_LargeSize& size)
+{
+ return m_Source->GetSize(size);
+}
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BufferedInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ NPT_LargeSize source_available = 0;
+ NPT_Result result = m_Source->GetAvailable(source_available);
+ if (NPT_SUCCEEDED(result)) {
+ available = m_Buffer.valid-m_Buffer.offset + source_available;
+ return NPT_SUCCESS;
+ } else {
+ available = m_Buffer.valid-m_Buffer.offset;
+ return available?NPT_SUCCESS:result;
+ }
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.h b/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.h
new file mode 100644
index 0000000000..a03f57224a
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptBufferedStreams.h
@@ -0,0 +1,101 @@
+/*****************************************************************
+|
+| Neptune - Buffered Byte Stream
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_BUFFERED_STREAMS_H_
+#define _NPT_BUFFERED_STREAMS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptStreams.h"
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptStrings.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_BufferedStream
++---------------------------------------------------------------------*/
+const NPT_Size NPT_BUFFERED_BYTE_STREAM_DEFAULT_SIZE = 4096;
+
+/*----------------------------------------------------------------------
+| NPT_BufferedInputStream
++---------------------------------------------------------------------*/
+class NPT_BufferedInputStream : public NPT_InputStream
+{
+public:
+ // constructors and destructor
+ NPT_BufferedInputStream(NPT_InputStreamReference& stream,
+ NPT_Size buffer_size = NPT_BUFFERED_BYTE_STREAM_DEFAULT_SIZE);
+ virtual ~NPT_BufferedInputStream();
+
+ // methods
+ virtual NPT_Result ReadLine(NPT_String& line,
+ NPT_Size max_chars = 4096,
+ bool break_on_cr = false);
+ virtual NPT_Result ReadLine(char* buffer,
+ NPT_Size buffer_size,
+ NPT_Size* chars_read = NULL,
+ bool break_on_cr = false);
+ virtual NPT_Result SetBufferSize(NPT_Size size, bool force = false);
+ virtual NPT_Result Peek(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read);
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ NPT_Result Seek(NPT_Position offset);
+ NPT_Result Tell(NPT_Position& offset);
+ NPT_Result GetSize(NPT_LargeSize& size);
+ NPT_Result GetAvailable(NPT_LargeSize& available);
+
+protected:
+ // members
+ NPT_InputStreamReference m_Source;
+ bool m_SkipNewline;
+ bool m_Eos;
+ struct {
+ NPT_Byte* data;
+ NPT_Size offset;
+ NPT_Size valid;
+ NPT_Size size;
+ } m_Buffer;
+
+ // methods
+ virtual NPT_Result FillBuffer();
+ virtual NPT_Result ReleaseBuffer();
+};
+
+typedef NPT_Reference<NPT_BufferedInputStream> NPT_BufferedInputStreamReference;
+
+#endif // _NPT_BUFFERED_STREAMS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptCommon.cpp b/lib/libUPnP/Neptune/Source/Core/NptCommon.cpp
new file mode 100644
index 0000000000..3a94380b5f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptCommon.cpp
@@ -0,0 +1,38 @@
+/*****************************************************************
+|
+| Neptune - Common Classes
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptCommon.h"
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptCommon.h b/lib/libUPnP/Neptune/Source/Core/NptCommon.h
new file mode 100644
index 0000000000..4f6cb158e2
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptCommon.h
@@ -0,0 +1,169 @@
+/*****************************************************************
+|
+| Neptune - Common Definitions
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_COMMON_H_
+#define _NPT_COMMON_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_ObjectDeleter
++---------------------------------------------------------------------*/
+template <class T>
+class NPT_ObjectDeleter {
+public:
+ void operator()(T* object) const {
+ delete object;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_ObjectComparator
++---------------------------------------------------------------------*/
+template <class T>
+class NPT_ObjectComparator {
+public:
+ NPT_ObjectComparator(T& object) : m_Object(object) {}
+ bool operator()(const T& object) const {
+ return object == m_Object;
+ }
+private:
+ T& m_Object;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ContainerFind
++---------------------------------------------------------------------*/
+template <typename T, typename P>
+NPT_Result NPT_ContainerFind(T& container,
+ const P& predicate,
+ typename T::Element& item,
+ NPT_Ordinal n=0)
+{
+ typename T::Iterator found = container.Find(predicate, n);
+ if (found) {
+ item = *found;
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_ContainerFind
++---------------------------------------------------------------------*/
+template <typename T, typename P>
+NPT_Result NPT_ContainerFind(T& container,
+ const P& predicate,
+ typename T::Iterator& iter,
+ NPT_Ordinal n=0)
+{
+ iter = container.Find(predicate, n);
+ return iter?NPT_SUCCESS:NPT_ERROR_NO_SUCH_ITEM;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UntilResultEquals
++---------------------------------------------------------------------*/
+class NPT_UntilResultEquals
+{
+public:
+ // methods
+ NPT_UntilResultEquals(NPT_Result condition_result,
+ NPT_Result return_value = NPT_SUCCESS) :
+ m_ConditionResult(condition_result),
+ m_ReturnValue(return_value) {}
+ bool operator()(NPT_Result result, NPT_Result& return_value) const {
+ if (result == m_ConditionResult) {
+ return_value = m_ReturnValue;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+private:
+ // members
+ NPT_Result m_ConditionResult;
+ NPT_Result m_ReturnValue;
+};
+
+/*----------------------------------------------------------------------
+| NPT_UntilResultNotEquals
++---------------------------------------------------------------------*/
+class NPT_UntilResultNotEquals
+{
+public:
+ // methods
+ NPT_UntilResultNotEquals(NPT_Result condition_result) :
+ m_ConditionResult(condition_result) {}
+ bool operator()(NPT_Result result, NPT_Result& return_value) const {
+ if (result != m_ConditionResult) {
+ return_value = result;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+private:
+ // members
+ NPT_Result m_ConditionResult;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PropertyValue
++---------------------------------------------------------------------*/
+class NPT_PropertyValue
+{
+ public:
+ // typedefs
+ typedef enum {UNKNOWN, INTEGER, STRING} Type;
+
+ // methods
+ NPT_PropertyValue() : m_Type(UNKNOWN), m_Integer(0) {}
+ NPT_PropertyValue(int value) : m_Type(INTEGER), m_Integer(value) {}
+ NPT_PropertyValue(const char* value) : m_Type(STRING), m_String(value) {}
+
+ // members
+ Type m_Type;
+ union {
+ int m_Integer;
+ const char* m_String;
+ };
+};
+
+#endif // _NPT_COMMON_H_
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptConfig.h b/lib/libUPnP/Neptune/Source/Core/NptConfig.h
new file mode 100644
index 0000000000..897d8d82a8
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptConfig.h
@@ -0,0 +1,306 @@
+/*****************************************************************
+|
+| Neptune - Configuration
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_CONFIG_H_
+#define _NPT_CONFIG_H_
+
+/*----------------------------------------------------------------------
+| defaults
++---------------------------------------------------------------------*/
+#define NPT_CONFIG_HAVE_ASSERT_H
+#define NPT_CONFIG_HAVE_STD_C
+#define NPT_CONFIG_HAVE_STDLIB_H
+#define NPT_CONFIG_HAVE_STDIO_H
+#define NPT_CONFIG_HAVE_STDARG_H
+#define NPT_CONFIG_HAVE_STRING_H
+#define NPT_CONFIG_HAVE_LIMITS_H
+
+/*----------------------------------------------------------------------
+| standard C runtime
++---------------------------------------------------------------------*/
+#if defined(NPT_CONFIG_HAVE_STD_C)
+#define NPT_CONFIG_HAVE_MALLOC
+#define NPT_CONFIG_HAVE_CALLOC
+#define NPT_CONFIG_HAVE_REALLOC
+#define NPT_CONFIG_HAVE_FREE
+#define NPT_CONFIG_HAVE_MEMCPY
+#define NPT_CONFIG_HAVE_MEMSET
+#define NPT_CONFIG_HAVE_MEMCMP
+#define NPT_CONFIG_HAVE_GETENV
+#define NPT_CONFIG_HAVE_READDIR_R
+#endif /* NPT_CONFIG_HAS_STD_C */
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#define NPT_CONFIG_HAVE_STRCMP
+#define NPT_CONFIG_HAVE_STRNCMP
+#define NPT_CONFIG_HAVE_STRDUP
+#define NPT_CONFIG_HAVE_STRLEN
+#define NPT_CONFIG_HAVE_STRCPY
+#define NPT_CONFIG_HAVE_STRNCPY
+#endif /* NPT_CONFIG_HAVE_STRING_H */
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#define NPT_CONFIG_HAVE_SPRINTF
+#define NPT_CONFIG_HAVE_SNPRINTF
+#define NPT_CONFIG_HAVE_VSPRINTF
+#define NPT_CONFIG_HAVE_VSNPRINTF
+#endif /* NPT_CONFIG_HAVE_STDIO_H */
+
+#if defined(NPT_CONFIG_HAVE_LIMITS_H)
+#define NPT_CONFIG_HAVE_INT_MIN
+#define NPT_CONFIG_HAVE_INT_MAX
+#define NPT_CONFIG_HAVE_UINT_MAX
+#define NPT_CONFIG_HAVE_LONG_MIN
+#define NPT_CONFIG_HAVE_LONG_MAX
+#define NPT_CONFIG_HAVE_ULONG_MAX
+#endif
+
+/*----------------------------------------------------------------------
+| standard C++ runtime
++---------------------------------------------------------------------*/
+#define NPT_CONFIG_HAVE_NEW_H
+
+/*----------------------------------------------------------------------
+| sockets
++---------------------------------------------------------------------*/
+#define NPT_CONFIG_HAVE_SOCKADDR_SA_LEN
+
+/*----------------------------------------------------------------------
+| platform specifics
++---------------------------------------------------------------------*/
+/* Windows 32 */
+#if defined(_WIN32) || defined(_XBOX)
+#if !defined(STRICT)
+#define STRICT
+#endif
+#endif
+
+/* XBox */
+#if defined(_XBOX)
+#define NPT_CONFIG_THREAD_STACK_SIZE 0x10000
+#endif
+
+/* QNX */
+#if defined(__QNX__)
+#endif
+
+/* cygwin */
+#if defined(__CYGWIN__)
+#undef NPT_CONFIG_HAVE_SOCKADDR_SA_LEN
+#endif
+
+/* linux */
+#if defined(__linux__)
+#undef NPT_CONFIG_HAVE_SOCKADDR_SA_LEN
+#endif
+
+/* symbian */
+#if defined(__SYMBIAN32__)
+/* If defined, specify the stack size of each NPT_Thread. */
+#define NPT_CONFIG_THREAD_STACK_SIZE 0x14000
+#endif
+
+/*----------------------------------------------------------------------
+| compiler specifics
++---------------------------------------------------------------------*/
+/* GCC */
+#if defined(__GNUC__)
+#define NPT_LocalFunctionName __FUNCTION__
+#define NPT_COMPILER_UNUSED(p) (void)p
+#else
+#define NPT_COMPILER_UNUSED(p)
+#endif
+
+/* TriMedia C/C++ Compiler */
+#if defined(__TCS__)
+#undef NPT_CONFIG_HAVE_ASSERT_H
+#undef NPT_CONFIG_HAVE_SNPRINTF
+#undef NPT_CONFIG_HAVE_VSNPRINTF
+#endif
+
+/* palmos compiler */
+#if defined(__PALMOS__)
+#if __PALMOS__ <= 0x05000000
+#undef NPT_CONFIG_HAVE_ASSERT_H
+#undef NPT_CONFIG_HAVE_SNPRINTF
+#undef NPT_CONFIG_HAVE_VSNPRINTF
+#endif
+#endif
+
+/* Microsoft C/C++ Compiler */
+#if defined(_MSC_VER)
+#define NPT_FORMAT_64 "I64"
+#define NPT_CONFIG_INT64_TYPE __int64
+#define NPT_INT64_MIN _I64_MIN
+#define NPT_INT64_MAX _I64_MAX
+#define NPT_UINT64_MAX _UI64_MAX
+#define NPT_INT64_C(_x) _x##i64
+#define NPT_UINT64_C(_x) _x##ui64
+#define NPT_LocalFunctionName __FUNCTION__
+#if !defined(_WIN32_WCE)
+#define NPT_fseek _fseeki64
+#define NPT_ftell _ftelli64
+#else
+#define NPT_fseek(a,b,c) fseek((a),(long)(b), (c))
+#define NPT_ftell ftell
+#endif
+#define NPT_stat NPT_stat_utf8
+#define NPT_stat_struct struct __stat64
+#if defined(_WIN64)
+typedef __int64 NPT_PointerLong;
+#else
+#if _MSC_VER >= 1400
+typedef __w64 long NPT_PointerLong;
+#else
+typedef long NPT_PointerLong;
+#endif
+#endif
+#define NPT_POINTER_TO_LONG(_p) ((NPT_PointerLong) (_p) )
+#if _MSC_VER >= 1400 && !defined(_WIN32_WCE)
+#define NPT_CONFIG_HAVE_GMTIME_S
+#define NPT_CONFIG_HAVE_LOCALTIME_S
+#define NPT_CONFIG_HAVE_FOPEN_S
+#define NPT_CONFIG_HAVE_FSOPEN
+#define NPT_CONFIG_HAVE_SHARE_H
+#define NPT_vsnprintf(s,c,f,a) _vsnprintf_s(s,c,_TRUNCATE,f,a)
+#define NPT_snprintf(s,c,f,...) _snprintf_s(s,c,_TRUNCATE,f,__VA_ARGS__)
+#define NPT_strncpy(d,s,c) strncpy_s(d,c+1,s,c)
+#define NPT_strcpy(d,s) strcpy_s(d,strlen(s)+1,s)
+#undef NPT_CONFIG_HAVE_GETENV
+#define NPT_CONFIG_HAVE_DUPENV_S
+#define dupenv_s _dupenv_s
+#else
+#define NPT_vsnprintf _vsnprintf
+#define NPT_snprintf _snprintf
+#endif
+#if defined(_DEBUG)
+#define _CRTDBG_MAP_ALLOC
+#endif
+#endif
+
+/* Windows CE */
+#if defined(_WIN32_WCE)
+#if defined(NPT_CONFIG_HAVE_FOPEN_S)
+#undef NPT_CONFIG_HAVE_FOPEN_S
+#endif
+#if defined(NPT_CONFIG_HAVE_GMTIME_S)
+#undef NPT_CONFIG_HAVE_GMTIME_S
+#endif
+#if defined(NPT_CONFIG_HAVE_LOCALTIME_S)
+#undef NPT_CONFIG_HAVE_LOCALTIME_S
+#endif
+#endif
+
+/* Symbian */
+#if defined(__SYMBIAN32__)
+#undef NPT_CONFIG_HAVE_NEW_H
+#include "e32std.h"
+#define explicit
+#define NPT_fseek fseek // no fseeko ?
+#define NPT_ftell ftell // no ftello ?
+#endif
+
+/* Android */
+#if defined(ANDROID)
+#define NPT_CONFIG_NO_RTTI
+#endif
+
+/*----------------------------------------------------------------------
+| defaults
++---------------------------------------------------------------------*/
+#if !defined(NPT_FORMAT_64)
+#define NPT_FORMAT_64 "ll"
+#endif
+
+#if !defined(NPT_POINTER_TO_LONG)
+#define NPT_POINTER_TO_LONG(_p) ((long)(_p))
+#endif
+
+#if !defined(NPT_CONFIG_INT64_TYPE)
+#define NPT_CONFIG_INT64_TYPE long long
+#endif
+
+#if !defined(NPT_INT64_C)
+#define NPT_INT64_C(_x) _x##LL
+#endif
+
+#if !defined(NPT_UINT64_C)
+#define NPT_UINT64_C(_x) _x##ULL
+#endif
+
+#if !defined(NPT_snprintf)
+#define NPT_snprintf snprintf
+#endif
+
+#if !defined(NPT_strcpy)
+#define NPT_strcpy strcpy
+#endif
+
+#if !defined(NPT_strncpy)
+#define NPT_strncpy strncpy
+#endif
+
+#if !defined(NPT_vsnprintf)
+#define NPT_vsnprintf vsnprintf
+#endif
+
+#if !defined(NPT_LocalFunctionName)
+#define NPT_LocalFunctionName (NULL)
+#endif
+
+#if !defined(NPT_CONFIG_THREAD_STACK_SIZE)
+#define NPT_CONFIG_THREAD_STACK_SIZE 0
+#endif
+
+#if !defined(NPT_fseek)
+#define NPT_fseek fseeko
+#endif
+
+#if !defined(NPT_ftell)
+#define NPT_ftell ftello
+#endif
+
+#if !defined(NPT_stat)
+#define NPT_stat stat
+#endif
+
+#if !defined(NPT_stat_struct)
+#define NPT_stat_struct struct stat
+#endif
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(DMALLOC)
+#include <dmalloc.h>
+#endif
+
+#endif // _NPT_CONFIG_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptConsole.cpp b/lib/libUPnP/Neptune/Source/Core/NptConsole.cpp
new file mode 100644
index 0000000000..bbd92dd368
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptConsole.cpp
@@ -0,0 +1,67 @@
+/*****************************************************************
+|
+| Neptune - Console
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+
+#if defined(NPT_CONFIG_HAVE_STDARG_H)
+#include <stdarg.h>
+#endif
+
+#include "NptConfig.h"
+#include "NptConsole.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| NPT_ConsoleOutputFunction
++---------------------------------------------------------------------*/
+static void
+NPT_ConsoleOutputFunction(void*, const char* message)
+{
+ NPT_Console::Output(message);
+}
+
+/*----------------------------------------------------------------------
+| NPT_ConsoleOutputF
++---------------------------------------------------------------------*/
+void
+NPT_Console::OutputF(const char* format, ...)
+{
+ va_list args;
+ va_start(args, format);
+
+ NPT_FormatOutput(NPT_ConsoleOutputFunction, NULL, format, args);
+
+ va_end(args);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptConsole.h b/lib/libUPnP/Neptune/Source/Core/NptConsole.h
new file mode 100644
index 0000000000..6502a7912b
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptConsole.h
@@ -0,0 +1,55 @@
+/*****************************************************************
+|
+| Neptune - Console
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+/** @file
+* Header file for console support
+*/
+
+#ifndef _NPT_CONSOLE_H_
+#define _NPT_CONSOLE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| prototypes
++---------------------------------------------------------------------*/
+class NPT_Console {
+public:
+ // class methods
+ static void Output(const char* message);
+ static void OutputF(const char* format, ...);
+};
+
+
+#endif /* _NPT_CONSOLE_H_ */
diff --git a/lib/libUPnP/Neptune/Source/Core/NptConstants.h b/lib/libUPnP/Neptune/Source/Core/NptConstants.h
new file mode 100644
index 0000000000..6618bf842e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptConstants.h
@@ -0,0 +1,44 @@
+/*****************************************************************
+|
+| Neptune - Constants
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_CONSTANTS_H_
+#define _NPT_CONSTANTS_H_
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#ifndef NULL
+#define NULL 0
+#endif
+
+const int NPT_TIMEOUT_INFINITE = -1;
+
+#endif // _NPT_CONSTANTS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.cpp b/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.cpp
new file mode 100644
index 0000000000..f5ab03ced3
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.cpp
@@ -0,0 +1,256 @@
+/*****************************************************************
+|
+| Neptune - Data Buffer
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptDataBuffer.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::NPT_DataBuffer
++---------------------------------------------------------------------*/
+NPT_DataBuffer::NPT_DataBuffer() :
+ m_BufferIsLocal(true),
+ m_Buffer(NULL),
+ m_BufferSize(0),
+ m_DataSize(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::NPT_DataBuffer
++---------------------------------------------------------------------*/
+NPT_DataBuffer::NPT_DataBuffer(NPT_Size bufferSize) :
+ m_BufferIsLocal(true),
+ m_Buffer(bufferSize?new NPT_Byte[bufferSize]:NULL),
+ m_BufferSize(bufferSize),
+ m_DataSize(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::NPT_DataBuffer
++---------------------------------------------------------------------*/
+NPT_DataBuffer::NPT_DataBuffer(const void* data, NPT_Size data_size, bool copy) :
+ m_BufferIsLocal(copy),
+ m_Buffer(copy?(data_size?new NPT_Byte[data_size]:NULL):reinterpret_cast<NPT_Byte*>(const_cast<void*>(data))),
+ m_BufferSize(data_size),
+ m_DataSize(data_size)
+{
+ if (copy && data_size) NPT_CopyMemory(m_Buffer, data, data_size);
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::NPT_DataBuffer
++---------------------------------------------------------------------*/
+NPT_DataBuffer::NPT_DataBuffer(const NPT_DataBuffer& other) :
+ m_BufferIsLocal(true),
+ m_Buffer(NULL),
+ m_BufferSize(other.m_DataSize),
+ m_DataSize(other.m_DataSize)
+{
+ if (m_BufferSize) {
+ m_Buffer = new NPT_Byte[m_BufferSize];
+ NPT_CopyMemory(m_Buffer, other.m_Buffer, m_BufferSize);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::~NPT_DataBuffer
++---------------------------------------------------------------------*/
+NPT_DataBuffer::~NPT_DataBuffer()
+{
+ Clear();
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::Clear
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::Clear()
+{
+ if (m_BufferIsLocal) {
+ delete[] m_Buffer;
+ }
+ m_Buffer = NULL;
+ m_DataSize = 0;
+ m_BufferSize = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::operator=
++---------------------------------------------------------------------*/
+NPT_DataBuffer&
+NPT_DataBuffer::operator=(const NPT_DataBuffer& copy)
+{
+ // do nothing if we're assigning to ourselves
+ if (this != &copy) {
+ Clear();
+
+ m_BufferIsLocal = true;
+ m_BufferSize = copy.m_BufferSize;
+ m_DataSize = copy.m_DataSize;
+
+ if (m_BufferSize) {
+ m_Buffer = new NPT_Byte[m_BufferSize];
+ NPT_CopyMemory(m_Buffer, copy.m_Buffer, m_BufferSize);
+ }
+ }
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::operator==
++---------------------------------------------------------------------*/
+bool
+NPT_DataBuffer::operator==(const NPT_DataBuffer& other) const
+{
+ // check that the sizes match
+ if (m_DataSize != other.m_DataSize) return false;
+
+ return NPT_MemoryEqual(m_Buffer,
+ other.m_Buffer,
+ m_DataSize);
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::SetBuffer
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::SetBuffer(NPT_Byte* buffer, NPT_Size buffer_size)
+{
+ Clear();
+
+ // we're now using an external buffer
+ m_BufferIsLocal = false;
+ m_Buffer = buffer;
+ m_BufferSize = buffer_size;
+ m_DataSize = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::SetBufferSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::SetBufferSize(NPT_Size buffer_size)
+{
+ if (m_BufferIsLocal) {
+ return ReallocateBuffer(buffer_size);
+ } else {
+ return NPT_ERROR_NOT_SUPPORTED; // you cannot change the
+ // buffer management mode
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::Reserve
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::Reserve(NPT_Size size)
+{
+ if (size <= m_BufferSize) return NPT_SUCCESS;
+
+ // try doubling the buffer to accomodate for the new size
+ NPT_Size new_size = m_BufferSize*2;
+ if (new_size < size) new_size = size;
+ return SetBufferSize(new_size);
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::SetDataSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::SetDataSize(NPT_Size size)
+{
+ if (size > m_BufferSize) {
+ // the buffer is too small, we need to reallocate it
+ if (m_BufferIsLocal) {
+ NPT_CHECK(ReallocateBuffer(size));
+ } else {
+ // we cannot reallocate an external buffer
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ }
+ m_DataSize = size;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::SetData
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::SetData(const NPT_Byte* data, NPT_Size size)
+{
+ if (size > m_BufferSize) {
+ if (m_BufferIsLocal) {
+ NPT_CHECK(ReallocateBuffer(size));
+ } else {
+ return NPT_ERROR_INVALID_STATE;
+ }
+ }
+ if (data) NPT_CopyMemory(m_Buffer, data, size);
+ m_DataSize = size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer::ReallocateBuffer
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DataBuffer::ReallocateBuffer(NPT_Size size)
+{
+ // check that the existing data fits
+ if (m_DataSize > size) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // allocate a new buffer
+ NPT_Byte* newBuffer = new NPT_Byte[size];
+
+ // copy the contents of the previous buffer, if any
+ if (m_Buffer && m_DataSize) {
+ NPT_CopyMemory(newBuffer, m_Buffer, m_DataSize);
+ }
+
+ // destroy the previous buffer
+ delete[] m_Buffer;
+
+ // use the new buffer
+ m_Buffer = newBuffer;
+ m_BufferSize = size;
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.h b/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.h
new file mode 100644
index 0000000000..7e57c01c6d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDataBuffer.h
@@ -0,0 +1,83 @@
+/*****************************************************************
+|
+| Neptune - Datagram Packets
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_DATA_BUFFER_H_
+#define _NPT_DATA_BUFFER_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| NPT_DataBuffer
++---------------------------------------------------------------------*/
+class NPT_DataBuffer
+{
+ public:
+ // constructors & destructor
+ NPT_DataBuffer(); // size unknown until first set
+ NPT_DataBuffer(NPT_Size size); // initial size specified
+ NPT_DataBuffer(const void* data, NPT_Size size, bool copy = true); // initial data and size specified
+ NPT_DataBuffer(const NPT_DataBuffer& other);
+ virtual ~NPT_DataBuffer();
+
+ // operators
+ NPT_DataBuffer& operator=(const NPT_DataBuffer& copy);
+ bool operator==(const NPT_DataBuffer& other) const;
+
+ // data buffer handling methods
+ virtual NPT_Result SetBuffer(NPT_Byte* buffer, NPT_Size bufferSize);
+ virtual NPT_Result SetBufferSize(NPT_Size bufferSize);
+ virtual NPT_Size GetBufferSize() const { return m_BufferSize; }
+ virtual NPT_Result Reserve(NPT_Size size);
+ virtual NPT_Result Clear();
+
+ // data handling methods
+ virtual const NPT_Byte* GetData() const { return m_Buffer; }
+ virtual NPT_Byte* UseData() { return m_Buffer; };
+ virtual NPT_Size GetDataSize() const { return m_DataSize; }
+ virtual NPT_Result SetDataSize(NPT_Size size);
+ virtual NPT_Result SetData(const NPT_Byte* data, NPT_Size dataSize);
+
+ protected:
+ // members
+ bool m_BufferIsLocal;
+ NPT_Byte* m_Buffer;
+ NPT_Size m_BufferSize;
+ NPT_Size m_DataSize;
+
+ // methods
+ NPT_Result ReallocateBuffer(NPT_Size size);
+};
+
+#endif // _NPT_DATA_BUFFER_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDebug.cpp b/lib/libUPnP/Neptune/Source/Core/NptDebug.cpp
new file mode 100644
index 0000000000..d9b7041907
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDebug.cpp
@@ -0,0 +1,83 @@
+/*****************************************************************
+|
+| Neptune - Debug Utilities
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdarg.h>
+#include "NptUtils.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_DEBUG_LOCAL_BUFFER_SIZE 1024
+#define NPT_DEBUG_BUFFER_INCREMENT 4096
+#define NPT_DEBUG_BUFFER_MAX_SIZE 65536
+
+/*----------------------------------------------------------------------
+| NPT_Debug
++---------------------------------------------------------------------*/
+void
+NPT_Debug(const char* format, ...)
+{
+#if defined(NPT_DEBUG)
+ char local_buffer[NPT_DEBUG_LOCAL_BUFFER_SIZE];
+ unsigned int buffer_size = NPT_DEBUG_LOCAL_BUFFER_SIZE;
+ char* buffer = local_buffer;
+ va_list args;
+
+ va_start(args, format);
+
+ for(;;) {
+ int result;
+
+ /* try to format the message (it might not fit) */
+ result = NPT_FormatStringVN(buffer, buffer_size-1, format, args);
+ buffer[buffer_size-1] = 0; /* force a NULL termination */
+ if (result >= 0) break;
+
+ /* the buffer was too small, try something bigger */
+ buffer_size = (buffer_size+NPT_DEBUG_BUFFER_INCREMENT)*2;
+ if (buffer_size > NPT_DEBUG_BUFFER_MAX_SIZE) break;
+ if (buffer != local_buffer) delete[] buffer;
+ buffer = new char[buffer_size];
+ if (buffer == NULL) return;
+ }
+
+ NPT_DebugOutput(buffer);
+ if (buffer != local_buffer) delete[] buffer;
+
+ va_end(args);
+#else
+ NPT_COMPILER_UNUSED(format);
+#endif
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDebug.h b/lib/libUPnP/Neptune/Source/Core/NptDebug.h
new file mode 100644
index 0000000000..d4973a2cc5
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDebug.h
@@ -0,0 +1,56 @@
+/*****************************************************************
+|
+| Neptune - Debug Utilities
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_DEBUG_H_
+#define _NPT_DEBUG_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+
+/*----------------------------------------------------------------------
+| standard macros
++---------------------------------------------------------------------*/
+#if defined(NPT_CONFIG_HAVE_ASSERT_H) && defined(NPT_DEBUG)
+#include <assert.h>
+#define NPT_ASSERT(x) assert(x)
+#else
+#define NPT_ASSERT(x) ((void)0)
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_Debug
++---------------------------------------------------------------------*/
+extern void NPT_Debug(const char* format, ...);
+extern void NPT_DebugOutput(const char* message);
+
+#endif // _NPT_DEBUG_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDefs.h b/lib/libUPnP/Neptune/Source/Core/NptDefs.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDefs.h
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDynamicCast.h b/lib/libUPnP/Neptune/Source/Core/NptDynamicCast.h
new file mode 100644
index 0000000000..0acab88121
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDynamicCast.h
@@ -0,0 +1,89 @@
+/*****************************************************************
+|
+| Neptune - Dynamic Cast Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_DYNAMIC_CAST_H_
+#define _NPT_DYNAMIC_CAST_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptCommon.h"
+#include "NptResults.h"
+#include "NptConfig.h"
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#if defined(NPT_CONFIG_NO_RTTI)
+#define NPT_DYNAMIC_CAST(_class,_object) \
+( ((_object)==0) ? 0 : reinterpret_cast<_class*>((_object)->DynamicCast(&_class::_class_##_class)) )
+#define NPT_IMPLEMENT_DYNAMIC_CAST(_class) \
+static int _class_##_class; \
+virtual void* DynamicCast(const void* class_anchor) { \
+ if (class_anchor == &_class::_class_##_class) { \
+ return static_cast<_class*>(this); \
+ } \
+ return NULL; \
+}
+#define NPT_IMPLEMENT_DYNAMIC_CAST_D(_class,_superclass)\
+static int _class_##_class; \
+virtual void* DynamicCast(const void* class_anchor) { \
+ if (class_anchor == &_class::_class_##_class) { \
+ return static_cast<_class*>(this); \
+ } else { \
+ return _superclass::DynamicCast(class_anchor); \
+ } \
+}
+#define NPT_IMPLEMENT_DYNAMIC_CAST_D2(_class,_superclass,_mixin)\
+static int _class_##_class; \
+virtual void* DynamicCast(const void* class_anchor) { \
+ if (class_anchor == &_class::_class_##_class) { \
+ return static_cast<_class*>(this); \
+ } else { \
+ void* sup = _superclass::DynamicCast(class_anchor); \
+ if (sup) return sup; \
+ return _mixin::DynamicCast(class_anchor); \
+ } \
+}
+#define NPT_DEFINE_DYNAMIC_CAST_ANCHOR(_class) int _class::_class_##_class = 0;
+
+#else
+
+#define NPT_DYNAMIC_CAST(_class,_object) dynamic_cast<_class*>(_object)
+#define NPT_IMPLEMENT_DYNAMIC_CAST(_class)
+#define NPT_IMPLEMENT_DYNAMIC_CAST_D(_class,_superclass)
+#define NPT_IMPLEMENT_DYNAMIC_CAST_D2(_class,_superclass,_mixin)
+#define NPT_DEFINE_DYNAMIC_CAST_ANCHOR(_class)
+
+#endif
+
+#endif // _NPT_DYNAMIC_CAST_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.cpp b/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.cpp
new file mode 100644
index 0000000000..556a4d83eb
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.cpp
@@ -0,0 +1,36 @@
+/*****************************************************************
+|
+| Neptune - Dynamic Libraries
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptDynamicLibraries.h"
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.h b/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.h
new file mode 100644
index 0000000000..4a2751ee21
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptDynamicLibraries.h
@@ -0,0 +1,84 @@
+/*****************************************************************
+|
+| Neptune - Dynamic Libraries
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_DYNAMIC_LIBRARIES_H_
+#define _NPT_DYNAMIC_LIBRARIES_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_DYANMIC_LIBRARY_LOAD_FLAG_NOW 1
+
+/*----------------------------------------------------------------------
+| NPT_DynamicLibraryInterface
++---------------------------------------------------------------------*/
+class NPT_DynamicLibraryInterface
+{
+public:
+ virtual ~NPT_DynamicLibraryInterface() {}
+ virtual NPT_Result FindSymbol(const char* name, void*& symbol) = 0;
+ virtual NPT_Result Unload() = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_DynamicLibrary
++---------------------------------------------------------------------*/
+class NPT_DynamicLibrary : public NPT_DynamicLibraryInterface
+{
+public:
+ // class methods
+ static NPT_Result Load(const char* name, NPT_Flags flags, NPT_DynamicLibrary*& library);
+
+ // destructor
+ ~NPT_DynamicLibrary() { delete m_Delegate; }
+
+ // NPT_DynamicLibraryInterface methods
+ virtual NPT_Result FindSymbol(const char* name, void*& symbol) {
+ return m_Delegate->FindSymbol(name, symbol);
+ }
+ virtual NPT_Result Unload() {
+ return m_Delegate->Unload();
+ }
+
+private:
+ // methods
+ NPT_DynamicLibrary(NPT_DynamicLibraryInterface* delegate) : m_Delegate(delegate) {}
+
+ // members
+ NPT_DynamicLibraryInterface* m_Delegate;
+};
+
+#endif // _NPT_DYNAMIC_LIBRARIES_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptFile.cpp b/lib/libUPnP/Neptune/Source/Core/NptFile.cpp
new file mode 100644
index 0000000000..49049864a1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptFile.cpp
@@ -0,0 +1,416 @@
+/*****************************************************************
+|
+| Neptune - Files
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptFile.h"
+#include "NptUtils.h"
+#include "NptConstants.h"
+#include "NptStreams.h"
+#include "NptDataBuffer.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.file")
+
+/*----------------------------------------------------------------------
+| NPT_FilePath::BaseName
++---------------------------------------------------------------------*/
+NPT_String
+NPT_FilePath::BaseName(const char* path, bool with_extension /* = true */)
+{
+ NPT_String result = path;
+ int separator = result.ReverseFind(Separator);
+ if (separator >= 0) {
+ result = path+separator+NPT_StringLength(Separator);
+ }
+
+ if (!with_extension) {
+ int dot = result.ReverseFind('.');
+ if (dot >= 0) {
+ result.SetLength(dot);
+ }
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_FilePath::DirName
++---------------------------------------------------------------------*/
+NPT_String
+NPT_FilePath::DirName(const char* path)
+{
+ NPT_String result = path;
+ int separator = result.ReverseFind(Separator);
+ if (separator >= 0) {
+ if (separator == 0) {
+ result.SetLength(NPT_StringLength(Separator));
+ } else {
+ result.SetLength(separator);
+ }
+ } else {
+ result.SetLength(0);
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_FilePath::FileExtension
++---------------------------------------------------------------------*/
+NPT_String
+NPT_FilePath::FileExtension(const char* path)
+{
+ NPT_String result = path;
+ int separator = result.ReverseFind('.');
+ if (separator >= 0) {
+ result = path+separator;
+ } else {
+ result.SetLength(0);
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_FilePath::Create
++---------------------------------------------------------------------*/
+NPT_String
+NPT_FilePath::Create(const char* directory, const char* basename)
+{
+ if (!directory || NPT_StringLength(directory) == 0) return basename;
+ if (!basename || NPT_StringLength(basename) == 0) return directory;
+
+ NPT_String result = directory;
+ if (!result.EndsWith(Separator) && basename[0] != Separator[0]) {
+ result += Separator;
+ }
+ result += basename;
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetCount
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetCount(const char* path, NPT_Cardinal& count)
+{
+ NPT_File file(path);
+ return file.GetCount(count);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::CreateDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::CreateDir(const char* path, bool recursively)
+{
+ NPT_String fullpath = path;
+
+ // replace delimiters with the proper one for the platform
+ fullpath.Replace((NPT_FilePath::Separator[0] == '/')?'\\':'/',
+ NPT_FilePath::Separator);
+ // remove excessive delimiters
+ fullpath.TrimRight(NPT_FilePath::Separator);
+
+ if (recursively) {
+ NPT_String parent_path;
+
+ // look for a delimiter from the beginning
+ int delimiter = fullpath.Find(NPT_FilePath::Separator, 1);
+ while (delimiter > 0) {
+ // copy the path up to the delimiter
+ parent_path = fullpath.SubString(0, delimiter);
+
+ // create the directory non recursively
+ NPT_CHECK(NPT_File::CreateDir(parent_path, false));
+
+ // look for the next delimiter
+ delimiter = fullpath.Find(NPT_FilePath::Separator, delimiter + 1);
+ }
+ }
+
+ // create directory
+ NPT_Result res = NPT_File::CreateDir(fullpath);
+
+ // return error only if file didn't exist
+ if (NPT_FAILED(res) && res != NPT_ERROR_FILE_ALREADY_EXISTS) {
+ NPT_CHECK_FATAL(res);
+ }
+ return NPT_SUCCESS;
+}
+
+
+/*----------------------------------------------------------------------
+| NPT_DirectoryRemove
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::RemoveDir(const char* path, bool recursively)
+{
+ NPT_String root_path = path;
+
+ // replace delimiters with the proper one for the platform
+ root_path.Replace((NPT_FilePath::Separator[0] == '/')?'\\':'/',
+ NPT_FilePath::Separator);
+ // remove excessive delimiters
+ root_path.TrimRight(NPT_FilePath::Separator);
+
+ if (recursively) {
+ // enumerate all entries
+ NPT_File dir(root_path);
+ NPT_List<NPT_String> entries;
+ NPT_CHECK(dir.ListDir(entries));
+ for (NPT_List<NPT_String>::Iterator it = entries.GetFirstItem();
+ it;
+ ++it) {
+ NPT_File::Remove(NPT_FilePath::Create(root_path, *it), true);
+ }
+ }
+
+ return NPT_File::RemoveDir(root_path);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Load(const char* path, NPT_DataBuffer& buffer, NPT_FileInterface::OpenMode mode)
+{
+ // create and open the file
+ NPT_File file(path);
+ NPT_Result result = file.Open(mode);
+ if (NPT_FAILED(result)) return result;
+
+ // load the file
+ result = file.Load(buffer);
+
+ // close the file
+ file.Close();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Load(const char* path, NPT_String& data, NPT_FileInterface::OpenMode mode)
+{
+ NPT_DataBuffer buffer;
+
+ // reset ouput params
+ data = "";
+
+ // create and open the file
+ NPT_File file(path);
+ NPT_Result result = file.Open(mode);
+ if (NPT_FAILED(result)) return result;
+
+ // load the file
+ result = file.Load(buffer);
+
+ if (NPT_SUCCEEDED(result) && buffer.GetDataSize() > 0) {
+ data.Assign((const char*)buffer.GetData(), buffer.GetDataSize());
+ data.SetLength(buffer.GetDataSize());
+ }
+
+ // close the file
+ file.Close();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Save
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Save(const char* filename, NPT_String& data)
+{
+ NPT_DataBuffer buffer(data.GetChars(), data.GetLength());
+ return NPT_File::Save(filename, buffer);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Save
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Save(const char* filename, const NPT_DataBuffer& buffer)
+{
+ // create and open the file
+ NPT_File file(filename);
+ NPT_Result result = file.Open(NPT_FILE_OPEN_MODE_WRITE | NPT_FILE_OPEN_MODE_CREATE | NPT_FILE_OPEN_MODE_TRUNCATE);
+ if (NPT_FAILED(result)) return result;
+
+ // load the file
+ result = file.Save(buffer);
+
+ // close the file
+ file.Close();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Load(NPT_DataBuffer& buffer)
+{
+ NPT_InputStreamReference input;
+
+ // get the input stream for the file
+ NPT_CHECK_WARNING(GetInputStream(input));
+
+ // read the stream
+ return input->Load(buffer);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Save
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Save(const NPT_DataBuffer& buffer)
+{
+ NPT_OutputStreamReference output;
+
+ // get the output stream for the file
+ NPT_CHECK_WARNING(GetOutputStream(output));
+
+ // write to the stream
+ return output->WriteFully(buffer.GetData(), buffer.GetDataSize());
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetInfo(NPT_FileInfo& info)
+{
+ if (m_IsSpecial) {
+ info.m_Type = NPT_FileInfo::FILE_TYPE_SPECIAL;
+ info.m_Size = 0;
+ info.m_Attributes = 0;
+ info.m_AttributesMask = 0;
+ return NPT_SUCCESS;
+ }
+ return GetInfo(m_Path.GetChars(), &info);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetSize(NPT_LargeSize& size)
+{
+ // default value
+ size = 0;
+
+ // get the size from the info (call GetInfo() in case it has not
+ // yet been called)
+ NPT_FileInfo info;
+ GetInfo(info);
+ size = info.m_Size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetSize(const char* path, NPT_LargeSize& size)
+{
+ NPT_File file(path);
+ return file.GetSize(size);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Remove
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Remove(const char* path, bool recursively /* = false */)
+{
+ NPT_FileInfo info;
+
+ // make sure the path exists
+ NPT_CHECK(GetInfo(path, &info));
+
+ if (info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY) {
+ return RemoveDir(path, recursively);
+ } else {
+ return RemoveFile(path);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Rename
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Rename(const char* path)
+{
+ NPT_Result result = Rename(m_Path.GetChars(), path);
+ if (NPT_SUCCEEDED(result)) {
+ m_Path = path;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::ListDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::ListDir(NPT_List<NPT_String>& entries)
+{
+ entries.Clear();
+ return ListDir(m_Path.GetChars(), entries);
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetCount
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetCount(NPT_Cardinal& count)
+{
+ // reset output params
+ count = 0;
+
+ NPT_List<NPT_String> entries;
+ NPT_CHECK(ListDir(entries));
+
+ count = entries.GetItemCount();
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptFile.h b/lib/libUPnP/Neptune/Source/Core/NptFile.h
new file mode 100644
index 0000000000..a33ae5f895
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptFile.h
@@ -0,0 +1,203 @@
+/*****************************************************************
+|
+| Neptune - Files
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_FILE_H_
+#define _NPT_FILE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptStreams.h"
+#include "NptTime.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_NO_SUCH_FILE = NPT_ERROR_BASE_FILE - 0;
+const int NPT_ERROR_FILE_NOT_OPEN = NPT_ERROR_BASE_FILE - 1;
+const int NPT_ERROR_FILE_BUSY = NPT_ERROR_BASE_FILE - 2;
+const int NPT_ERROR_FILE_ALREADY_OPEN = NPT_ERROR_BASE_FILE - 3;
+const int NPT_ERROR_FILE_NOT_READABLE = NPT_ERROR_BASE_FILE - 4;
+const int NPT_ERROR_FILE_NOT_WRITABLE = NPT_ERROR_BASE_FILE - 5;
+const int NPT_ERROR_FILE_NOT_DIRECTORY = NPT_ERROR_BASE_FILE - 6;
+const int NPT_ERROR_FILE_ALREADY_EXISTS = NPT_ERROR_BASE_FILE - 7;
+const int NPT_ERROR_FILE_NOT_ENOUGH_SPACE = NPT_ERROR_BASE_FILE - 8;
+const int NPT_ERROR_DIRECTORY_NOT_EMPTY = NPT_ERROR_BASE_FILE - 9;
+
+const unsigned int NPT_FILE_OPEN_MODE_READ = 0x01;
+const unsigned int NPT_FILE_OPEN_MODE_WRITE = 0x02;
+const unsigned int NPT_FILE_OPEN_MODE_CREATE = 0x04;
+const unsigned int NPT_FILE_OPEN_MODE_TRUNCATE = 0x08;
+const unsigned int NPT_FILE_OPEN_MODE_UNBUFFERED = 0x10;
+const unsigned int NPT_FILE_OPEN_MODE_APPEND = 0x20;
+
+const unsigned int NPT_FILE_ATTRIBUTE_READ_ONLY = 0x01;
+const unsigned int NPT_FILE_ATTRIBUTE_LINK = 0x02;
+
+#define NPT_FILE_STANDARD_INPUT "@STDIN"
+#define NPT_FILE_STANDARD_OUTPUT "@STDOUT"
+#define NPT_FILE_STANDARD_ERROR "@STDERR"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_DataBuffer;
+
+/*----------------------------------------------------------------------
+| NPT_FileInfo
++---------------------------------------------------------------------*/
+struct NPT_FileInfo
+{
+ // types
+ typedef enum {
+ FILE_TYPE_NONE,
+ FILE_TYPE_REGULAR,
+ FILE_TYPE_DIRECTORY,
+ FILE_TYPE_SPECIAL,
+ FILE_TYPE_OTHER
+ } FileType;
+
+ // constructor
+ NPT_FileInfo() : m_Type(FILE_TYPE_NONE), m_Size(0), m_AttributesMask(0), m_Attributes(0) {}
+
+ // members
+ FileType m_Type;
+ NPT_UInt64 m_Size;
+ NPT_Flags m_AttributesMask;
+ NPT_Flags m_Attributes;
+ NPT_TimeStamp m_Created;
+ NPT_TimeStamp m_Modified;
+};
+
+/*----------------------------------------------------------------------
+| NPT_FilePath
++---------------------------------------------------------------------*/
+class NPT_FilePath
+{
+public:
+ // class members
+ static const NPT_String Separator;
+
+ // class methods
+ static NPT_String BaseName(const char* path, bool with_extension = true);
+ static NPT_String DirName(const char* path);
+ static NPT_String FileExtension(const char* path);
+ static NPT_String Create(const char* directory, const char* base);
+
+private:
+ NPT_FilePath() {} // this class can't have instances
+};
+
+/*----------------------------------------------------------------------
+| NPT_FileInterface
++---------------------------------------------------------------------*/
+class NPT_FileInterface
+{
+public:
+ // types
+ typedef unsigned int OpenMode;
+
+ // constructors and destructor
+ virtual ~NPT_FileInterface() {}
+
+ // methods
+ virtual NPT_Result Open(OpenMode mode) = 0;
+ virtual NPT_Result Close() = 0;
+ virtual NPT_Result GetInputStream(NPT_InputStreamReference& stream) = 0;
+ virtual NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_File
++---------------------------------------------------------------------*/
+class NPT_File : public NPT_FileInterface
+{
+public:
+ // class methods
+ static NPT_Result GetRoots(NPT_List<NPT_String>& roots);
+ static NPT_Result GetSize(const char* path, NPT_LargeSize &size);
+ static NPT_Result GetInfo(const char* path, NPT_FileInfo* info = NULL);
+ static NPT_Result GetCount(const char* path, NPT_Cardinal& count);
+ static bool Exists(const char* path) { return NPT_SUCCEEDED(GetInfo(path)); }
+ static NPT_Result Remove(const char* path, bool recursively = false);
+ static NPT_Result RemoveFile(const char* path);
+ static NPT_Result RemoveDir(const char* path);
+ static NPT_Result RemoveDir(const char* path, bool recursively);
+ static NPT_Result Rename(const char* from_path, const char* to_path);
+ static NPT_Result ListDir(const char* path, NPT_List<NPT_String>& entries, NPT_Ordinal start = 0, NPT_Cardinal count = 0);
+ static NPT_Result CreateDir(const char* path);
+ static NPT_Result CreateDir(const char* path, bool recursively);
+ static NPT_Result GetWorkingDir(NPT_String& path);
+ static NPT_Result Load(const char* path, NPT_DataBuffer& buffer, NPT_FileInterface::OpenMode mode = NPT_FILE_OPEN_MODE_READ);
+ static NPT_Result Load(const char* path, NPT_String& data, NPT_FileInterface::OpenMode mode = NPT_FILE_OPEN_MODE_READ);
+ static NPT_Result Save(const char* path, NPT_String& data);
+ static NPT_Result Save(const char* path, const NPT_DataBuffer& buffer);
+
+ // constructors and destructor
+ NPT_File(const char* path);
+ ~NPT_File() { delete m_Delegate; }
+
+ // methods
+ NPT_Result Load(NPT_DataBuffer& buffer);
+ NPT_Result Save(const NPT_DataBuffer& buffer);
+ const NPT_String& GetPath() { return m_Path; }
+ NPT_Result GetSize(NPT_LargeSize &size);
+ NPT_Result GetInfo(NPT_FileInfo& info);
+ NPT_Result ListDir(NPT_List<NPT_String>& entries);
+ NPT_Result Rename(const char* path);
+ NPT_Result GetCount(NPT_Cardinal& count);
+
+ // NPT_FileInterface methods
+ NPT_Result Open(OpenMode mode) {
+ return m_Delegate->Open(mode);
+ }
+ NPT_Result Close() {
+ return m_Delegate->Close();
+ }
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream) {
+ return m_Delegate->GetInputStream(stream);
+ }
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) {
+ return m_Delegate->GetOutputStream(stream);
+ }
+
+ // operators
+ NPT_File& operator=(const NPT_File& file);
+
+protected:
+ // members
+ NPT_FileInterface* m_Delegate;
+ NPT_String m_Path;
+ bool m_IsSpecial;
+};
+
+#endif // _NPT_FILE_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptHttp.cpp b/lib/libUPnP/Neptune/Source/Core/NptHttp.cpp
new file mode 100644
index 0000000000..f2a5cbbbf4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptHttp.cpp
@@ -0,0 +1,2378 @@
+/*****************************************************************
+|
+| Neptune - HTTP Protocol
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptHttp.h"
+#include "NptSockets.h"
+#include "NptBufferedStreams.h"
+#include "NptDebug.h"
+#include "NptVersion.h"
+#include "NptUtils.h"
+#include "NptFile.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.http")
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+NPT_String NPT_HttpClient::m_UserAgentHeader = "Neptune/" NPT_NEPTUNE_VERSION_STRING;
+NPT_String NPT_HttpServer::m_ServerHeader = "Neptune/" NPT_NEPTUNE_VERSION_STRING;
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_HTTP_MAX_REDIRECTS = 20;
+const char* const NPT_HTTP_DEFAULT_403_HTML = "<html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>Access to this URL is forbidden.</p></html>";
+const char* const NPT_HTTP_DEFAULT_404_HTML = "<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></html>";
+const char* const NPT_HTTP_DEFAULT_500_HTML = "<html><head><title>500 Internal Error</title></head><body><h1>Internal Error</h1><p>The server encountered an unexpected condition which prevented it from fulfilling the request.</p></html>";
+
+/*----------------------------------------------------------------------
+| NPT_HttpUrl::NPT_HttpUrl
++---------------------------------------------------------------------*/
+NPT_HttpUrl::NPT_HttpUrl(const char* url, bool ignore_scheme) :
+ NPT_Url(url, ignore_scheme?SCHEME_ID_UNKNOWN:SCHEME_ID_HTTP, NPT_HTTP_DEFAULT_PORT)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpUrl::NPT_HttpUrl
++---------------------------------------------------------------------*/
+NPT_HttpUrl::NPT_HttpUrl(const char* host,
+ NPT_UInt16 port,
+ const char* path,
+ const char* query,
+ const char* fragment) :
+ NPT_Url("http", host, port, path, query, fragment)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpUrl::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_HttpUrl::ToString(bool with_fragment) const
+{
+ return NPT_Url::ToStringWithDefaultPort(NPT_HTTP_DEFAULT_PORT, with_fragment);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader::NPT_HttpHeader
++---------------------------------------------------------------------*/
+NPT_HttpHeader::NPT_HttpHeader(const char* name, const char* value):
+ m_Name(name),
+ m_Value(value)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader::~NPT_HttpHeader
++---------------------------------------------------------------------*/
+NPT_HttpHeader::~NPT_HttpHeader()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader::Emit
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeader::Emit(NPT_OutputStream& stream) const
+{
+ stream.WriteString(m_Name);
+ stream.WriteFully(": ", 2);
+ stream.WriteString(m_Value);
+ stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+ NPT_LOG_FINEST_2("header %s: %s", m_Name.GetChars(), m_Value.GetChars());
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader::SetName
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeader::SetName(const char* name)
+{
+ m_Name = name;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader::~NPT_HttpHeader
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeader::SetValue(const char* value)
+{
+ m_Value = value;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::NPT_HttpHeaders
++---------------------------------------------------------------------*/
+NPT_HttpHeaders::NPT_HttpHeaders()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::~NPT_HttpHeaders
++---------------------------------------------------------------------*/
+NPT_HttpHeaders::~NPT_HttpHeaders()
+{
+ m_Headers.Apply(NPT_ObjectDeleter<NPT_HttpHeader>());
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeaders::Parse(NPT_BufferedInputStream& stream)
+{
+ NPT_String header_name;
+ NPT_String header_value;
+ bool header_pending = false;
+ NPT_String line;
+
+ while (NPT_SUCCEEDED(stream.ReadLine(line, NPT_HTTP_PROTOCOL_MAX_LINE_LENGTH))) {
+ if (line.GetLength() == 0) {
+ // empty line, end of headers
+ break;
+ }
+ if (header_pending && (line[0] == ' ' || line[0] == '\t')) {
+ // continuation (folded header)
+ header_value.Append(line.GetChars()+1, line.GetLength()-1);
+ } else {
+ // add the pending header to the list
+ if (header_pending) {
+ header_value.Trim();
+ AddHeader(header_name, header_value);
+ header_pending = false;
+ NPT_LOG_FINEST_2("header - %s: %s",
+ header_name.GetChars(),
+ header_value.GetChars());
+ }
+
+ // find the colon separating the name and the value
+ int colon_index = line.Find(':');
+ if (colon_index < 1) {
+ // invalid syntax, ignore
+ continue;
+ }
+ header_name = line.Left(colon_index);
+
+ // the field value starts at the first non-whitespace
+ const char* value = line.GetChars()+colon_index+1;
+ while (*value == ' ' || *value == '\t') {
+ value++;
+ }
+ header_value = value;
+
+ // the header is pending
+ header_pending = true;
+ }
+ }
+
+ // if we have a header pending, add it now
+ if (header_pending) {
+ header_value.Trim();
+ AddHeader(header_name, header_value);
+ header_pending = false;
+ NPT_LOG_FINEST_2("header %s: %s",
+ header_name.GetChars(),
+ header_value.GetChars());
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::Emit
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeaders::Emit(NPT_OutputStream& stream) const
+{
+ // for each header in the list
+ NPT_List<NPT_HttpHeader*>::Iterator header = m_Headers.GetFirstItem();
+ while (header) {
+ // emit the header
+ NPT_CHECK_WARNING((*header)->Emit(stream));
+ ++header;
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::GetHeader
++---------------------------------------------------------------------*/
+NPT_HttpHeader*
+NPT_HttpHeaders::GetHeader(const char* name) const
+{
+ // check args
+ if (name == NULL) return NULL;
+
+ // find a matching header
+ NPT_List<NPT_HttpHeader*>::Iterator header = m_Headers.GetFirstItem();
+ while (header) {
+ if ((*header)->GetName().Compare(name, true) == 0) {
+ return *header;
+ }
+ ++header;
+ }
+
+ // not found
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::AddHeader
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeaders::AddHeader(const char* name, const char* value)
+{
+ return m_Headers.Add(new NPT_HttpHeader(name, value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::SetHeader
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpHeaders::SetHeader(const char* name, const char* value, bool replace)
+{
+ NPT_HttpHeader* header = GetHeader(name);
+ if (header == NULL) {
+ return AddHeader(name, value);
+ } else if (replace) {
+ return header->SetValue(value);
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders::GetHeaderValue
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_HttpHeaders::GetHeaderValue(const char* name) const
+{
+ NPT_HttpHeader* header = GetHeader(name);
+ if (header == NULL) {
+ return NULL;
+ } else {
+ return &header->GetValue();
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::NPT_HttpEntity
++---------------------------------------------------------------------*/
+NPT_HttpEntity::NPT_HttpEntity() :
+ m_ContentLength(0),
+ m_HasContentLength(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::NPT_HttpEntity
++---------------------------------------------------------------------*/
+NPT_HttpEntity::NPT_HttpEntity(const NPT_HttpHeaders& headers) :
+ m_ContentLength(0),
+ m_HasContentLength(false)
+{
+ SetHeaders(headers);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::~NPT_HttpEntity
++---------------------------------------------------------------------*/
+NPT_HttpEntity::~NPT_HttpEntity()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetHeaders
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetHeaders(const NPT_HttpHeaders& headers)
+{
+ NPT_HttpHeader* header;
+
+ // Content-Length
+ header = headers.GetHeader(NPT_HTTP_HEADER_CONTENT_LENGTH);
+ if (header != NULL) {
+ m_HasContentLength = true;
+ NPT_LargeSize length;
+ if (NPT_SUCCEEDED(header->GetValue().ToInteger64(length))) {
+ m_ContentLength = length;
+ } else {
+ m_ContentLength = 0;
+ }
+ }
+
+ // Content-Type
+ header = headers.GetHeader(NPT_HTTP_HEADER_CONTENT_TYPE);
+ if (header != NULL) {
+ m_ContentType = header->GetValue();
+ }
+
+ // Content-Encoding
+ header = headers.GetHeader(NPT_HTTP_HEADER_CONTENT_ENCODING);
+ if (header != NULL) {
+ m_ContentEncoding = header->GetValue();
+ }
+
+ // Transfer-Encoding
+ header = headers.GetHeader(NPT_HTTP_HEADER_TRANSFER_ENCODING);
+ if (header != NULL) {
+ m_TransferEncoding = header->GetValue();
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // reset output params first
+ stream = NULL;
+
+ if (m_InputStream.IsNull()) return NPT_FAILURE;
+
+ stream = m_InputStream;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetInputStream(const NPT_InputStreamReference& stream,
+ bool update_content_length /* = false */)
+{
+ m_InputStream = stream;
+
+ // get the content length from the stream
+ if (update_content_length) {
+ m_HasContentLength = true;
+ m_ContentLength = 0;
+ if (!stream.IsNull()) {
+ if (NPT_FAILED(stream->GetSize(m_ContentLength))) {
+ m_ContentLength = 0;
+ }
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetInputStream(const void* data, NPT_Size data_size)
+{
+ NPT_MemoryStream* memory_stream = new NPT_MemoryStream(data, data_size);
+ NPT_InputStreamReference body(memory_stream);
+ return SetInputStream(body, true);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetInputStream(const char* string)
+{
+ if (string == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ NPT_MemoryStream* memory_stream = new NPT_MemoryStream((const void*)string,
+ NPT_StringLength(string));
+ NPT_InputStreamReference body(memory_stream);
+ return SetInputStream(body, true);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetInputStream(const NPT_String& string)
+{
+ NPT_MemoryStream* memory_stream = new NPT_MemoryStream((const void*)string.GetChars(),
+ string.GetLength());
+ NPT_InputStreamReference body(memory_stream);
+ return SetInputStream(body, true);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::Load(NPT_DataBuffer& buffer)
+{
+ // check that we have an input stream
+ if (m_InputStream.IsNull()) return NPT_ERROR_INVALID_STATE;
+
+ // load the stream into the buffer
+ if (m_ContentLength != (NPT_Size)m_ContentLength) return NPT_ERROR_OUT_OF_RANGE;
+ return m_InputStream->Load(buffer, (NPT_Size)m_ContentLength);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetContentLength
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetContentLength(NPT_LargeSize length)
+{
+ m_ContentLength = length;
+ m_HasContentLength = true;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetContentType
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetContentType(const char* type)
+{
+ m_ContentType = type;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetContentEncoding
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetContentEncoding(const char* encoding)
+{
+ m_ContentEncoding = encoding;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity::SetTransferEncoding
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpEntity::SetTransferEncoding(const char* encoding)
+{
+ m_TransferEncoding = encoding;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpMessage::NPT_HttpMessage
++---------------------------------------------------------------------*/
+NPT_HttpMessage::NPT_HttpMessage(const char* protocol) :
+ m_Protocol(protocol),
+ m_Entity(NULL)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpMessage::NPT_HttpMessage
++---------------------------------------------------------------------*/
+NPT_HttpMessage::~NPT_HttpMessage()
+{
+ delete m_Entity;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpMessage::SetEntity
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpMessage::SetEntity(NPT_HttpEntity* entity)
+{
+ if (entity != m_Entity) {
+ delete m_Entity;
+ m_Entity = entity;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpMessage::ParseHeaders
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpMessage::ParseHeaders(NPT_BufferedInputStream& stream)
+{
+ return m_Headers.Parse(stream);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::NPT_HttpRequest
++---------------------------------------------------------------------*/
+NPT_HttpRequest::NPT_HttpRequest(const NPT_HttpUrl& url,
+ const char* method,
+ const char* protocol) :
+ NPT_HttpMessage(protocol),
+ m_Url(url),
+ m_Method(method)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::NPT_HttpRequest
++---------------------------------------------------------------------*/
+NPT_HttpRequest::NPT_HttpRequest(const char* url,
+ const char* method,
+ const char* protocol) :
+ NPT_HttpMessage(protocol),
+ m_Url(url),
+ m_Method(method)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::SetUrl
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpRequest::SetUrl(const char* url)
+{
+ m_Url = url;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::SetUrl
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpRequest::SetUrl(const NPT_HttpUrl& url)
+{
+ m_Url = url;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpRequest::Parse(NPT_BufferedInputStream& stream,
+ const NPT_SocketAddress* endpoint,
+ NPT_HttpRequest*& request)
+{
+ // default return value
+ request = NULL;
+
+ // read the response line
+ NPT_String line;
+ NPT_CHECK_FINE(stream.ReadLine(line, NPT_HTTP_PROTOCOL_MAX_LINE_LENGTH));
+ NPT_LOG_FINEST_1("http request: %s", line.GetChars());
+
+ // check the request line
+ int first_space = line.Find(' ');
+ if (first_space < 0) return NPT_ERROR_HTTP_INVALID_REQUEST_LINE;
+ int second_space = line.Find(' ', first_space+1);
+ if (second_space < 0) {
+ return NPT_ERROR_HTTP_INVALID_REQUEST_LINE;
+ }
+
+ // parse the request line
+ NPT_String method = line.SubString(0, first_space);
+ NPT_String uri = line.SubString(first_space+1, second_space-first_space-1);
+ NPT_String protocol = line.SubString(second_space+1);
+
+ // create a request
+ bool proxy_style_request = false;
+ if (uri.StartsWith("http://", true)) {
+ // proxy-style request with absolute URI
+ request = new NPT_HttpRequest(uri, method, protocol);
+ proxy_style_request = true;
+ } else {
+ // normal absolute path request
+ request = new NPT_HttpRequest("http:", method, protocol);
+ }
+
+ // parse headers
+ NPT_Result result = request->ParseHeaders(stream);
+ if (NPT_FAILED(result)) {
+ delete request;
+ request = NULL;
+ return result;
+ }
+
+ // update the URL
+ if (!proxy_style_request) {
+ request->m_Url.SetScheme("http");
+ request->m_Url.SetPathPlus(uri);
+ request->m_Url.SetPort(NPT_HTTP_DEFAULT_PORT);
+
+ // check for a Host: header
+ NPT_HttpHeader* host_header = request->GetHeaders().GetHeader(NPT_HTTP_HEADER_HOST);
+ if (host_header) {
+ request->m_Url.SetHost(host_header->GetValue());
+ } else {
+ // use the endpoint as the host
+ if (endpoint) {
+ request->m_Url.SetHost(endpoint->ToString());
+ } else {
+ // use defaults
+ request->m_Url.SetHost("localhost");
+ }
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::~NPT_HttpRequest
++---------------------------------------------------------------------*/
+NPT_HttpRequest::~NPT_HttpRequest()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest::Emit
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpRequest::Emit(NPT_OutputStream& stream, bool use_proxy) const
+{
+ // write the request line
+ stream.WriteString(m_Method);
+ stream.WriteFully(" ", 1);
+ if (use_proxy) {
+ stream.WriteString(m_Url.ToString(false));
+ } else {
+ stream.WriteString(m_Url.ToRequestString());
+ }
+ stream.WriteFully(" ", 1);
+ stream.WriteString(m_Protocol);
+ stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+
+ // emit headers
+ m_Headers.Emit(stream);
+
+ // finish with an empty line
+ stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::NPT_HttpResponse
++---------------------------------------------------------------------*/
+NPT_HttpResponse::NPT_HttpResponse(NPT_HttpStatusCode status_code,
+ const char* reason_phrase,
+ const char* protocol) :
+ NPT_HttpMessage(protocol),
+ m_StatusCode(status_code),
+ m_ReasonPhrase(reason_phrase)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::~NPT_HttpResponse
++---------------------------------------------------------------------*/
+NPT_HttpResponse::~NPT_HttpResponse()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::SetStatus
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponse::SetStatus(NPT_HttpStatusCode status_code,
+ const char* reason_phrase,
+ const char* protocol)
+{
+ m_StatusCode = status_code;
+ m_ReasonPhrase = reason_phrase;
+ m_Protocol = protocol;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::SetProtocol
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponse::SetProtocol(const char* protocol)
+{
+ m_Protocol = protocol;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::Emit
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponse::Emit(NPT_OutputStream& stream) const
+{
+ // write the request line
+ stream.WriteString(m_Protocol);
+ stream.WriteFully(" ", 1);
+ stream.WriteString(NPT_String::FromInteger(m_StatusCode));
+ stream.WriteFully(" ", 1);
+ stream.WriteString(m_ReasonPhrase);
+ stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+
+ // emit headers
+ m_Headers.Emit(stream);
+
+ // finish with an empty line
+ stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponse::Parse(NPT_BufferedInputStream& stream,
+ NPT_HttpResponse*& response,
+ bool reuse_response /* = false */)
+{
+ // default return value
+ if (!reuse_response) response = NULL;
+
+ // read the response line
+ NPT_String line;
+ NPT_Result res = stream.ReadLine(line, NPT_HTTP_PROTOCOL_MAX_LINE_LENGTH);
+ if (NPT_FAILED(res)) {
+ if (res != NPT_ERROR_TIMEOUT && res != NPT_ERROR_EOS) NPT_CHECK_WARNING(res);
+ return res;
+ }
+
+ // check the response line
+ int first_space = line.Find(' ');
+ if (first_space < 0) return NPT_ERROR_HTTP_INVALID_RESPONSE_LINE;
+ int second_space = line.Find(' ', first_space+1);
+ if (second_space < 0 || second_space-first_space != 4) {
+ return NPT_ERROR_HTTP_INVALID_RESPONSE_LINE;
+ }
+
+ // parse the response line
+ NPT_String protocol = line.SubString(0, first_space);
+ NPT_String status_code = line.SubString(first_space+1, 3);
+ NPT_String reason_phrase = line.SubString(first_space+1+3+1,
+ line.GetLength()-(first_space+1+3+1));
+
+ // create a response object
+ NPT_UInt32 status_code_int = 0;
+ status_code.ToInteger(status_code_int);
+ if (!reuse_response) {
+ response = new NPT_HttpResponse(status_code_int, reason_phrase, protocol);
+ } else {
+ response->SetStatus(status_code_int, reason_phrase, protocol);
+ }
+
+ // parse headers
+ NPT_Result result = response->ParseHeaders(stream);
+ if (NPT_FAILED(result)) {
+ delete response;
+ response = NULL;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpTcpConnector
++---------------------------------------------------------------------*/
+class NPT_HttpTcpConnector : public NPT_HttpClient::Connector
+{
+ virtual NPT_Result Connect(const char* hostname,
+ NPT_UInt16 port,
+ NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout,
+ NPT_Timeout name_resolver_timeout,
+ NPT_InputStreamReference& input_stream,
+ NPT_OutputStreamReference& output_stream);
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpTcpConnector::Connect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpTcpConnector::Connect(const char* hostname,
+ NPT_UInt16 port,
+ NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout,
+ NPT_Timeout name_resolver_timeout,
+ NPT_InputStreamReference& input_stream,
+ NPT_OutputStreamReference& output_stream)
+{
+ // get the address and port to which we need to connect
+ NPT_IpAddress address;
+ NPT_CHECK(address.ResolveName(hostname, name_resolver_timeout));
+
+ // connect to the server
+ NPT_LOG_FINE_2("TCP connector will connect to %s:%d", hostname, port);
+ NPT_TcpClientSocket connection;
+ connection.SetReadTimeout(io_timeout);
+ connection.SetWriteTimeout(io_timeout);
+ NPT_SocketAddress socket_address(address, port);
+ NPT_CHECK(connection.Connect(socket_address, connection_timeout));
+
+ // get the streams
+ NPT_CHECK(connection.GetInputStream(input_stream));
+ NPT_CHECK(connection.GetOutputStream(output_stream));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpProxySelector::GetSystemDefault()
++---------------------------------------------------------------------*/
+//// temporary place holder implementation
+NPT_HttpProxySelector*
+NPT_HttpProxySelector::GetSystemDefault()
+{
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticProxySelector
++---------------------------------------------------------------------*/
+class NPT_HttpStaticProxySelector : public NPT_HttpProxySelector
+{
+public:
+ // constructor
+ NPT_HttpStaticProxySelector(const char* hostname, NPT_UInt16 port);
+
+ // NPT_HttpProxySelector methods
+ NPT_Result GetProxyForUrl(const NPT_HttpUrl& url, NPT_HttpProxyAddress& proxy);
+
+private:
+ // members
+ NPT_HttpProxyAddress m_Proxy;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticProxySelector::NPT_HttpStaticProxySelector
++---------------------------------------------------------------------*/
+NPT_HttpStaticProxySelector::NPT_HttpStaticProxySelector(const char* hostname, NPT_UInt16 port) :
+ m_Proxy(hostname, port)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticProxySelector::GetProxyForUrl
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpStaticProxySelector::GetProxyForUrl(const NPT_HttpUrl& /* url */,
+ NPT_HttpProxyAddress& proxy)
+{
+ proxy = m_Proxy;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::NPT_HttpClient
++---------------------------------------------------------------------*/
+NPT_HttpClient::NPT_HttpClient(Connector* connector) :
+ m_ProxySelector(NPT_HttpProxySelector::GetSystemDefault()),
+ m_ProxySelectorIsOwned(false),
+ m_Connector(connector)
+{
+ m_Config.m_FollowRedirect = true;
+ m_Config.m_ConnectionTimeout = NPT_HTTP_CLIENT_DEFAULT_CONNECTION_TIMEOUT;
+ m_Config.m_IoTimeout = NPT_HTTP_CLIENT_DEFAULT_CONNECTION_TIMEOUT;
+ m_Config.m_NameResolverTimeout = NPT_HTTP_CLIENT_DEFAULT_NAME_RESOLVER_TIMEOUT;
+
+ if (connector == NULL) m_Connector = new NPT_HttpTcpConnector();
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::~NPT_HttpClient
++---------------------------------------------------------------------*/
+NPT_HttpClient::~NPT_HttpClient()
+{
+ if (m_ProxySelectorIsOwned) {
+ delete m_ProxySelector;
+ }
+ delete m_Connector;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SetConfig
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SetConfig(const Config& config)
+{
+ m_Config = config;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SetProxy
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SetProxy(const char* hostname, NPT_UInt16 port)
+{
+ if (m_ProxySelectorIsOwned) {
+ delete m_ProxySelector;
+ m_ProxySelector = NULL;
+ m_ProxySelectorIsOwned = false;
+ }
+
+ // only set a proxy selector is hostname is not null, disable the
+ // proxy otherwise
+ if (hostname != NULL && port != NPT_HTTP_INVALID_PORT) {
+ m_ProxySelector = new NPT_HttpStaticProxySelector(hostname, port);
+ m_ProxySelectorIsOwned = true;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SetProxy
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SetProxySelector(NPT_HttpProxySelector* selector)
+{
+ if (m_ProxySelectorIsOwned) {
+ delete m_ProxySelector;
+ }
+ m_ProxySelector = selector;
+ m_ProxySelectorIsOwned = false;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SetConnector
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SetConnector(Connector* connector)
+{
+ Connector* old_connector = m_Connector;
+ m_Connector = connector;
+ if (old_connector != connector) {
+ delete old_connector;
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SetTimeouts
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SetTimeouts(NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout,
+ NPT_Timeout name_resolver_timeout)
+{
+ m_Config.m_ConnectionTimeout = connection_timeout;
+ m_Config.m_IoTimeout = io_timeout;
+ m_Config.m_NameResolverTimeout = name_resolver_timeout;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SendRequestOnce
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SendRequestOnce(NPT_HttpRequest& request,
+ NPT_HttpResponse*& response)
+{
+ // setup default values
+ response = NULL;
+
+ NPT_LOG_FINE_1("requesting URL %s", request.GetUrl().ToString().GetChars());
+
+ // get the address and port to which we need to connect
+ NPT_HttpProxyAddress proxy;
+ bool use_proxy = false;
+ if (m_ProxySelector) {
+ // we have a proxy selector, ask it to select a proxy for this URL
+ NPT_Result result = m_ProxySelector->GetProxyForUrl(request.GetUrl(), proxy);
+ if (NPT_FAILED(result) && result != NPT_ERROR_HTTP_NO_PROXY) {
+ NPT_LOG_WARNING_1("proxy selector failure (%d)", result);
+ return result;
+ }
+ use_proxy = true;
+ }
+
+ // decide which host we need to connect to
+ const char* server_hostname;
+ NPT_UInt16 server_port;
+ if (use_proxy) {
+ // the proxy is set
+ server_hostname = (const char*)proxy.GetHostName();
+ server_port = proxy.GetPort();
+ } else {
+ // no proxy selector, so no proxy: connect directly
+ server_hostname = (const char*)request.GetUrl().GetHost();
+ server_port = request.GetUrl().GetPort();
+ }
+
+ // connect to the server or proxy
+ NPT_InputStreamReference input_stream;
+ NPT_OutputStreamReference output_stream;
+ NPT_LOG_FINER_2("connecting to %s:%d", server_hostname, server_port);
+ NPT_CHECK_WARNING(m_Connector->Connect(server_hostname,
+ server_port,
+ m_Config.m_ConnectionTimeout,
+ m_Config.m_IoTimeout,
+ m_Config.m_NameResolverTimeout,
+ input_stream,
+ output_stream));
+
+ NPT_CHECK_WARNING(WriteRequest(*output_stream.AsPointer(), request, use_proxy));
+
+ return ReadResponse(input_stream,
+ request.GetMethod() == NPT_HTTP_METHOD_GET ||
+ request.GetMethod() == NPT_HTTP_METHOD_POST,
+ response);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::WriteRequest
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::WriteRequest(NPT_OutputStream& output_stream,
+ NPT_HttpRequest& request,
+ bool use_proxy /* = false */)
+{
+ // add any headers that may be missing
+ NPT_HttpHeaders& headers = request.GetHeaders();
+ if (request.GetProtocol() == NPT_HTTP_PROTOCOL_1_0) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONNECTION,
+ "close", false); // set but don't replace
+ }
+ headers.SetHeader(NPT_HTTP_HEADER_USER_AGENT,
+ m_UserAgentHeader, false); // set but don't replace
+ NPT_String host = request.GetUrl().GetHost();
+ if (request.GetUrl().GetPort() != NPT_HTTP_DEFAULT_PORT) {
+ host += ":";
+ host += NPT_String::FromInteger(request.GetUrl().GetPort());
+ }
+ headers.SetHeader(NPT_HTTP_HEADER_HOST, host, false); // set but don't replace
+
+ // get the request entity to set additional headers
+ NPT_InputStreamReference body_stream;
+ NPT_HttpEntity* entity = request.GetEntity();
+ if (entity && NPT_SUCCEEDED(entity->GetInputStream(body_stream))) {
+ if (!body_stream.IsNull()) {
+ // set the content length, unless it is unknown (chunked encoding)
+ if (entity->GetContentLength() != 0 ||
+ (entity->GetTransferEncoding() != NPT_HTTP_TRANSFER_ENCODING_CHUNKED &&
+ entity->HasContentLength())) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_LENGTH,
+ NPT_String::FromInteger(entity->GetContentLength()));
+ }
+ }
+
+ // content type
+ NPT_String content_type = entity->GetContentType();
+ if (!content_type.IsEmpty()) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_TYPE, content_type);
+ }
+
+ // content encoding
+ NPT_String content_encoding = entity->GetContentEncoding();
+ if (!content_encoding.IsEmpty()) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_ENCODING, content_encoding);
+ }
+ }
+
+ // create a memory stream to buffer the headers
+ NPT_MemoryStream header_stream;
+
+ // emit the request headers into the header buffer
+ request.Emit(header_stream, use_proxy);
+
+ // send the headers
+ NPT_CHECK_WARNING(output_stream.WriteFully(header_stream.GetData(), header_stream.GetDataSize()));
+
+ // send request body (content length = 0 means copy until body returns EOS)
+ if (!body_stream.IsNull()) {
+ NPT_CHECK_FATAL(NPT_StreamToStreamCopy(*body_stream.AsPointer(), output_stream, 0, entity->GetContentLength()));
+ }
+
+ // flush the output stream so that everything is sent to the server
+ output_stream.Flush();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SendRequestOnce
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::ReadResponse(NPT_InputStreamReference& input_stream,
+ bool expect_entity,
+ NPT_HttpResponse*& response)
+{
+ bool reuse_response = false;
+
+ // setup default values
+ response = NULL;
+
+ // create a buffered stream for this socket stream
+ NPT_BufferedInputStreamReference buffered_input_stream(new NPT_BufferedInputStream(input_stream));
+
+continue_100:
+ // parse the response
+ NPT_CHECK_WARNING(NPT_HttpResponse::Parse(*buffered_input_stream, response, reuse_response));
+ NPT_LOG_FINER_2("got response, code=%d, msg=%s",
+ response->GetStatusCode(),
+ response->GetReasonPhrase().GetChars());
+
+ // any 1xx response means continue
+ if (response && response->GetStatusCode()/100 == 1) {
+ NPT_LOG_FINE("NPT_HttpClient::SendRequest - received 100 continue\n");
+ reuse_response = true;
+ goto continue_100;
+ }
+
+ // unbuffer the stream
+ buffered_input_stream->SetBufferSize(0);
+
+ // create an entity if one is expected in the response
+ if (expect_entity) {
+ NPT_HttpEntity* response_entity = new NPT_HttpEntity(response->GetHeaders());
+
+ // check for chunked Transfer-Encoding
+ if (response_entity->GetTransferEncoding() == NPT_HTTP_TRANSFER_ENCODING_CHUNKED) {
+ response_entity->SetInputStream(NPT_InputStreamReference(new NPT_HttpChunkedInputStream(buffered_input_stream)));
+ response_entity->SetTransferEncoding(NULL);
+ } else {
+ response_entity->SetInputStream((NPT_InputStreamReference)buffered_input_stream);
+ }
+ response->SetEntity(response_entity);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient::SendRequest
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpClient::SendRequest(NPT_HttpRequest& request,
+ NPT_HttpResponse*& response)
+{
+ NPT_Cardinal watchdog = NPT_HTTP_MAX_REDIRECTS;
+ bool keep_going;
+ NPT_Result result;
+
+ // default value
+ response = NULL;
+
+ // check that for GET requests there is no entity
+ if (request.GetEntity() != NULL &&
+ request.GetMethod() == NPT_HTTP_METHOD_GET) {
+ return NPT_ERROR_HTTP_INVALID_REQUEST;
+ }
+
+ do {
+ keep_going = false;
+ result = SendRequestOnce(request, response);
+ if (NPT_FAILED(result)) break;
+ if (response && m_Config.m_FollowRedirect &&
+ (request.GetMethod() == NPT_HTTP_METHOD_GET ||
+ request.GetMethod() == NPT_HTTP_METHOD_HEAD) &&
+ (response->GetStatusCode() == 301 ||
+ response->GetStatusCode() == 302 ||
+ response->GetStatusCode() == 303 ||
+ response->GetStatusCode() == 307)) {
+ // handle redirect
+ NPT_HttpHeader* location = response->GetHeaders().GetHeader(NPT_HTTP_HEADER_LOCATION);
+ if (location) {
+ // replace the request url
+ if (NPT_SUCCEEDED(request.SetUrl(location->GetValue()))) {
+ NPT_LOG_FINE_1("redirecting to %s", location->GetValue().GetChars());
+ keep_going = true;
+ delete response;
+ response = NULL;
+ }
+ }
+ }
+ } while (keep_going && watchdog--);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequestContext::NPT_HttpRequestContext
++---------------------------------------------------------------------*/
+NPT_HttpRequestContext::NPT_HttpRequestContext(const NPT_SocketAddress* local_address,
+ const NPT_SocketAddress* remote_address)
+{
+ if (local_address) m_LocalAddress = *local_address;
+ if (remote_address) m_RemoteAddress = *remote_address;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::NPT_HttpServer
++---------------------------------------------------------------------*/
+NPT_HttpServer::NPT_HttpServer(NPT_UInt16 listen_port,
+ bool reuse_address /* = true */) :
+ m_BoundPort(0)
+{
+ m_Config.m_ListenAddress = NPT_IpAddress::Any;
+ m_Config.m_ListenPort = listen_port;
+ m_Config.m_IoTimeout = NPT_HTTP_SERVER_DEFAULT_IO_TIMEOUT;
+ m_Config.m_ConnectionTimeout = NPT_HTTP_SERVER_DEFAULT_CONNECTION_TIMEOUT;
+ m_Config.m_ReuseAddress = reuse_address;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::NPT_HttpServer
++---------------------------------------------------------------------*/
+NPT_HttpServer::NPT_HttpServer(NPT_IpAddress listen_address,
+ NPT_UInt16 listen_port,
+ bool reuse_address /* = true */) :
+ m_BoundPort(0)
+{
+ m_Config.m_ListenAddress = listen_address;
+ m_Config.m_ListenPort = listen_port;
+ m_Config.m_IoTimeout = NPT_HTTP_SERVER_DEFAULT_IO_TIMEOUT;
+ m_Config.m_ConnectionTimeout = NPT_HTTP_SERVER_DEFAULT_CONNECTION_TIMEOUT;
+ m_Config.m_ReuseAddress = reuse_address;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::~NPT_HttpServer
++---------------------------------------------------------------------*/
+NPT_HttpServer::~NPT_HttpServer()
+{
+ m_RequestHandlers.Apply(NPT_ObjectDeleter<HandlerConfig>());
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::Bind
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::Bind()
+{
+ // check if we're already bound
+ if (m_BoundPort != 0) return NPT_SUCCESS;
+
+ // bind
+ NPT_Result result = m_Socket.Bind(
+ NPT_SocketAddress(m_Config.m_ListenAddress, m_Config.m_ListenPort),
+ m_Config.m_ReuseAddress);
+ if (NPT_FAILED(result)) return result;
+
+ // remember that we're bound
+ NPT_SocketInfo info;
+ m_Socket.GetInfo(info);
+ m_BoundPort = info.local_address.GetPort();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::SetConfig
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::SetConfig(const Config& config)
+{
+ m_Config = config;
+
+ // check that we can bind to this listen port
+ return Bind();
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::SetListenPort
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::SetListenPort(NPT_UInt16 port, bool reuse_address)
+{
+ m_Config.m_ListenPort = port;
+ m_Config.m_ReuseAddress = reuse_address;
+ return Bind();
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::SetTimeouts
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::SetTimeouts(NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout)
+{
+ m_Config.m_ConnectionTimeout = connection_timeout;
+ m_Config.m_IoTimeout = io_timeout;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::Abort
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::Abort()
+{
+ m_Socket.Disconnect();
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::WaitForNewClient
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::WaitForNewClient(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output,
+ NPT_HttpRequestContext* context)
+{
+ // ensure that we're bound
+ NPT_CHECK(Bind());
+
+ // wait for a connection
+ NPT_Socket* client;
+ NPT_LOG_FINE_2("waiting for new connection on %s:%d...",
+ (const char*)m_Config.m_ListenAddress.ToString(),
+ m_BoundPort);
+ NPT_CHECK_WARNING(m_Socket.WaitForNewClient(client, m_Config.m_ConnectionTimeout));
+ if (client == NULL) return NPT_ERROR_INTERNAL;
+
+ // get the client info
+ if (context) {
+ NPT_SocketInfo client_info;
+ client->GetInfo(client_info);
+
+ context->SetLocalAddress(client_info.local_address);
+ context->SetRemoteAddress(client_info.remote_address);
+
+ NPT_LOG_FINE_2("client connected (%s <- %s)",
+ client_info.local_address.ToString().GetChars(),
+ client_info.remote_address.ToString().GetChars());
+ }
+
+ // configure the socket
+ client->SetReadTimeout(m_Config.m_IoTimeout);
+ client->SetWriteTimeout(m_Config.m_IoTimeout);
+
+ // get the streams
+ client->GetInputStream(input);
+ client->GetOutputStream(output);
+
+ // we don't need the socket anymore
+ delete client;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::Loop
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::Loop()
+{
+ NPT_InputStreamReference input;
+ NPT_OutputStreamReference output;
+ NPT_HttpRequestContext context;
+ NPT_Result result;
+
+ do {
+ // wait for a client to connect
+ result = WaitForNewClient(input, output, &context);
+ NPT_LOG_FINE_2("WaitForNewClient returned %d (%s)",
+ result,
+ NPT_ResultText(result));
+ if (NPT_FAILED(result)) break;
+
+ // send a response
+ result = RespondToClient(input, output, context);
+ NPT_LOG_FINE_2("ResponToClient returned %d",
+ result,
+ NPT_ResultText(result));
+
+ // release the stream references so that the socket can be closed
+ input = NULL;
+ output = NULL;
+ } while (NPT_SUCCEEDED(result));
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::HandlerConfig::HandlerConfig
++---------------------------------------------------------------------*/
+NPT_HttpServer::HandlerConfig::HandlerConfig(NPT_HttpRequestHandler* handler,
+ const char* path,
+ bool include_children) :
+ m_Handler(handler),
+ m_Path(path),
+ m_IncludeChildren(include_children)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::HandlerConfig::~HandlerConfig
++---------------------------------------------------------------------*/
+NPT_HttpServer::HandlerConfig::~HandlerConfig()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::AddRequestHandler
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::AddRequestHandler(NPT_HttpRequestHandler* handler,
+ const char* path,
+ bool include_children)
+{
+ return m_RequestHandlers.Add(new HandlerConfig(handler, path, include_children));
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::FindRequestHandler
++---------------------------------------------------------------------*/
+NPT_HttpRequestHandler*
+NPT_HttpServer::FindRequestHandler(NPT_HttpRequest& request)
+{
+ for (NPT_List<HandlerConfig*>::Iterator it = m_RequestHandlers.GetFirstItem();
+ it;
+ ++it) {
+ HandlerConfig* config = *it;
+ if (config->m_IncludeChildren) {
+ if (request.GetUrl().GetPath().StartsWith(config->m_Path)) {
+ return config->m_Handler;
+ }
+ } else {
+ if (request.GetUrl().GetPath() == config->m_Path) {
+ return config->m_Handler;
+ }
+ }
+ }
+
+ // not found
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer::RespondToClient
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpServer::RespondToClient(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output,
+ const NPT_HttpRequestContext& context)
+{
+ NPT_HttpRequest* request;
+ NPT_HttpResponse* response = NULL;
+ NPT_Result result = NPT_ERROR_NO_SUCH_ITEM;
+
+ NPT_HttpResponder responder(input, output);
+ NPT_CHECK_WARNING(responder.ParseRequest(request, &context.GetLocalAddress()));
+ NPT_LOG_FINE_1("request, path=%s", request->GetUrl().ToRequestString(true).GetChars());
+
+ // prepare the response body
+ NPT_HttpEntity* body = new NPT_HttpEntity();
+
+ NPT_HttpRequestHandler* handler = FindRequestHandler(*request);
+ if (handler) {
+ // create a response object
+ response = new NPT_HttpResponse(200, "OK", NPT_HTTP_PROTOCOL_1_0);
+ response->SetEntity(body);
+
+ // ask the handler to setup the response
+ result = handler->SetupResponse(*request, context, *response);
+ }
+ if (result == NPT_ERROR_NO_SUCH_ITEM || handler == NULL) {
+ body->SetInputStream(NPT_HTTP_DEFAULT_404_HTML);
+ body->SetContentType("text/html");
+ if (response == NULL) {
+ response = new NPT_HttpResponse(404, "Not Found", NPT_HTTP_PROTOCOL_1_0);
+ } else {
+ response->SetStatus(404, "Not Found");
+ }
+ response->SetEntity(body);
+ handler = NULL;
+ } else if (result == NPT_ERROR_PERMISSION_DENIED) {
+ body->SetInputStream(NPT_HTTP_DEFAULT_403_HTML);
+ body->SetContentType("text/html");
+ response->SetStatus(403, "Forbidden");
+ handler = NULL;
+ } else if (NPT_FAILED(result)) {
+ body->SetInputStream(NPT_HTTP_DEFAULT_500_HTML);
+ body->SetContentType("text/html");
+ response->SetStatus(500, "Internal Error");
+ handler = NULL;
+ }
+
+ // send the response headers
+ result = responder.SendResponseHeaders(*response);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_WARNING_2("SendResponseHeaders failed (%d:%s)", result, NPT_ResultText(result));
+ goto end;
+ }
+
+ // send the body
+ if (request->GetMethod() != NPT_HTTP_METHOD_HEAD) {
+ if (handler) {
+ result = handler->SendResponseBody(context, *response, *output);
+ } else {
+ NPT_InputStreamReference body_stream;
+ body->GetInputStream(body_stream);
+ if (!body_stream.IsNull()) {
+ result = NPT_StreamToStreamCopy(*body_stream, *output, 0, body->GetContentLength());
+ if (NPT_FAILED(result)) {
+ NPT_LOG_INFO_2("NPT_StreamToStreamCopy returned %d (%s)", result, NPT_ResultText(result));
+ goto end;
+ }
+ }
+ }
+ }
+
+ // flush
+ output->Flush();
+
+end:
+ // cleanup
+ delete response;
+ delete request;
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::NPT_HttpResponder
++---------------------------------------------------------------------*/
+NPT_HttpResponder::NPT_HttpResponder(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output) :
+ m_Input(new NPT_BufferedInputStream(input)),
+ m_Output(output)
+{
+ m_Config.m_IoTimeout = NPT_HTTP_SERVER_DEFAULT_IO_TIMEOUT;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::~NPT_HttpResponder
++---------------------------------------------------------------------*/
+NPT_HttpResponder::~NPT_HttpResponder()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::SetConfig
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponder::SetConfig(const Config& config)
+{
+ m_Config = config;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::SetTimeout
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponder::SetTimeout(NPT_Timeout io_timeout)
+{
+ m_Config.m_IoTimeout = io_timeout;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::ParseRequest
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponder::ParseRequest(NPT_HttpRequest*& request,
+ const NPT_SocketAddress* local_address)
+{
+ // parse the request
+ NPT_CHECK_WARNING(NPT_HttpRequest::Parse(*m_Input, local_address, request));
+
+ // unbuffer the stream
+ m_Input->SetBufferSize(0);
+
+ // don't create an entity if no body is expected
+ if (request->GetMethod() == NPT_HTTP_METHOD_GET ||
+ request->GetMethod() == NPT_HTTP_METHOD_HEAD) {
+ return NPT_SUCCESS;
+ }
+
+ // set the entity info
+ NPT_HttpEntity* entity = new NPT_HttpEntity(request->GetHeaders());
+ entity->SetInputStream(m_Input);
+ request->SetEntity(entity);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder::SendResponseHeaders
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpResponder::SendResponseHeaders(NPT_HttpResponse& response)
+{
+ // add default headers
+ NPT_HttpHeaders& headers = response.GetHeaders();
+ headers.SetHeader(NPT_HTTP_HEADER_SERVER,
+ NPT_HttpServer::m_ServerHeader, false);
+ if (response.GetProtocol() == NPT_HTTP_PROTOCOL_1_0) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONNECTION,
+ "close", false); // set but don't replace
+ }
+
+ // add computed headers
+ NPT_HttpEntity* entity = response.GetEntity();
+ if (entity) {
+ // check if an entity stream has been set
+ NPT_InputStreamReference input_stream;
+ entity->GetInputStream(input_stream);
+ if (!input_stream.IsNull()) {
+ // set the content length, unless it is unknown (chunked encoding)
+ if (entity->GetContentLength() != 0 ||
+ (entity->GetTransferEncoding() != NPT_HTTP_TRANSFER_ENCODING_CHUNKED &&
+ entity->HasContentLength())) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_LENGTH,
+ NPT_String::FromInteger(entity->GetContentLength()));
+ }
+ }
+
+ // content type
+ const NPT_String& content_type = entity->GetContentType();
+ if (!content_type.IsEmpty()) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_TYPE, content_type);
+ }
+
+ // content encoding
+ const NPT_String& content_encoding = entity->GetContentEncoding();
+ if (!content_encoding.IsEmpty()) {
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_ENCODING, content_encoding);
+ }
+
+ // transfer encoding
+ const NPT_String& transfer_encoding = entity->GetTransferEncoding();
+ if (!transfer_encoding.IsEmpty()) {
+ headers.SetHeader(NPT_HTTP_HEADER_TRANSFER_ENCODING, transfer_encoding);
+ }
+ } else {
+ // force content length to 0 if there is no message body
+ // (necessary for 1.1 or 1.0 with keep-alive connections)
+ headers.SetHeader(NPT_HTTP_HEADER_CONTENT_LENGTH, "0");
+ }
+
+ // create a memory stream to buffer the response line and headers
+ NPT_MemoryStream buffer;
+
+ // emit the response line
+ NPT_CHECK_WARNING(response.Emit(buffer));
+
+ // send the buffer
+ NPT_CHECK_WARNING(m_Output->WriteFully(buffer.GetData(), buffer.GetDataSize()));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequestHandler::SendResponseBody
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpRequestHandler::SendResponseBody(const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response,
+ NPT_OutputStream& output)
+{
+ NPT_HttpEntity* entity = response.GetEntity();
+ if (entity == NULL) return NPT_SUCCESS;
+
+ NPT_InputStreamReference body_stream;
+ entity->GetInputStream(body_stream);
+ if (body_stream.IsNull()) return NPT_SUCCESS;
+
+ // check for chunked transfer encoding
+ NPT_OutputStream* dest = &output;
+ if (entity->GetTransferEncoding() == NPT_HTTP_TRANSFER_ENCODING_CHUNKED) {
+ dest = new NPT_HttpChunkedOutputStream(output);
+ }
+
+ // send the body
+ NPT_LOG_FINE_1("sending body stream, %lld bytes", entity->GetContentLength());
+ NPT_LargeSize bytes_written = 0;
+ NPT_Result result = NPT_StreamToStreamCopy(*body_stream, *dest, 0, entity->GetContentLength(), &bytes_written);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_FINE_3("body stream only partially sent, %lld bytes (%d:%s)",
+ bytes_written,
+ result,
+ NPT_ResultText(result));
+ }
+
+ // flush
+ dest->Flush();
+
+ // cleanup
+ if (dest != &output) delete dest;
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticRequestHandler::NPT_HttpStaticRequestHandler
++---------------------------------------------------------------------*/
+NPT_HttpStaticRequestHandler::NPT_HttpStaticRequestHandler(const void* data,
+ NPT_Size size,
+ const char* mime_type,
+ bool copy) :
+ m_MimeType(mime_type),
+ m_Buffer(data, size, copy)
+{}
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticRequestHandler::NPT_HttpStaticRequestHandler
++---------------------------------------------------------------------*/
+NPT_HttpStaticRequestHandler::NPT_HttpStaticRequestHandler(const char* document,
+ const char* mime_type,
+ bool copy) :
+ m_MimeType(mime_type),
+ m_Buffer(document, NPT_StringLength(document), copy)
+{}
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticRequestHandler::SetupResponse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpStaticRequestHandler::SetupResponse(NPT_HttpRequest& /*request*/,
+ const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response)
+{
+ NPT_HttpEntity* entity = response.GetEntity();
+ if (entity == NULL) return NPT_ERROR_INVALID_STATE;
+
+ entity->SetContentType(m_MimeType);
+ entity->SetInputStream(m_Buffer.GetData(), m_Buffer.GetDataSize());
+
+ return NPT_SUCCESS;
+}
+
+const NPT_HttpFileRequestHandler_FileTypeMapEntry
+NPT_HttpFileRequestHandler_DefaultFileTypeMap[43] = {
+ {"xml", "text/xml; charset=\"utf-8\"" },
+ {"htm", "text/html" },
+ {"html", "text/html" },
+ {"c", "text/plain"},
+ {"css", "text/css" },
+ {"h", "text/plain"},
+ {"txt", "text/plain"},
+ {"gif", "image/gif" },
+ {"thm", "image/jpeg"},
+ {"jpg", "image/jpeg"},
+ {"jpeg", "image/jpeg"},
+ {"jpe", "image/jpeg"},
+ {"jp2", "image/jp2" },
+ {"png", "image/png" },
+ {"bmp", "image/bmp" },
+ {"png", "image/png"},
+ {"tif", "image/tiff"},
+ {"tiff", "image/tiff"},
+ {"mpa", "audio/mpeg"},
+ {"mp2", "audio/mpeg"},
+ {"mp3", "audio/mpeg"},
+ {"m4a", "audio/mp4"},
+ {"wma", "audio/x-ms-wma"},
+ {"aif", "audio/x-aiff"},
+ {"aifc", "audio/x-aiff"},
+ {"aiff", "audio/x-aiff"},
+ {"wav", "audio/x-wav"},
+ {"mpg", "video/mpeg"},
+ {"mpeg", "video/mpeg"},
+ {"mp4", "video/mp4"},
+ {"m4v", "video/mp4"},
+ {"mov", "video/quicktime"},
+ {"wmv", "video/x-ms-wmv"},
+ {"asf", "video/x-ms-asf"},
+ {"avi", "video/x-msvideo"},
+ {"divx", "video/x-msvideo"},
+ {"xvid", "video/x-msvideo"},
+ {"doc", "application/msword"},
+ {"eps", "application/postscript"},
+ {"js", "application/javascript"},
+ {"pdf", "application/pdf"},
+ {"ps", "application/postscript"},
+ {"zip", "application/zip"}
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpFileRequestHandler::NPT_HttpFileRequestHandler
++---------------------------------------------------------------------*/
+NPT_HttpFileRequestHandler::NPT_HttpFileRequestHandler(const char* url_root,
+ const char* file_root,
+ bool auto_dir) :
+ m_UrlRoot(url_root),
+ m_FileRoot(file_root),
+ m_DefaultMimeType("text/html"),
+ m_UseDefaultFileTypeMap(true),
+ m_AutoDir(auto_dir)
+{
+}
+
+/*----------------------------------------------------------------------
+| helper functions FIXME: need to move these to a separate module
++---------------------------------------------------------------------*/
+static NPT_UInt32
+_utf8_decode(const char** str)
+{
+ NPT_UInt32 result;
+ NPT_UInt32 min_value;
+ unsigned int bytes_left;
+
+ if (**str == 0) {
+ return ~0;
+ } else if ((**str & 0x80) == 0x00) {
+ result = *(*str)++;
+ bytes_left = 0;
+ min_value = 0;
+ } else if ((**str & 0xE0) == 0xC0) {
+ result = *(*str)++ & 0x1F;
+ bytes_left = 1;
+ min_value = 0x80;
+ } else if ((**str & 0xF0) == 0xE0) {
+ result = *(*str)++ & 0x0F;
+ bytes_left = 2;
+ min_value = 0x800;
+ } else if ((**str & 0xF8) == 0xF0) {
+ result = *(*str)++ & 0x07;
+ bytes_left = 3;
+ min_value = 0x10000;
+ } else {
+ return ~0;
+ }
+
+ while (bytes_left--) {
+ if (**str == 0 || (**str & 0xC0) != 0x80) return ~0;
+ result = (result << 6) | (*(*str)++ & 0x3F);
+ }
+
+ if (result < min_value || (result & 0xFFFFF800) == 0xD800 || result > 0x10FFFF) {
+ return ~0;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HtmlEncode
++---------------------------------------------------------------------*/
+static NPT_String
+NPT_HtmlEncode(const char* str, const char* chars)
+{
+ NPT_String encoded;
+
+ // check args
+ if (str == NULL) return encoded;
+
+ // reserve at least the size of the current uri
+ encoded.Reserve(NPT_StringLength(str));
+
+ // process each character
+ while (*str) {
+ NPT_UInt32 c = _utf8_decode(&str);
+ bool encode = false;
+ if (c < ' ' || c > '~') {
+ encode = true;
+ } else {
+ const char* match = chars;
+ while (*match) {
+ if (c == (NPT_UInt32)*match) {
+ encode = true;
+ break;
+ }
+ ++match;
+ }
+ }
+ if (encode) {
+ // encode
+ char hex[9];
+ encoded += "&#x";
+ unsigned int len = 0;
+ if (c > 0xFFFF) {
+ NPT_ByteToHex((unsigned char)(c>>24), &hex[0], true);
+ NPT_ByteToHex((unsigned char)(c>>16), &hex[2], true);
+ len = 4;
+ }
+ NPT_ByteToHex((unsigned char)(c>>8), &hex[len ], true);
+ NPT_ByteToHex((unsigned char)(c ), &hex[len+2], true);
+ hex[len+4] = ';';
+ encoded.Append(hex, len+5);
+ } else {
+ // no encoding required
+ encoded += (char)c;
+ }
+ }
+
+ return encoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpFileRequestHandler::SetupResponse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpFileRequestHandler::SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& /* context */,
+ NPT_HttpResponse& response)
+{
+ NPT_HttpEntity* entity = response.GetEntity();
+ if (entity == NULL) return NPT_ERROR_INVALID_STATE;
+
+ // check the method
+ if (request.GetMethod() != NPT_HTTP_METHOD_GET &&
+ request.GetMethod() != NPT_HTTP_METHOD_HEAD) {
+ response.SetStatus(405, "Method Not Allowed");
+ return NPT_SUCCESS;
+ }
+
+ // set some default headers
+ response.GetHeaders().SetHeader(NPT_HTTP_HEADER_ACCEPT_RANGES, "bytes");
+
+ // declare HTTP/1.1 if the client asked for it
+ if (request.GetProtocol() == NPT_HTTP_PROTOCOL_1_1) {
+ response.SetProtocol(NPT_HTTP_PROTOCOL_1_1);
+ }
+
+ // TODO: we need to normalize the request path
+
+ // check that the request's path is an entry under the url root
+ if (!request.GetUrl().GetPath().StartsWith(m_UrlRoot)) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // compute the filename
+ NPT_String filename = m_FileRoot;
+ NPT_String relative_path = NPT_Url::PercentDecode(request.GetUrl().GetPath().GetChars()+m_UrlRoot.GetLength());
+ filename += "/";
+ filename += relative_path;
+
+ // get info about the file
+ NPT_FileInfo info;
+ NPT_File::GetInfo(filename, &info);
+
+ // check if this is a directory
+ if (info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY) {
+ if (m_AutoDir) {
+ // get the dir entries
+ NPT_List<NPT_String> entries;
+ NPT_File::ListDir(filename, entries);
+
+ NPT_String html;
+ html.Reserve(1024+128*entries.GetItemCount());
+
+ NPT_String html_dirname = NPT_HtmlEncode(relative_path, "<>&");
+ html += "<hmtl><head><title>Directory Listing for /";
+ html += html_dirname;
+ html += "</title></head><body>";
+ html += "<h2>Directory Listing for /";
+ html += html_dirname;
+ html += "</h2><hr><ul>\r\n";
+ NPT_String url_base_path = NPT_HtmlEncode(request.GetUrl().GetPath(), "<>&\"");
+
+ for (NPT_List<NPT_String>::Iterator i = entries.GetFirstItem();
+ i;
+ ++i) {
+ NPT_String url_filename = NPT_HtmlEncode(*i, "<>&");
+ html += "<li><a href=\"";
+ html += url_base_path;
+ if (!url_base_path.EndsWith("/")) html += "/";
+ html += url_filename;
+ html += "\">";
+ html +=url_filename;
+
+ NPT_String full_path = filename;
+ full_path += "/";
+ full_path += *i;
+ NPT_File::GetInfo(full_path, &info);
+ if (info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY) html += "/";
+
+ html += "</a><br>\r\n";
+ }
+ html += "</ul></body></html>";
+
+ entity->SetContentType("text/html");
+ entity->SetInputStream(html);
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_PERMISSION_DENIED;
+ }
+ }
+
+ // open the file
+ NPT_File file(filename);
+ NPT_Result result = file.Open(NPT_FILE_OPEN_MODE_READ);
+ if (NPT_FAILED(result)) {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+ NPT_InputStreamReference stream;
+ file.GetInputStream(stream);
+
+ // check for range requests
+ const NPT_String* range_spec = request.GetHeaders().GetHeaderValue(NPT_HTTP_HEADER_RANGE);
+ if (range_spec) {
+ // measure the file size
+ NPT_LargeSize file_size = 0;
+ result = file.GetSize(file_size);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_WARNING_2("file.GetSize() failed (%d:%s)", result, NPT_ResultText(result));
+ return result;
+ }
+ NPT_LOG_FINE_1("file size=%lld", file_size);
+ if (file_size == 0) return NPT_SUCCESS;
+
+ if (!range_spec->StartsWith("bytes=")) {
+ NPT_LOG_FINE("unknown range spec");
+ response.SetStatus(400, "Bad Request");
+ return NPT_SUCCESS;
+ }
+ NPT_String range(range_spec->GetChars()+6);
+ if (range.Find(',') >= 0) {
+ NPT_LOG_FINE("multi-range requests not supported");
+ response.SetStatus(416, "Requested Range Not Satisfiable");
+ return NPT_SUCCESS;
+ }
+ int sep = range.Find('-');
+ NPT_UInt64 range_start = 0;
+ NPT_UInt64 range_end = 0;
+ bool has_start = false;
+ bool has_end = false;
+ bool satisfied = false;
+ if (sep < 0) {
+ NPT_LOG_FINE("invalid syntax");
+ response.SetStatus(400, "Bad Request");
+ return NPT_SUCCESS;
+ } else {
+ if ((unsigned int)sep+1 < range.GetLength()) {
+ result = NPT_ParseInteger64(range.GetChars()+sep+1, range_end);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_FINE("failed to parse range end");
+ return result;
+ }
+ range.SetLength(sep);
+ has_end = true;
+ }
+ if (sep > 0) {
+ result = range.ToInteger64(range_start);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_FINE("failed to parse range start");
+ return result;
+ }
+ has_start = true;
+ }
+ if (has_start) {
+ if (!has_end) range_end = file_size-1;
+ } else {
+ if (has_end) {
+ if (range_end <= file_size) {
+ range_start = file_size-range_end;
+ range_end = file_size-1;
+ }
+ }
+ }
+ NPT_LOG_FINE_2("final range: start=%lld, end=%lld", range_start, range_end);
+ if (range_start > range_end || range_end >= file_size) {
+ NPT_LOG_FINE("out of range");
+ satisfied = false;
+ } else {
+ satisfied = true;
+ }
+ }
+ if (satisfied && range_start != 0) {
+ // seek in the stream
+ result = stream->Seek(range_start);
+ if (NPT_FAILED(result)) {
+ NPT_LOG_WARNING_2("stream.Seek() failed (%d:%s)", result, NPT_ResultText(result));
+ satisfied = false;
+ }
+ }
+ if (!satisfied) {
+ response.SetStatus(416, "Requested Range Not Satisfiable");
+ NPT_String valid_range = "bytes */";
+ valid_range += NPT_String::FromInteger(file_size);
+ response.GetHeaders().SetHeader(NPT_HTTP_HEADER_CONTENT_RANGE, valid_range.GetChars());
+ return NPT_SUCCESS;
+ }
+
+ // use a portion of the file stream as a body
+ entity->SetInputStream(stream, false);
+ entity->SetContentLength(range_end-range_start+1);
+ response.SetStatus(206, "Partial Content");
+ NPT_String valid_range = "bytes ";
+ valid_range += NPT_String::FromInteger(range_start);
+ valid_range += "-";
+ valid_range += NPT_String::FromInteger(range_end);
+ valid_range += "/";
+ valid_range += NPT_String::FromInteger(file_size);
+ response.GetHeaders().SetHeader(NPT_HTTP_HEADER_CONTENT_RANGE, valid_range.GetChars());
+ } else {
+ // use the whole file stream as a body
+ entity->SetInputStream(stream, true);
+ }
+
+ // set the response body
+ entity->SetContentType(GetContentType(filename));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpFileRequestHandler::GetContentType
++---------------------------------------------------------------------*/
+const char*
+NPT_HttpFileRequestHandler::GetContentType(const NPT_String& filename)
+{
+ int last_dot = filename.ReverseFind('.');
+ if (last_dot > 0) {
+ NPT_String extension = filename.GetChars()+last_dot+1;
+ extension.MakeLowercase();
+
+ NPT_LOG_FINE_1("extension=%s", extension.GetChars());
+
+ NPT_String* mime_type;
+ if (NPT_SUCCEEDED(m_FileTypeMap.Get(extension, mime_type))) {
+ NPT_LOG_FINE_1("found mime type in map: %s", mime_type->GetChars());
+ return mime_type->GetChars();
+ }
+
+ // not found, look in the default map if necessary
+ if (m_UseDefaultFileTypeMap) {
+ for (unsigned int i=0; i<NPT_ARRAY_SIZE(NPT_HttpFileRequestHandler_DefaultFileTypeMap); i++) {
+ if (extension == NPT_HttpFileRequestHandler_DefaultFileTypeMap[i].extension) {
+ const char* type = NPT_HttpFileRequestHandler_DefaultFileTypeMap[i].mime_type;
+ NPT_LOG_FINE_1("using type from default list: %s", type);
+ return type;
+ }
+ }
+ }
+ }
+
+ NPT_LOG_FINE("using default mime type");
+ return m_DefaultMimeType;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::NPT_HttpChunkedInputStream
++---------------------------------------------------------------------*/
+NPT_HttpChunkedInputStream::NPT_HttpChunkedInputStream(
+ NPT_BufferedInputStreamReference& stream) :
+ m_Source(stream),
+ m_CurrentChunkSize(0),
+ m_Eos(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::~NPT_HttpChunkedInputStream
++---------------------------------------------------------------------*/
+NPT_HttpChunkedInputStream::~NPT_HttpChunkedInputStream()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::NPT_HttpChunkedInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read /* = NULL */)
+{
+ // set the initial state of return values
+ if (bytes_read) *bytes_read = 0;
+
+ // check for end of stream
+ if (m_Eos) return NPT_ERROR_EOS;
+
+ // shortcut
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // read next chunk size if needed
+ if (m_CurrentChunkSize == 0) {
+ // buffered mode
+ m_Source->SetBufferSize(4096);
+
+ NPT_String size_line;
+ NPT_CHECK(m_Source->ReadLine(size_line));
+
+ // decode size (in hex)
+ m_CurrentChunkSize = 0;
+ if (size_line.GetLength() < 1) {
+ NPT_LOG_WARNING("empty chunk size line");
+ return NPT_ERROR_INVALID_FORMAT;
+ }
+ const char* size_hex = size_line.GetChars();
+ while (*size_hex != '\0' &&
+ *size_hex != ' ' &&
+ *size_hex != ';' &&
+ *size_hex != '\r' &&
+ *size_hex != '\n') {
+ int nibble = NPT_HexToNibble(*size_hex);
+ if (nibble < 0) {
+ NPT_LOG_WARNING_1("invalid chunk size format (%s)", size_line.GetChars());
+ return NPT_ERROR_INVALID_FORMAT;
+ }
+ m_CurrentChunkSize = (m_CurrentChunkSize<<4)|nibble;
+ ++size_hex;
+ }
+ NPT_LOG_FINEST_1("start of chunk, size=%d", m_CurrentChunkSize);
+
+ // 0 = end of body
+ if (m_CurrentChunkSize == 0) {
+ NPT_LOG_FINEST("end of chunked stream, reading trailers");
+
+ // read footers until empty line
+ NPT_String footer;
+ do {
+ NPT_CHECK(m_Source->ReadLine(footer));
+ } while (!footer.IsEmpty());
+ m_Eos = true;
+
+ NPT_LOG_FINEST("end of chunked stream, done");
+ return NPT_ERROR_EOS;
+ }
+
+ // unbuffer source
+ m_Source->SetBufferSize(0);
+ }
+
+ // read no more than what's left in chunk
+ NPT_Size chunk_bytes_read;
+ if (bytes_to_read > m_CurrentChunkSize) bytes_to_read = m_CurrentChunkSize;
+ NPT_CHECK(m_Source->Read(buffer, bytes_to_read, &chunk_bytes_read));
+
+ // ready to go to next chunk?
+ m_CurrentChunkSize -= chunk_bytes_read;
+ if (m_CurrentChunkSize == 0) {
+ NPT_LOG_FINEST("reading end of chunk");
+
+ // when a chunk is finished, a \r\n follows
+ char newline[2];
+ NPT_CHECK(m_Source->ReadFully(newline, 2));
+ if (newline[0] != '\r' || newline[1] != '\n') {
+ NPT_LOG_WARNING("invalid end of chunk (expected \\r\\n)");
+ return NPT_ERROR_INVALID_FORMAT;
+ }
+ }
+
+ // update output params
+ if (bytes_read) *bytes_read = chunk_bytes_read;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedInputStream::Seek(NPT_Position /*offset*/)
+{
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedInputStream::Tell(NPT_Position& offset)
+{
+ offset = 0;
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedInputStream::GetSize(NPT_LargeSize& size)
+{
+ return m_Source->GetSize(size);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ return m_Source->GetAvailable(available);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedOutputStream::NPT_HttpChunkedOutputStream
++---------------------------------------------------------------------*/
+NPT_HttpChunkedOutputStream::NPT_HttpChunkedOutputStream(NPT_OutputStream& stream) :
+ m_Stream(stream)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedOutputStream::~NPT_HttpChunkedOutputStream
++---------------------------------------------------------------------*/
+NPT_HttpChunkedOutputStream::~NPT_HttpChunkedOutputStream()
+{
+ // zero size chunk followed by CRLF (no trailer)
+ m_Stream.WriteFully("0" NPT_HTTP_LINE_TERMINATOR NPT_HTTP_LINE_TERMINATOR, 5);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpChunkedOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ // default values
+ if (bytes_written) *bytes_written = 0;
+
+ // shortcut
+ if (bytes_to_write == 0) return NPT_SUCCESS;
+
+ // write the chunk header
+ char size[16];
+ size[15] = '\n';
+ size[14] = '\r';
+ char* c = &size[14];
+ unsigned int char_count = 2;
+ unsigned int value = bytes_to_write;
+ do {
+ unsigned int digit = (unsigned int)(value%16);
+ if (digit < 10) {
+ *--c = '0'+digit;
+ } else {
+ *--c = 'A'+digit-10;
+ }
+ char_count++;
+ value /= 16;
+ } while(value);
+ NPT_Result result = m_Stream.WriteFully(c, char_count);
+ if (NPT_FAILED(result)) return result;
+
+ // write the chunk data
+ result = m_Stream.WriteFully(buffer, bytes_to_write);
+ if (NPT_FAILED(result)) return result;
+
+ // finish the chunk
+ result = m_Stream.WriteFully(NPT_HTTP_LINE_TERMINATOR, 2);
+ if (NPT_SUCCEEDED(result) && bytes_written) {
+ *bytes_written = bytes_to_write;
+ }
+ return result;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptHttp.h b/lib/libUPnP/Neptune/Source/Core/NptHttp.h
new file mode 100644
index 0000000000..d7c7c91b1f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptHttp.h
@@ -0,0 +1,698 @@
+/*****************************************************************
+|
+| Neptune - HTTP Protocol
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_HTTP_H_
+#define _NPT_HTTP_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptUri.h"
+#include "NptTypes.h"
+#include "NptList.h"
+#include "NptBufferedStreams.h"
+#include "NptSockets.h"
+#include "NptMap.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_HTTP_DEFAULT_PORT = 80;
+const unsigned int NPT_HTTP_INVALID_PORT = 0;
+
+const NPT_Timeout NPT_HTTP_CLIENT_DEFAULT_CONNECTION_TIMEOUT = 30000;
+const NPT_Timeout NPT_HTTP_CLIENT_DEFAULT_IO_TIMEOUT = 30000;
+const NPT_Timeout NPT_HTTP_CLIENT_DEFAULT_NAME_RESOLVER_TIMEOUT = 60000;
+
+const NPT_Timeout NPT_HTTP_SERVER_DEFAULT_CONNECTION_TIMEOUT = NPT_TIMEOUT_INFINITE;
+const NPT_Timeout NPT_HTTP_SERVER_DEFAULT_IO_TIMEOUT = 60000;
+
+const int NPT_HTTP_PROTOCOL_MAX_LINE_LENGTH = 8192;
+const int NPT_HTTP_PROTOCOL_MAX_HEADER_COUNT = 100;
+
+#define NPT_HTTP_PROTOCOL_1_0 "HTTP/1.0"
+#define NPT_HTTP_PROTOCOL_1_1 "HTTP/1.1"
+#define NPT_HTTP_METHOD_GET "GET"
+#define NPT_HTTP_METHOD_HEAD "HEAD"
+#define NPT_HTTP_METHOD_POST "POST"
+
+#define NPT_HTTP_HEADER_HOST "Host"
+#define NPT_HTTP_HEADER_CONNECTION "Connection"
+#define NPT_HTTP_HEADER_USER_AGENT "User-Agent"
+#define NPT_HTTP_HEADER_SERVER "Server"
+#define NPT_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
+#define NPT_HTTP_HEADER_CONTENT_TYPE "Content-Type"
+#define NPT_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
+#define NPT_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
+#define NPT_HTTP_HEADER_LOCATION "Location"
+#define NPT_HTTP_HEADER_RANGE "Range"
+#define NPT_HTTP_HEADER_CONTENT_RANGE "Content-Range"
+#define NPT_HTTP_HEADER_COOKIE "Cookie"
+#define NPT_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges"
+#define NPT_HTTP_HEADER_CONTENT_RANGE "Content-Range"
+
+#define NPT_HTTP_TRANSFER_ENCODING_CHUNKED "chunked"
+
+#define NPT_HTTP_HEADER_AUTHORIZATION "Authorization"
+
+const int NPT_ERROR_HTTP_INVALID_RESPONSE_LINE = NPT_ERROR_BASE_HTTP - 0;
+const int NPT_ERROR_HTTP_INVALID_REQUEST_LINE = NPT_ERROR_BASE_HTTP - 1;
+const int NPT_ERROR_HTTP_NO_PROXY = NPT_ERROR_BASE_HTTP - 2;
+const int NPT_ERROR_HTTP_INVALID_REQUEST = NPT_ERROR_BASE_HTTP - 3;
+const int NPT_ERROR_HTTP_METHOD_NOT_SUPPORTED = NPT_ERROR_BASE_HTTP - 4;
+
+#define NPT_HTTP_LINE_TERMINATOR "\r\n"
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef unsigned int NPT_HttpStatusCode;
+typedef NPT_UrlQuery NPT_HttpUrlQuery; // for backward compatibility
+
+/*----------------------------------------------------------------------
+| NPT_HttpUrl
++---------------------------------------------------------------------*/
+class NPT_HttpUrl : public NPT_Url {
+public:
+ // constructors
+ NPT_HttpUrl() {}
+ NPT_HttpUrl(const char* host,
+ NPT_UInt16 port,
+ const char* path,
+ const char* query = NULL,
+ const char* fragment = NULL);
+ NPT_HttpUrl(const char* url, bool ignore_scheme = false);
+
+ // methods
+ virtual NPT_String ToString(bool with_fragment = true) const;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpProtocol
++---------------------------------------------------------------------*/
+class NPT_HttpProtocol
+{
+public:
+ // class methods
+ const char* GetStatusCodeString(NPT_HttpStatusCode status_code);
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeader
++---------------------------------------------------------------------*/
+class NPT_HttpHeader {
+public:
+ // constructors and destructor
+ NPT_HttpHeader(const char* name, const char* value);
+ ~NPT_HttpHeader();
+
+ // methods
+ NPT_Result Emit(NPT_OutputStream& stream) const;
+ const NPT_String& GetName() const { return m_Name; }
+ const NPT_String& GetValue() const { return m_Value; }
+ NPT_Result SetName(const char* name);
+ NPT_Result SetValue(const char* value);
+
+private:
+ // members
+ NPT_String m_Name;
+ NPT_String m_Value;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpHeaders
++---------------------------------------------------------------------*/
+class NPT_HttpHeaders {
+public:
+ // constructors and destructor
+ NPT_HttpHeaders();
+ ~NPT_HttpHeaders();
+
+ // methods
+ NPT_Result Parse(NPT_BufferedInputStream& stream);
+ NPT_Result Emit(NPT_OutputStream& stream) const;
+ NPT_List<NPT_HttpHeader*>& GetHeaders() { return m_Headers; }
+ NPT_HttpHeader* GetHeader(const char* name) const;
+ const NPT_String* GetHeaderValue(const char* name) const;
+ NPT_Result SetHeader(const char* name, const char* value, bool replace=true);
+ NPT_Result AddHeader(const char* name, const char* value);
+
+private:
+ // members
+ NPT_List<NPT_HttpHeader*> m_Headers;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpEntity
++---------------------------------------------------------------------*/
+class NPT_HttpEntity {
+public:
+ // constructors and destructor
+ NPT_HttpEntity();
+ NPT_HttpEntity(const NPT_HttpHeaders& headers);
+ virtual ~NPT_HttpEntity();
+
+ // methods
+ NPT_Result SetInputStream(const NPT_InputStreamReference& stream,
+ bool update_content_length = false);
+ NPT_Result SetInputStream(const void* data, NPT_Size size);
+ NPT_Result SetInputStream(const NPT_String& string);
+ NPT_Result SetInputStream(const char* string);
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result Load(NPT_DataBuffer& buffer);
+ NPT_Result SetHeaders(const NPT_HttpHeaders& headers);
+
+ // field access
+ NPT_Result SetContentLength(NPT_LargeSize length);
+ NPT_Result SetContentType(const char* type);
+ NPT_Result SetContentEncoding(const char* encoding);
+ NPT_Result SetTransferEncoding(const char* encoding);
+ NPT_LargeSize GetContentLength() { return m_ContentLength; }
+ const NPT_String& GetContentType() { return m_ContentType; }
+ const NPT_String& GetContentEncoding() { return m_ContentEncoding; }
+ const NPT_String& GetTransferEncoding(){ return m_TransferEncoding;}
+ bool HasContentLength() { return m_HasContentLength;}
+
+private:
+ // members
+ NPT_InputStreamReference m_InputStream;
+ NPT_LargeSize m_ContentLength;
+ NPT_String m_ContentType;
+ NPT_String m_ContentEncoding;
+ NPT_String m_TransferEncoding;
+ bool m_HasContentLength;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpMessage
++---------------------------------------------------------------------*/
+class NPT_HttpMessage {
+public:
+ // constructors and destructor
+ virtual ~NPT_HttpMessage();
+
+ // methods
+ const NPT_String& GetProtocol() const {
+ return m_Protocol;
+ }
+ NPT_Result SetProtocol(const char* protocol) {
+ m_Protocol = protocol;
+ return NPT_SUCCESS;
+ }
+ NPT_HttpHeaders& GetHeaders() {
+ return m_Headers;
+ }
+ NPT_Result SetEntity(NPT_HttpEntity* entity);
+ NPT_HttpEntity* GetEntity() {
+ return m_Entity;
+ }
+ virtual NPT_Result ParseHeaders(NPT_BufferedInputStream& stream);
+
+protected:
+ // constructors
+ NPT_HttpMessage(const char* protocol);
+
+ // members
+ NPT_String m_Protocol;
+ NPT_HttpHeaders m_Headers;
+ NPT_HttpEntity* m_Entity;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequest
++---------------------------------------------------------------------*/
+class NPT_HttpRequest : public NPT_HttpMessage {
+public:
+ // class methods
+ static NPT_Result Parse(NPT_BufferedInputStream& stream,
+ const NPT_SocketAddress* endpoint,
+ NPT_HttpRequest*& request);
+
+ // constructors and destructor
+ NPT_HttpRequest(const NPT_HttpUrl& url,
+ const char* method,
+ const char* protocol = NPT_HTTP_PROTOCOL_1_0);
+ NPT_HttpRequest(const char* url,
+ const char* method,
+ const char* protocol = NPT_HTTP_PROTOCOL_1_0);
+ virtual ~NPT_HttpRequest();
+
+ // methods
+ const NPT_HttpUrl& GetUrl() const { return m_Url; }
+ NPT_HttpUrl& GetUrl() { return m_Url; }
+ NPT_Result SetUrl(const char* url);
+ NPT_Result SetUrl(const NPT_HttpUrl& url);
+ const NPT_String& GetMethod() const { return m_Method; }
+ virtual NPT_Result Emit(NPT_OutputStream& stream, bool use_proxy=false) const;
+
+protected:
+ // members
+ NPT_HttpUrl m_Url;
+ NPT_String m_Method;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponse
++---------------------------------------------------------------------*/
+class NPT_HttpResponse : public NPT_HttpMessage {
+public:
+ // class methods
+ static NPT_Result Parse(NPT_BufferedInputStream& stream,
+ NPT_HttpResponse*& response,
+ bool reuse_response = false);
+
+ // constructors and destructor
+ NPT_HttpResponse(NPT_HttpStatusCode status_code,
+ const char* reason_phrase,
+ const char* protocol = NPT_HTTP_PROTOCOL_1_0);
+ virtual ~NPT_HttpResponse();
+
+ // methods
+ NPT_Result SetStatus(NPT_HttpStatusCode status_code,
+ const char* reason_phrase,
+ const char* protocol = NPT_HTTP_PROTOCOL_1_0);
+ NPT_Result SetProtocol(const char* protocol);
+ NPT_HttpStatusCode GetStatusCode() { return m_StatusCode; }
+ NPT_String& GetReasonPhrase() { return m_ReasonPhrase; }
+ virtual NPT_Result Emit(NPT_OutputStream& stream) const;
+
+protected:
+ // members
+ NPT_HttpStatusCode m_StatusCode;
+ NPT_String m_ReasonPhrase;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpProxyAddress
++---------------------------------------------------------------------*/
+class NPT_HttpProxyAddress
+{
+public:
+ NPT_HttpProxyAddress() : m_Port(NPT_HTTP_INVALID_PORT) {}
+ NPT_HttpProxyAddress(const char* hostname, NPT_UInt16 port) :
+ m_HostName(hostname), m_Port(port) {}
+
+ const NPT_String& GetHostName() const { return m_HostName; }
+ void SetHostName(const char* hostname) { m_HostName = hostname; }
+ NPT_UInt16 GetPort() const { return m_Port; }
+ void SetPort(NPT_UInt16 port) { m_Port = port; }
+
+private:
+ NPT_String m_HostName;
+ NPT_UInt16 m_Port;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpProxySelector
++---------------------------------------------------------------------*/
+class NPT_HttpProxySelector
+{
+public:
+ // class methods
+ static NPT_HttpProxySelector* GetSystemDefault();
+
+ // methods
+ virtual ~NPT_HttpProxySelector() {};
+ virtual NPT_Result GetProxyForUrl(const NPT_HttpUrl& url, NPT_HttpProxyAddress& proxy) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpClient
++---------------------------------------------------------------------*/
+class NPT_HttpClient {
+public:
+ // types
+ struct Config {
+ NPT_Timeout m_ConnectionTimeout;
+ NPT_Timeout m_IoTimeout;
+ NPT_Timeout m_NameResolverTimeout;
+ bool m_FollowRedirect;
+ };
+
+ class Connector {
+ public:
+ virtual ~Connector() {}
+
+ virtual NPT_Result Connect(const char* hostname,
+ NPT_UInt16 port,
+ NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout,
+ NPT_Timeout name_resolver_timeout,
+ NPT_InputStreamReference& input_stream,
+ NPT_OutputStreamReference& output_stream) = 0;
+
+ };
+
+ // class methods
+ static NPT_Result WriteRequest(NPT_OutputStream& output_stream,
+ NPT_HttpRequest& request,
+ bool use_proxy = false);
+ static NPT_Result ReadResponse(NPT_InputStreamReference& input_stream,
+ bool expect_entity,
+ NPT_HttpResponse*& response);
+
+ /**
+ * @param connector Pointer to a Connector instance, or NULL to use
+ * the default (TCP) connector.
+ */
+ NPT_HttpClient(Connector* connector = NULL);
+
+ virtual ~NPT_HttpClient();
+
+ // methods
+ NPT_Result SendRequest(NPT_HttpRequest& request,
+ NPT_HttpResponse*& response);
+ NPT_Result SetConfig(const Config& config);
+ NPT_Result SetProxy(const char* hostname, NPT_UInt16 port);
+ NPT_Result SetProxySelector(NPT_HttpProxySelector* selector);
+ NPT_Result SetConnector(Connector* connector);
+ NPT_Result SetTimeouts(NPT_Timeout connection_timeout,
+ NPT_Timeout io_timeout,
+ NPT_Timeout name_resolver_timeout);
+
+protected:
+ // methods
+ NPT_Result SendRequestOnce(NPT_HttpRequest& request,
+ NPT_HttpResponse*& response);
+
+ // members
+ Config m_Config;
+ NPT_HttpProxySelector* m_ProxySelector;
+ bool m_ProxySelectorIsOwned;
+ Connector* m_Connector;
+
+public:
+ static NPT_String m_UserAgentHeader;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequestContext
++---------------------------------------------------------------------*/
+class NPT_HttpRequestContext
+{
+public:
+ // constructor
+ NPT_HttpRequestContext() {}
+ NPT_HttpRequestContext(const NPT_SocketAddress* local_address,
+ const NPT_SocketAddress* remote_address);
+
+ // methods
+ const NPT_SocketAddress& GetLocalAddress() const { return m_LocalAddress; }
+ const NPT_SocketAddress& GetRemoteAddress() const { return m_RemoteAddress; }
+ void SetLocalAddress(const NPT_SocketAddress& address) {
+ m_LocalAddress = address;
+ }
+ void SetRemoteAddress(const NPT_SocketAddress& address) {
+ m_RemoteAddress = address;
+ }
+
+private:
+ // members
+ NPT_SocketAddress m_LocalAddress;
+ NPT_SocketAddress m_RemoteAddress;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpRequestHandler
++---------------------------------------------------------------------*/
+class NPT_HttpRequestHandler
+{
+public:
+ // destructor
+ virtual ~NPT_HttpRequestHandler() {}
+
+ // methods
+ virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response) = 0;
+
+ /**
+ * Override this method if you want to write the body yourself.
+ * The default implementation will simply write out the entity's
+ * input stream.
+ */
+ virtual NPT_Result SendResponseBody(const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response,
+ NPT_OutputStream& output);
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpStaticRequestHandler
++---------------------------------------------------------------------*/
+class NPT_HttpStaticRequestHandler : public NPT_HttpRequestHandler
+{
+public:
+ // constructors
+ NPT_HttpStaticRequestHandler(const char* document,
+ const char* mime_type = "text/html",
+ bool copy = true);
+ NPT_HttpStaticRequestHandler(const void* data,
+ NPT_Size size,
+ const char* mime_type = "text/html",
+ bool copy = true);
+
+ // NPT_HttpRequestHandler methods
+ virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response);
+
+protected:
+ NPT_String m_MimeType;
+ NPT_DataBuffer m_Buffer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpFileRequestHandler_FileTypeMap
++---------------------------------------------------------------------*/
+typedef struct NPT_HttpFileRequestHandler_FileTypeMapEntry {
+ const char* extension;
+ const char* mime_type;
+} NPT_HttpFileRequestHandler_FileTypeMapEntry;
+
+// specify size here so NPT_ARRAY_SIZE can work
+extern const NPT_HttpFileRequestHandler_FileTypeMapEntry NPT_HttpFileRequestHandler_DefaultFileTypeMap[43];
+
+/*----------------------------------------------------------------------
+| NPT_HttpFileRequestHandler
++---------------------------------------------------------------------*/
+class NPT_HttpFileRequestHandler : public NPT_HttpRequestHandler
+{
+public:
+ // constructors
+ NPT_HttpFileRequestHandler(const char* url_root,
+ const char* file_root,
+ bool auto_dir = false);
+
+ // NPT_HttpRequestHandler methods
+ virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response);
+
+ // accessors
+ NPT_Map<NPT_String,NPT_String>& GetFileTypeMap() { return m_FileTypeMap; }
+ void SetDefaultMimeType(const char* mime_type) {
+ m_DefaultMimeType = mime_type;
+ }
+ void SetUseDefaultFileTypeMap(bool use_default) {
+ m_UseDefaultFileTypeMap = use_default;
+ }
+
+protected:
+ // methods
+ const char* GetContentType(const NPT_String& filename);
+
+private:
+ NPT_String m_UrlRoot;
+ NPT_String m_FileRoot;
+ NPT_Map<NPT_String, NPT_String> m_FileTypeMap;
+ NPT_String m_DefaultMimeType;
+ bool m_UseDefaultFileTypeMap;
+ bool m_AutoDir;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpServer
++---------------------------------------------------------------------*/
+class NPT_HttpServer {
+public:
+ // types
+ struct Config {
+ NPT_Timeout m_ConnectionTimeout;
+ NPT_Timeout m_IoTimeout;
+ NPT_IpAddress m_ListenAddress;
+ NPT_UInt16 m_ListenPort;
+ bool m_ReuseAddress;
+ };
+
+ // constructors and destructor
+ NPT_HttpServer(NPT_UInt16 listen_port = NPT_HTTP_DEFAULT_PORT,
+ bool reuse_address = true);
+ NPT_HttpServer(NPT_IpAddress listen_address,
+ NPT_UInt16 listen_port = NPT_HTTP_DEFAULT_PORT,
+ bool reuse_address = true);
+ virtual ~NPT_HttpServer();
+
+ // methods
+ NPT_Result SetConfig(const Config& config);
+ const Config& GetConfig() const { return m_Config; }
+ NPT_Result SetListenPort(NPT_UInt16 port, bool reuse_address = true);
+ NPT_Result SetTimeouts(NPT_Timeout connection_timeout, NPT_Timeout io_timeout);
+ NPT_Result Abort();
+ NPT_Result WaitForNewClient(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output,
+ NPT_HttpRequestContext* context);
+ NPT_Result Loop();
+ NPT_UInt16 GetPort() { return m_BoundPort; }
+
+ /**
+ * Add a request handler. The ownership of the handler is NOT transfered to this object,
+ * so the caller is responsible for the lifetime management of the handler object.
+ */
+ NPT_Result AddRequestHandler(NPT_HttpRequestHandler* handler, const char* path, bool include_children = false);
+ NPT_HttpRequestHandler* FindRequestHandler(NPT_HttpRequest& request);
+
+ /**
+ * Parse the request from a new client, form a response, and send it back.
+ */
+ NPT_Result RespondToClient(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output,
+ const NPT_HttpRequestContext& context);
+
+protected:
+ // types
+ struct HandlerConfig {
+ HandlerConfig(NPT_HttpRequestHandler* handler,
+ const char* path,
+ bool include_children);
+ ~HandlerConfig();
+
+ // methods
+ bool WillHandle(NPT_HttpRequest& request);
+
+ // members
+ NPT_HttpRequestHandler* m_Handler;
+ NPT_String m_Path;
+ bool m_IncludeChildren;
+ };
+
+ // methods
+ NPT_Result Bind();
+
+ // members
+ NPT_TcpServerSocket m_Socket;
+ NPT_UInt16 m_BoundPort;
+ Config m_Config;
+ NPT_List<HandlerConfig*> m_RequestHandlers;
+
+public:
+ static NPT_String m_ServerHeader;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpResponder
++---------------------------------------------------------------------*/
+class NPT_HttpResponder {
+public:
+ // types
+ struct Config {
+ NPT_Timeout m_IoTimeout;
+ };
+
+ // constructors and destructor
+ NPT_HttpResponder(NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output);
+ virtual ~NPT_HttpResponder();
+
+ // methods
+ NPT_Result SetConfig(const Config& config);
+ NPT_Result SetTimeout(NPT_Timeout io_timeout);
+ NPT_Result ParseRequest(NPT_HttpRequest*& request,
+ const NPT_SocketAddress* local_address = NULL);
+ NPT_Result SendResponseHeaders(NPT_HttpResponse& response);
+
+protected:
+ // members
+ Config m_Config;
+ NPT_BufferedInputStreamReference m_Input;
+ NPT_OutputStreamReference m_Output;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedInputStream
++---------------------------------------------------------------------*/
+class NPT_HttpChunkedInputStream : public NPT_InputStream
+{
+public:
+ // constructors and destructor
+ NPT_HttpChunkedInputStream(NPT_BufferedInputStreamReference& stream);
+ virtual ~NPT_HttpChunkedInputStream();
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ NPT_Result Seek(NPT_Position offset);
+ NPT_Result Tell(NPT_Position& offset);
+ NPT_Result GetSize(NPT_LargeSize& size);
+ NPT_Result GetAvailable(NPT_LargeSize& available);
+
+protected:
+ // members
+ NPT_BufferedInputStreamReference m_Source;
+ NPT_UInt32 m_CurrentChunkSize;
+ bool m_Eos;
+};
+
+/*----------------------------------------------------------------------
+| NPT_HttpChunkedOutputStream
++---------------------------------------------------------------------*/
+class NPT_HttpChunkedOutputStream : public NPT_OutputStream
+{
+public:
+ // constructors and destructor
+ NPT_HttpChunkedOutputStream(NPT_OutputStream& stream);
+ virtual ~NPT_HttpChunkedOutputStream();
+
+ // NPT_OutputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written = NULL);
+ NPT_Result Seek(NPT_Position /*offset*/) { return NPT_ERROR_NOT_SUPPORTED;}
+ NPT_Result Tell(NPT_Position& offset) { return m_Stream.Tell(offset); }
+ NPT_Result Flush() { return m_Stream.Flush(); }
+
+protected:
+ // members
+ NPT_OutputStream& m_Stream;
+};
+
+#endif // _NPT_HTTP_H_
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptInterfaces.h b/lib/libUPnP/Neptune/Source/Core/NptInterfaces.h
new file mode 100644
index 0000000000..b0bb264402
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptInterfaces.h
@@ -0,0 +1,115 @@
+/*****************************************************************
+|
+| Neptune - Interfaces
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_INTERFACES_H_
+#define _NPT_INTERFACES_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptCommon.h"
+#include "NptResults.h"
+#include "NptConfig.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_NO_SUCH_INTERFACE = NPT_ERROR_BASE_INTERFACES - 0;
+
+/*----------------------------------------------------------------------
+| NPT_InterfaceId
++---------------------------------------------------------------------*/
+class NPT_InterfaceId
+{
+ public:
+ // methods
+ bool operator==(const NPT_InterfaceId& id) const {
+ return ((id.m_Id == m_Id) && (id.m_Version == m_Version));
+ }
+
+ // members
+ unsigned long m_Id;
+ unsigned long m_Version;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Polymorphic
++---------------------------------------------------------------------*/
+class NPT_Polymorphic
+{
+public:
+ // destructor
+ virtual ~NPT_Polymorphic() {}
+
+ // methods
+ virtual NPT_Result GetInterface(const NPT_InterfaceId& id,
+ NPT_Interface*& iface) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Interruptible
++---------------------------------------------------------------------*/
+class NPT_Interruptible
+{
+public:
+ // destructor
+ virtual ~NPT_Interruptible() {}
+
+ // methods
+ virtual NPT_Result Interrupt() = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Configurable
++---------------------------------------------------------------------*/
+class NPT_Configurable
+{
+public:
+ // destructor
+ virtual ~NPT_Configurable() {}
+
+ // methods
+ virtual NPT_Result SetProperty(const char* /*name*/,
+ const char* /*value*/) {
+ return NPT_ERROR_NO_SUCH_PROPERTY;
+ }
+ virtual NPT_Result SetProperty(const char* /*name*/,
+ int /*value*/) {
+ return NPT_ERROR_NO_SUCH_PROPERTY;
+ }
+ virtual NPT_Result GetProperty(const char* /*name*/,
+ NPT_PropertyValue& /*value*/) {
+ return NPT_ERROR_NO_SUCH_PROPERTY;
+ }
+};
+
+#endif // _NPT_INTERFACES_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptList.cpp b/lib/libUPnP/Neptune/Source/Core/NptList.cpp
new file mode 100644
index 0000000000..88797564a3
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptList.cpp
@@ -0,0 +1,34 @@
+/*****************************************************************
+|
+| Neptune - Lists
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
diff --git a/lib/libUPnP/Neptune/Source/Core/NptList.h b/lib/libUPnP/Neptune/Source/Core/NptList.h
new file mode 100644
index 0000000000..f91b498236
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptList.h
@@ -0,0 +1,605 @@
+/*****************************************************************
+|
+| Neptune - Lists
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_LIST_H_
+#define _NPT_LIST_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptResults.h"
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptCommon.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_LIST_EMPTY = NPT_ERROR_BASE_LIST - 0;
+const int NPT_ERROR_LIST_OPERATION_ABORTED = NPT_ERROR_BASE_LIST - 1;
+const int NPT_ERROR_LIST_OPERATION_CONTINUE = NPT_ERROR_BASE_LIST - 2;
+
+/*----------------------------------------------------------------------
+| NPT_List
++---------------------------------------------------------------------*/
+template <typename T>
+class NPT_List
+{
+protected:
+ class Item;
+
+public:
+ // types
+ typedef T Element;
+
+ class Iterator {
+ public:
+ Iterator() : m_Item(NULL) {}
+ explicit Iterator(Item* item) : m_Item(item) {}
+ Iterator(const Iterator& copy) : m_Item(copy.m_Item) {}
+ T& operator*() const { return m_Item->m_Data; }
+ T* operator->() const { return &m_Item->m_Data;}
+ Iterator& operator++() { // prefix
+ m_Item = m_Item->m_Next;
+ return (*this);
+ }
+ Iterator operator++(int) { // postfix
+ Iterator saved_this = *this;
+ m_Item = m_Item->m_Next;
+ return saved_this;
+ }
+ Iterator& operator--() { // prefix
+ m_Item = m_Item->m_Prev;
+ return (*this);
+ }
+ Iterator operator--(int) { // postfix
+ Iterator saved_this = *this;
+ m_Item = m_Item->m_Prev;
+ return saved_this;
+ }
+ operator bool() const {
+ return m_Item != NULL;
+ }
+ bool operator==(const Iterator& other) const {
+ return m_Item == other.m_Item;
+ }
+ bool operator!=(const Iterator& other) const {
+ return m_Item != other.m_Item;
+ }
+ void operator=(const Iterator& other) {
+ m_Item = other.m_Item;
+ }
+ void operator=(Item* item) {
+ m_Item = item;
+ }
+
+ private:
+ Item* m_Item;
+
+ // friends
+ friend class NPT_List<T>;
+ };
+
+ // methods
+ NPT_List<T>();
+ NPT_List<T>(const NPT_List<T>& list);
+ ~NPT_List<T>();
+ NPT_Result Add(const T& data);
+ NPT_Result Insert(const Iterator where, const T& data);
+ NPT_Result Remove(const T& data, bool all=false);
+ NPT_Result Erase(const Iterator position);
+ NPT_Result PopHead(T& data);
+ bool Contains(const T& data) const;
+ NPT_Result Clear();
+ NPT_Result Get(NPT_Ordinal index, T& data) const;
+ NPT_Result Get(NPT_Ordinal index, T*& data) const;
+ NPT_Cardinal GetItemCount() const { return m_ItemCount; }
+ Iterator GetFirstItem() const { return Iterator(m_Head); }
+ Iterator GetLastItem() const { return Iterator(m_Tail); }
+ Iterator GetItem(NPT_Ordinal index) const;
+
+ // list manipulation
+ NPT_Result Add(NPT_List<T>& list);
+ NPT_Result Remove(const NPT_List<T>& list, bool all=false);
+
+ // item manipulation
+ NPT_Result Add(Item& item);
+ NPT_Result Detach(Item& item);
+ NPT_Result Insert(const Iterator where, Item& item);
+
+ // list operations
+ // keep these template members defined here because MSV6 does not let
+ // us define them later
+ template <typename X>
+ NPT_Result Apply(const X& function) const
+ {
+ Item* item = m_Head;
+ while (item) {
+ function(item->m_Data);
+ item = item->m_Next;
+ }
+
+ return NPT_SUCCESS;
+ }
+
+ template <typename X, typename P>
+ NPT_Result ApplyUntil(const X& function, const P& predicate, bool* match = NULL) const
+ {
+ Item* item = m_Head;
+ while (item) {
+ NPT_Result return_value;
+ if (predicate(function(item->m_Data), return_value)) {
+ if (match) *match = true;
+ return return_value;
+ }
+ item = item->m_Next;
+ }
+
+ if (match) *match = false;
+ return NPT_SUCCESS;
+ }
+
+ template <typename P>
+ Iterator Find(const P& predicate, NPT_Ordinal n=0) const
+ {
+ Item* item = m_Head;
+ while (item) {
+ if (predicate(item->m_Data)) {
+ if (n == 0) {
+ return Iterator(item);
+ }
+ --n;
+ }
+ item = item->m_Next;
+ }
+
+ return Iterator(NULL);
+ }
+
+ // operators
+ void operator=(const NPT_List<T>& other);
+ bool operator==(const NPT_List<T>& other) const;
+ bool operator!=(const NPT_List<T>& other) const;
+
+protected:
+ // types
+ class Item
+ {
+ public:
+ // methods
+ Item(const T& data) : m_Next(0), m_Prev(0), m_Data(data) {}
+
+ // members
+ Item* m_Next;
+ Item* m_Prev;
+ T m_Data;
+
+ // friends
+ //friend class NPT_List<T>;
+ //friend class NPT_List<T>::Iterator;
+ };
+
+ // members
+ NPT_Cardinal m_ItemCount;
+ Item* m_Head;
+ Item* m_Tail;
+};
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::NPT_List
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_List<T>::NPT_List() : m_ItemCount(0), m_Head(0), m_Tail(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::NPT_List
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_List<T>::NPT_List(const NPT_List<T>& list) : m_ItemCount(0), m_Head(0), m_Tail(0)
+{
+ *this = list;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::~NPT_List<T>
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_List<T>::~NPT_List()
+{
+ Clear();
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::operator=
++---------------------------------------------------------------------*/
+template <typename T>
+void
+NPT_List<T>::operator=(const NPT_List<T>& list)
+{
+ // cleanup
+ Clear();
+
+ // copy the new list
+ Item* item = list.m_Head;
+ while (item) {
+ Add(item->m_Data);
+ item = item->m_Next;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::operator==
++---------------------------------------------------------------------*/
+template <typename T>
+bool
+NPT_List<T>::operator==(const NPT_List<T>& other) const
+{
+ // quick test
+ if (m_ItemCount != other.m_ItemCount) return false;
+
+ // compare all elements one by one
+ Item* our_item = m_Head;
+ Item* their_item = other.m_Head;
+ while (our_item && their_item) {
+ if (our_item->m_Data != their_item->m_Data) return false;
+ our_item = our_item->m_Next;
+ their_item = their_item->m_Next;
+ }
+
+ return our_item == NULL && their_item == NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::operator!=
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+bool
+NPT_List<T>::operator!=(const NPT_List<T>& other) const
+{
+ return !(*this == other);
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Clear
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Clear()
+{
+ // delete all items
+ Item* item = m_Head;
+ while (item) {
+ Item* next = item->m_Next;
+ delete item;
+ item = next;
+ }
+
+ m_ItemCount = 0;
+ m_Head = NULL;
+ m_Tail = NULL;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Add
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Add(Item& item)
+{
+ // add element at the tail
+ if (m_Tail) {
+ item.m_Prev = m_Tail;
+ item.m_Next = NULL;
+ m_Tail->m_Next = &item;
+ m_Tail = &item;
+ } else {
+ m_Head = &item;
+ m_Tail = &item;
+ item.m_Next = NULL;
+ item.m_Prev = NULL;
+ }
+
+ // one more item in the list now
+ ++m_ItemCount;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Add
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Add(NPT_List<T>& list)
+{
+ // copy the new list
+ Item* item = list.m_Head;
+ while (item) {
+ Add(item->m_Data);
+ item = item->m_Next;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Add
++---------------------------------------------------------------------*/
+template <typename T>
+inline
+NPT_Result
+NPT_List<T>::Add(const T& data)
+{
+ return Add(*new Item(data));
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::GetItem
++---------------------------------------------------------------------*/
+template <typename T>
+typename NPT_List<T>::Iterator
+NPT_List<T>::GetItem(NPT_Ordinal n) const
+{
+ Iterator result;
+ if (n >= m_ItemCount) return result;
+
+ result = m_Head;
+ for (unsigned int i=0; i<n; i++) {
+ ++result;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Insert
++---------------------------------------------------------------------*/
+template <typename T>
+inline NPT_Result
+NPT_List<T>::Insert(Iterator where, const T&data)
+{
+ return Insert(where, *new Item(data));
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Insert
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Insert(Iterator where, Item& item)
+{
+ // insert the item in the list
+ Item* position = where.m_Item;
+ if (position) {
+ // insert at position
+ item.m_Next = position;
+ item.m_Prev = position->m_Prev;
+ position->m_Prev = &item;
+ if (item.m_Prev) {
+ item.m_Prev->m_Next = &item;
+ } else {
+ // this is the new head
+ m_Head = &item;
+ }
+
+ // one more item in the list now
+ ++m_ItemCount;
+ } else {
+ // insert at tail
+ return Add(item);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Erase
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Erase(Iterator position)
+{
+ if (!position) return NPT_ERROR_NO_SUCH_ITEM;
+ Detach(*position.m_Item);
+ delete position.m_Item;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Remove
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Remove(const T& data, bool all)
+{
+ Item* item = m_Head;
+ NPT_Cardinal matches = 0;
+
+ while (item) {
+ Item* next = item->m_Next;
+ if (item->m_Data == data) {
+ // we found a match
+ ++matches;
+
+ // detach item
+ Detach(*item);
+
+ // destroy the item
+ delete item;
+
+ if (!all) return NPT_SUCCESS;
+ }
+ item = next;
+ }
+
+ return matches?NPT_SUCCESS:NPT_ERROR_NO_SUCH_ITEM;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Remove
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Remove(const NPT_List<T>& list, bool all)
+{
+ Item* item = list.m_Head;
+ while (item) {
+ Remove(item->m_Data, all);
+ item = item->m_Next;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Detach
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Detach(Item& item)
+{
+ // remove item
+ if (item.m_Prev) {
+ // item is not the head
+ if (item.m_Next) {
+ // item is not the tail
+ item.m_Next->m_Prev = item.m_Prev;
+ item.m_Prev->m_Next = item.m_Next;
+ } else {
+ // item is the tail
+ m_Tail = item.m_Prev;
+ m_Tail->m_Next = NULL;
+ }
+ } else {
+ // item is the head
+ m_Head = item.m_Next;
+ if (m_Head) {
+ // item is not the tail
+ m_Head->m_Prev = NULL;
+ } else {
+ // item is also the tail
+ m_Tail = NULL;
+ }
+ }
+
+ // one less item in the list now
+ --m_ItemCount;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Get
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Get(NPT_Ordinal index, T& data) const
+{
+ T* data_pointer;
+ NPT_CHECK(Get(index, data_pointer));
+ data = *data_pointer;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Get
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::Get(NPT_Ordinal index, T*& data) const
+{
+ Item* item = m_Head;
+
+ if (index < m_ItemCount) {
+ while (index--) item = item->m_Next;
+ data = &item->m_Data;
+ return NPT_SUCCESS;
+ } else {
+ data = NULL;
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::PopHead
++---------------------------------------------------------------------*/
+template <typename T>
+NPT_Result
+NPT_List<T>::PopHead(T& data)
+{
+ // check that we have an element
+ if (m_Head == NULL) return NPT_ERROR_LIST_EMPTY;
+
+ // copy the head item's data
+ data = m_Head->m_Data;
+
+ // discard the head item
+ Item* head = m_Head;
+ m_Head = m_Head->m_Next;
+ if (m_Head) {
+ m_Head->m_Prev = NULL;
+ } else {
+ m_Tail = NULL;
+ }
+ delete head;
+
+ // update the count
+ --m_ItemCount;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_List<T>::Contains
++---------------------------------------------------------------------*/
+template <typename T>
+bool
+NPT_List<T>::Contains(const T& data) const
+{
+ Item* item = m_Head;
+ while (item) {
+ if (item->m_Data == data) return true;
+ item = item->m_Next;
+ }
+
+ return false;
+}
+
+#endif // _NPT_LIST_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptLogging.cpp b/lib/libUPnP/Neptune/Source/Core/NptLogging.cpp
new file mode 100644
index 0000000000..b5394fc806
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptLogging.cpp
@@ -0,0 +1,1393 @@
+/*****************************************************************
+|
+| Neptune - Logging Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+/** @file
+* Implementation file for logging
+*/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdarg.h>
+
+#include "NptLogging.h"
+#include "NptList.h"
+#include "NptStreams.h"
+#include "NptSockets.h"
+#include "NptUtils.h"
+#include "NptFile.h"
+#include "NptSystem.h"
+#include "NptConsole.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.logging")
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+class NPT_LogConsoleHandler : public NPT_LogHandler {
+public:
+ // enums
+ enum {
+ OUTPUT_TO_CONSOLE = 1,
+ OUTPUT_TO_DEBUG = 2
+ };
+
+ // class methods
+ static NPT_Result Create(const char* logger_name, NPT_LogHandler*& handler);
+
+ // methods
+ void Log(const NPT_LogRecord& record);
+
+private:
+ // members
+ NPT_UInt32 m_Outputs;
+ bool m_UseColors;
+ NPT_Flags m_FormatFilter;
+};
+
+class NPT_LogFileHandler : public NPT_LogHandler {
+public:
+ // class methods
+ static NPT_Result Create(const char* logger_name, NPT_LogHandler*& handler);
+
+ // methods
+ void Log(const NPT_LogRecord& record);
+
+private:
+ NPT_Result Open(bool append = true);
+
+private:
+ // members
+ bool m_Flush;
+ bool m_Append;
+ NPT_String m_Filename;
+ NPT_Flags m_FormatFilter;
+ NPT_LargeSize m_MaxFilesize;
+ NPT_OutputStreamReference m_Stream;
+};
+
+class NPT_LogTcpHandler : public NPT_LogHandler {
+public:
+ // class methods
+ static void FormatRecord(const NPT_LogRecord& record, NPT_String& msg);
+ static NPT_Result Create(const char* logger_name, NPT_LogHandler*& handler);
+
+ // methods
+ void Log(const NPT_LogRecord& record);
+
+private:
+ // methods
+ NPT_Result Connect();
+
+ // members
+ NPT_String m_Host;
+ NPT_UInt16 m_Port;
+ NPT_OutputStreamReference m_Stream;
+};
+
+class NPT_LogUdpHandler : public NPT_LogHandler {
+public:
+ // class methods
+ static NPT_Result Create(const char* logger_name, NPT_LogHandler*& handler);
+
+ // methods
+ void Log(const NPT_LogRecord& record);
+
+private:
+ // members
+ NPT_UdpSocket m_Socket;
+ NPT_SocketAddress m_Target;
+};
+
+class NPT_LogNullHandler : public NPT_LogHandler {
+public:
+ // class methods
+ static NPT_Result Create(NPT_LogHandler*& handler);
+
+ // methods
+ void Log(const NPT_LogRecord& record);
+};
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_LOG_HEAP_BUFFER_INCREMENT 4096
+#define NPT_LOG_STACK_BUFFER_MAX_SIZE 512
+#define NPT_LOG_HEAP_BUFFER_MAX_SIZE 65536
+
+#if !defined(NPT_CONFIG_LOG_CONFIG_ENV)
+#define NPT_CONFIG_LOG_CONFIG_ENV "NEPTUNE_LOG_CONFIG"
+#endif
+
+#if !defined(NPT_CONFIG_DEFAULT_LOG_CONFIG_SOURCE)
+#define NPT_CONFIG_DEFAULT_LOG_CONFIG_SOURCE "file:neptune-logging.properties"
+#endif
+
+#if !defined(NPT_CONFIG_DEFAULT_LOG_LEVEL)
+#define NPT_CONFIG_DEFAULT_LOG_LEVEL NPT_LOG_LEVEL_OFF
+#endif
+#define NPT_LOG_ROOT_DEFAULT_HANDLER "ConsoleHandler"
+#if !defined(NPT_CONFIG_DEFAULT_FILE_HANDLER_FILENAME)
+#define NPT_CONFIG_DEFAULT_LOG_FILE_HANDLER_FILENAME "_neptune.log"
+#endif
+
+#define NPT_LOG_TCP_HANDLER_DEFAULT_PORT 7723
+#define NPT_LOG_TCP_HANDLER_DEFAULT_CONNECT_TIMEOUT 5000 /* 5 seconds */
+
+#define NPT_LOG_UDP_HANDLER_DEFAULT_PORT 7724
+
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__APPLE__)
+#define NPT_LOG_CONSOLE_HANDLER_DEFAULT_COLOR_MODE false
+#else
+#define NPT_LOG_CONSOLE_HANDLER_DEFAULT_COLOR_MODE true
+#endif
+
+#define NPT_LOG_FILE_HANDLER_MIN_RECYCLE_SIZE 20000000
+
+#define NPT_LOG_FORMAT_FILTER_NO_SOURCE 1
+#define NPT_LOG_FORMAT_FILTER_NO_TIMESTAMP 2
+#define NPT_LOG_FORMAT_FILTER_NO_FUNCTION_NAME 4
+#define NPT_LOG_FORMAT_FILTER_NO_LOGGER_NAME 8
+#define NPT_LOG_FORMAT_FILTER_NO_SOURCEPATH 16
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static NPT_LogManager LogManager;
+
+/*----------------------------------------------------------------------
+| NPT_LogHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogHandler::Create(const char* logger_name,
+ const char* handler_name,
+ NPT_LogHandler*& handler)
+{
+ handler = NULL;
+
+ if (NPT_StringsEqual(handler_name, "NullHandler")) {
+ return NPT_LogNullHandler::Create(handler);
+ } else if (NPT_StringsEqual(handler_name, "FileHandler")) {
+ return NPT_LogFileHandler::Create(logger_name, handler);
+ } else if (NPT_StringsEqual(handler_name, "ConsoleHandler")) {
+ return NPT_LogConsoleHandler::Create(logger_name, handler);
+ } else if (NPT_StringsEqual(handler_name, "TcpHandler")) {
+ return NPT_LogTcpHandler::Create(logger_name, handler);
+ } else if (NPT_StringsEqual(handler_name, "UdpHandler")) {
+ return NPT_LogUdpHandler::Create(logger_name, handler);
+ }
+
+ return NPT_ERROR_NO_SUCH_CLASS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Log::GetLogLevel
++---------------------------------------------------------------------*/
+int
+NPT_Log::GetLogLevel(const char* name)
+{
+ if ( NPT_StringsEqual(name, "FATAL")) {
+ return NPT_LOG_LEVEL_SEVERE;
+ } else if (NPT_StringsEqual(name, "SEVERE")) {
+ return NPT_LOG_LEVEL_WARNING;
+ } else if (NPT_StringsEqual(name, "WARNING")) {
+ return NPT_LOG_LEVEL_WARNING;
+ } else if (NPT_StringsEqual(name, "INFO")) {
+ return NPT_LOG_LEVEL_INFO;
+ } else if (NPT_StringsEqual(name, "FINE")) {
+ return NPT_LOG_LEVEL_FINE;
+ } else if (NPT_StringsEqual(name, "FINER")) {
+ return NPT_LOG_LEVEL_FINER;
+ } else if (NPT_StringsEqual(name, "FINEST")) {
+ return NPT_LOG_LEVEL_FINEST;
+ } else if (NPT_StringsEqual(name, "ALL")) {
+ return NPT_LOG_LEVEL_ALL;
+ } else if (NPT_StringsEqual(name, "OFF")) {
+ return NPT_LOG_LEVEL_OFF;
+ } else {
+ return -1;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Log::GetLogLevelName
++---------------------------------------------------------------------*/
+const char*
+NPT_Log::GetLogLevelName(int level)
+{
+ switch (level) {
+ case NPT_LOG_LEVEL_FATAL: return "FATAL";
+ case NPT_LOG_LEVEL_SEVERE: return "SEVERE";
+ case NPT_LOG_LEVEL_WARNING: return "WARNING";
+ case NPT_LOG_LEVEL_INFO: return "INFO";
+ case NPT_LOG_LEVEL_FINE: return "FINE";
+ case NPT_LOG_LEVEL_FINER: return "FINER";
+ case NPT_LOG_LEVEL_FINEST: return "FINEST";
+ case NPT_LOG_LEVEL_OFF: return "OFF";
+ default: return "";
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Log::GetLogLevelAnsiColor
++---------------------------------------------------------------------*/
+const char*
+NPT_Log::GetLogLevelAnsiColor(int level)
+{
+ switch (level) {
+ case NPT_LOG_LEVEL_FATAL: return "31";
+ case NPT_LOG_LEVEL_SEVERE: return "31";
+ case NPT_LOG_LEVEL_WARNING: return "33";
+ case NPT_LOG_LEVEL_INFO: return "32";
+ case NPT_LOG_LEVEL_FINE: return "34";
+ case NPT_LOG_LEVEL_FINER: return "35";
+ case NPT_LOG_LEVEL_FINEST: return "36";
+ default: return NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Log::FormatRecordToStream
++---------------------------------------------------------------------*/
+void
+NPT_Log::FormatRecordToStream(const NPT_LogRecord& record,
+ NPT_OutputStream& stream,
+ bool use_colors,
+ NPT_Flags format_filter)
+{
+ const char* level_name = GetLogLevelName(record.m_Level);
+ NPT_String level_string;
+
+ /* format and emit the record */
+ if (level_name[0] == '\0') {
+ level_string = NPT_String::FromInteger(record.m_Level);
+ level_name = level_string;
+ }
+ if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_SOURCE) == 0) {
+ int start = 0;
+ /* remove source file path if requested */
+ if (format_filter & NPT_LOG_FORMAT_FILTER_NO_SOURCEPATH) {
+ for (start = NPT_StringLength(record.m_SourceFile);
+ start;
+ --start) {
+ if (record.m_SourceFile[start-1] == '\\' ||
+ record.m_SourceFile[start-1] == '/') {
+ break;
+ }
+ }
+ }
+ stream.WriteString(record.m_SourceFile + start);
+ stream.Write("(", 1, NULL);
+ stream.WriteString(NPT_String::FromIntegerU(record.m_SourceLine));
+ stream.Write("): ", 3, NULL);
+ }
+ if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_LOGGER_NAME) == 0) {
+ stream.Write("[", 1, NULL);
+ stream.WriteString(record.m_LoggerName);
+ stream.Write("] ", 2, NULL);
+ }
+ if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_TIMESTAMP) == 0) {
+ stream.WriteString(NPT_String::FromIntegerU(record.m_TimeStamp.m_Seconds));
+ stream.WriteString(":");
+ NPT_String ms = NPT_String::FromIntegerU(record.m_TimeStamp.m_NanoSeconds/1000000L);
+ if (ms.GetLength() < 3) stream.Write("0", 1);
+ if (ms.GetLength() < 2) stream.Write("0", 1);
+ stream.WriteString(ms);
+ stream.Write(" ", 1);
+ }
+ if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_FUNCTION_NAME) == 0) {
+ stream.WriteFully("[",1);
+ if (record.m_SourceFunction) {
+ stream.WriteString(record.m_SourceFunction);
+ }
+ stream.WriteFully("] ",2);
+ }
+ const char* ansi_color = NULL;
+ if (use_colors) {
+ ansi_color = GetLogLevelAnsiColor(record.m_Level);
+ if (ansi_color) {
+ stream.Write("\033[", 2, NULL);
+ stream.WriteString(ansi_color);
+ stream.Write(";1m", 3, NULL);
+ }
+ }
+ stream.WriteString(level_name);
+ if (use_colors && ansi_color) {
+ stream.Write("\033[0m", 4, NULL);
+ }
+ stream.Write(": ", 2, NULL);
+ stream.WriteString(record.m_Message);
+ stream.Write("\n", 1, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::NPT_LogManager
++---------------------------------------------------------------------*/
+NPT_LogManager::NPT_LogManager() :
+ m_Enabled(true),
+ m_Configured(false),
+ m_Configuring(false),
+ m_Root(NULL)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::~NPT_LogManager
++---------------------------------------------------------------------*/
+NPT_LogManager::~NPT_LogManager()
+{
+ /* destroy everything we've created */
+ for (NPT_List<NPT_Logger*>::Iterator i = m_Loggers.GetFirstItem();
+ i;
+ ++i) {
+ NPT_Logger* logger = *i;
+ delete logger;
+ }
+
+ /* destroy the root logger */
+ delete m_Root;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::GetDefault
++---------------------------------------------------------------------*/
+NPT_LogManager&
+NPT_LogManager::GetDefault()
+{
+ return LogManager;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::Configure
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::Configure(const char* config_sources)
+{
+ // exit if we're already initialized
+ if (m_Configured) return NPT_SUCCESS;
+
+ NPT_AutoLock lock(LogManager.m_Lock);
+
+ // we're starting to configure ourselves
+ m_Configuring = true;
+
+ /* set some default config values */
+ SetConfigValue(".handlers", NPT_LOG_ROOT_DEFAULT_HANDLER);
+
+ /* see if the config sources have been set to non-default values */
+ NPT_String config_sources_env;
+ if (config_sources == NULL) {
+ config_sources = NPT_CONFIG_DEFAULT_LOG_CONFIG_SOURCE;
+ }
+ if (NPT_SUCCEEDED(NPT_GetEnvironment(NPT_CONFIG_LOG_CONFIG_ENV, config_sources_env))) {
+ config_sources = config_sources_env;
+ }
+
+ /* load all configs */
+ NPT_String config_source;
+ const char* cursor = config_sources;
+ const char* source = config_sources;
+ for (;;) {
+ if (*cursor == '\0' || *cursor == '|') {
+ if (cursor != source) {
+ config_source.Assign(source, (NPT_Size)(cursor-source));
+ config_source.Trim(" \t");
+ ParseConfigSource(config_source);
+ }
+ if (*cursor == '\0') break;
+ }
+ cursor++;
+ }
+
+ /* create the root logger */
+ LogManager.m_Root = new NPT_Logger("", *this);
+ LogManager.m_Root->m_Level = NPT_CONFIG_DEFAULT_LOG_LEVEL;
+ LogManager.m_Root->m_LevelIsInherited = false;
+ ConfigureLogger(LogManager.m_Root);
+
+ // we're initialized now
+ m_Configured = true;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ConfigValueIsBooleanTrue
++---------------------------------------------------------------------*/
+bool
+NPT_LogManager::ConfigValueIsBooleanTrue(NPT_String& value)
+{
+ return
+ value.Compare("true", true) == 0 ||
+ value.Compare("yes", true) == 0 ||
+ value.Compare("on", true) == 0 ||
+ value.Compare("1", true) == 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ConfigValueIsBooleanFalse
++---------------------------------------------------------------------*/
+bool
+NPT_LogManager::ConfigValueIsBooleanFalse(NPT_String& value)
+{
+ return
+ value.Compare("false", true) == 0 ||
+ value.Compare("no", true) == 0 ||
+ value.Compare("off", true) == 0 ||
+ value.Compare("0", true) == 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::GetConfigValue
++---------------------------------------------------------------------*/
+NPT_String*
+NPT_LogManager::GetConfigValue(const char* prefix, const char* suffix)
+{
+ NPT_Size prefix_length = prefix?NPT_StringLength(prefix):0;
+ NPT_Size suffix_length = suffix?NPT_StringLength(suffix):0;
+ NPT_Size key_length = prefix_length+suffix_length;
+ for (NPT_List<NPT_LogConfigEntry>::Iterator i = LogManager.m_Config.GetFirstItem();
+ i;
+ ++i) {
+ NPT_LogConfigEntry& entry = *i;
+ if ((entry.m_Key.GetLength() == key_length) &&
+ (prefix == NULL || entry.m_Key.StartsWith(prefix)) &&
+ (suffix == NULL || entry.m_Key.EndsWith(suffix )) ) {
+ return &entry.m_Value;
+ }
+ }
+
+ // not found
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::SetConfigValue
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::SetConfigValue(const char* key, const char* value)
+{
+ NPT_String* value_string = GetConfigValue(key, NULL);
+ if (value_string) {
+ /* the key already exists, replace the value */
+ *value_string = value;
+ } else {
+ /* the value does not already exist, create a new one */
+ NPT_CHECK(LogManager.m_Config.Add(NPT_LogConfigEntry(key, value)));
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ParseConfig
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::ParseConfig(const char* config,
+ NPT_Size config_size)
+{
+ const char* cursor = config;
+ const char* line = config;
+ const char* separator = NULL;
+ NPT_String key;
+ NPT_String value;
+
+ /* parse all entries */
+ while (cursor <= config+config_size) {
+ /* separators are newlines, ';' or end of buffer */
+ if ( cursor == config+config_size ||
+ *cursor == '\n' ||
+ *cursor == '\r' ||
+ *cursor == ';') {
+ /* newline or end of buffer */
+ if (separator && line[0] != '#') {
+ /* we have a property */
+ key.Assign(line, (NPT_Size)(separator-line));
+ value.Assign(line+(separator+1-line), (NPT_Size)(cursor-(separator+1)));
+ key.Trim(" \t");
+ value.Trim(" \t");
+
+ SetConfigValue((const char*)key, (const char*)value);
+ }
+ line = cursor+1;
+ separator = NULL;
+ } else if (*cursor == '=' && separator == NULL) {
+ separator = cursor;
+ }
+ cursor++;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ParseConfigFile
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::ParseConfigFile(const char* filename)
+{
+ NPT_Result result;
+
+ /* load the file */
+ NPT_DataBuffer buffer;
+ result = NPT_File::Load(filename, buffer);
+ if (NPT_FAILED(result)) return result;
+
+ /* parse the config */
+ return ParseConfig((const char*)buffer.GetData(), buffer.GetDataSize());
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ParseConfigSource
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::ParseConfigSource(NPT_String& source)
+{
+ if (source.StartsWith("file:")) {
+ /* file source */
+ ParseConfigFile(source.GetChars()+5);
+ } else if (source.StartsWith("plist:")) {
+ /* property list source */
+ ParseConfig(source.GetChars()+6, source.GetLength()-6);
+ } else if (source.StartsWith("http:port=")) {
+ /* http configurator */
+ unsigned int port = 0;
+ NPT_CHECK_WARNING(NPT_ParseInteger(source.GetChars()+10, port, true));
+ new NPT_HttpLoggerConfigurator(port);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::HaveLoggerConfig
++---------------------------------------------------------------------*/
+bool
+NPT_LogManager::HaveLoggerConfig(const char* name)
+{
+ NPT_Size name_length = NPT_StringLength(name);
+ for (NPT_List<NPT_LogConfigEntry>::Iterator i = m_Config.GetFirstItem();
+ i;
+ ++i) {
+ NPT_LogConfigEntry& entry = *i;
+ if (entry.m_Key.StartsWith(name)) {
+ const char* suffix = entry.m_Key.GetChars()+name_length;
+ if (NPT_StringsEqual(suffix, ".level") ||
+ NPT_StringsEqual(suffix, ".handlers") ||
+ NPT_StringsEqual(suffix, ".forward")) {
+ return true;
+ }
+ }
+ }
+
+ /* no config found */
+ return false;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::ConfigureLogger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogManager::ConfigureLogger(NPT_Logger* logger)
+{
+ /* configure the level */
+ NPT_String* level_value = GetConfigValue(logger->m_Name,".level");
+ if (level_value) {
+ NPT_Int32 value;
+ /* try a symbolic name */
+ value = NPT_Log::GetLogLevel(*level_value);
+ if (value < 0) {
+ /* try a numeric value */
+ if (NPT_FAILED(level_value->ToInteger(value, false))) {
+ value = -1;
+ }
+ }
+ if (value >= 0) {
+ logger->m_Level = value;
+ logger->m_LevelIsInherited = false;
+ }
+ }
+
+ /* remove any existing handlers */
+ logger->DeleteHandlers();
+
+ /* configure the handlers */
+ NPT_String* handlers = GetConfigValue(logger->m_Name,".handlers");
+ if (handlers) {
+ const char* handlers_list = handlers->GetChars();
+ const char* cursor = handlers_list;
+ const char* name_start = handlers_list;
+ NPT_String handler_name;
+ NPT_LogHandler* handler;
+ for (;;) {
+ if (*cursor == '\0' || *cursor == ',') {
+ if (cursor != name_start) {
+ handler_name.Assign(name_start, (NPT_Size)(cursor-name_start));
+ handler_name.Trim(" \t");
+
+ /* create a handler */
+ if (NPT_SUCCEEDED(
+ NPT_LogHandler::Create(logger->m_Name, handler_name, handler))) {
+ logger->AddHandler(handler);
+ }
+
+ }
+ if (*cursor == '\0') break;
+ name_start = cursor+1;
+ }
+ ++cursor;
+ }
+ }
+
+ /* configure the forwarding */
+ NPT_String* forward = GetConfigValue(logger->m_Name,".forward");
+ if (forward && !ConfigValueIsBooleanTrue(*forward)) {
+ logger->m_ForwardToParent = false;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::FindLogger
++---------------------------------------------------------------------*/
+NPT_Logger*
+NPT_LogManager::FindLogger(const char* name)
+{
+ for (NPT_List<NPT_Logger*>::Iterator i = LogManager.m_Loggers.GetFirstItem();
+ i;
+ ++i) {
+ NPT_Logger* logger = *i;
+ if (logger->m_Name == name) {
+ return logger;
+ }
+ }
+
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogManager::GetLogger
++---------------------------------------------------------------------*/
+NPT_Logger*
+NPT_LogManager::GetLogger(const char* name)
+{
+ /* check that LogManager was not turned off */
+ if (!LogManager.m_Enabled) return NULL;
+
+ /* check that the manager is initialized */
+ if (!LogManager.m_Configured) {
+ /* check that we're not in the middle of configuration */
+ if (LogManager.m_Configuring) return NULL;
+
+ /* init the manager */
+ LogManager.Configure();
+ NPT_ASSERT(LogManager.m_Configured);
+ }
+
+ {
+ NPT_AutoLock lock(LogManager.m_Lock);
+
+ /* check if this logger is already configured */
+ NPT_Logger* logger = LogManager.FindLogger(name);
+ if (logger) return logger;
+
+ /* create a new logger */
+ logger = new NPT_Logger(name, LogManager);
+ if (logger == NULL) return NULL;
+
+ /* configure the logger */
+ LogManager.ConfigureLogger(logger);
+
+ /* find which parent to attach to */
+ NPT_Logger* parent = LogManager.m_Root;
+ NPT_String parent_name = name;
+ for (;;) {
+ NPT_Logger* candidate_parent;
+
+ /* find the last dot */
+ int dot = parent_name.ReverseFind('.');
+ if (dot < 0) break;
+ parent_name.SetLength(dot);
+
+ /* see if the parent exists */
+ candidate_parent = LogManager.FindLogger(parent_name);
+ if (candidate_parent) {
+ parent = candidate_parent;
+ break;
+ }
+
+ /* this parent name does not exist, see if we need to create it */
+ if (LogManager.HaveLoggerConfig(parent_name)) {
+ LogManager.m_Lock.Unlock();
+ parent = GetLogger(parent_name);
+ LogManager.m_Lock.Lock();
+ break;
+ }
+ }
+
+ /* attach to the parent */
+ logger->SetParent(parent);
+
+ /* add this logger to the list */
+ LogManager.m_Loggers.Add(logger);
+
+ return logger;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::NPT_Logger
++---------------------------------------------------------------------*/
+NPT_Logger::NPT_Logger(const char* name, NPT_LogManager& manager) :
+ m_Manager(manager),
+ m_Name(name),
+ m_Level(NPT_LOG_LEVEL_OFF),
+ m_LevelIsInherited(true),
+ m_ForwardToParent(true),
+ m_Parent(NULL)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::~NPT_Logger
++---------------------------------------------------------------------*/
+NPT_Logger::~NPT_Logger()
+{
+ /* delete all handlers */
+ m_Handlers.Apply(NPT_ObjectDeleter<NPT_LogHandler>());
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::DeleteHandlers
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Logger::DeleteHandlers()
+{
+ /* delete all handlers and empty the list */
+ if (m_Handlers.GetItemCount()) {
+ m_Handlers.Apply(NPT_ObjectDeleter<NPT_LogHandler>());
+ m_Handlers.Clear();
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::Log
++---------------------------------------------------------------------*/
+void
+NPT_Logger::Log(int level,
+ const char* source_file,
+ unsigned int source_line,
+ const char* source_function,
+ const char* msg,
+ ...)
+{
+ char buffer[NPT_LOG_STACK_BUFFER_MAX_SIZE];
+ NPT_Size buffer_size = sizeof(buffer);
+ char* message = buffer;
+ int result;
+
+ /* check the log level (in case filtering has not already been done) */
+ if (level < m_Level) return;
+
+ /* format the message */
+ va_list args;
+ va_start(args, msg);
+ for(;;) {
+ /* try to format the message (it might not fit) */
+ result = NPT_FormatStringVN(message, buffer_size-1, msg, args);
+ if (result >= (int)(buffer_size-1)) result = -1;
+ message[buffer_size-1] = 0; /* force a NULL termination */
+ if (result >= 0) break;
+
+ /* the buffer was too small, try something bigger */
+ buffer_size = (buffer_size+NPT_LOG_HEAP_BUFFER_INCREMENT)*2;
+ if (buffer_size > NPT_LOG_HEAP_BUFFER_MAX_SIZE) break;
+ if (message != buffer) delete[] message;
+ message = new char[buffer_size];
+ if (message == NULL) return;
+ }
+
+ /* the message is formatted, publish it to the handlers */
+ NPT_LogRecord record;
+ NPT_Logger* logger = this;
+
+ /* setup the log record */
+ record.m_LoggerName = logger->m_Name,
+ record.m_Level = level;
+ record.m_Message = message;
+ record.m_SourceFile = source_file;
+ record.m_SourceLine = source_line;
+ record.m_SourceFunction = source_function;
+ NPT_System::GetCurrentTimeStamp(record.m_TimeStamp);
+
+ /* call all handlers for this logger and parents */
+ m_Manager.Lock();
+ while (logger) {
+ /* call all handlers for the current logger */
+ for (NPT_List<NPT_LogHandler*>::Iterator i = logger->m_Handlers.GetFirstItem();
+ i;
+ ++i) {
+ NPT_LogHandler* handler = *i;
+ handler->Log(record);
+ }
+
+ /* forward to the parent unless this logger does not forward */
+ if (logger->m_ForwardToParent) {
+ logger = logger->m_Parent;
+ } else {
+ break;
+ }
+ }
+ m_Manager.Unlock();
+
+ /* free anything we may have allocated */
+ if (message != buffer) delete[] message;
+
+ va_end(args);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::AddHandler
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Logger::AddHandler(NPT_LogHandler* handler)
+{
+ /* check parameters */
+ if (handler == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ return m_Handlers.Add(handler);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Logger::SetParent
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Logger::SetParent(NPT_Logger* parent)
+{
+ /* set our new parent */
+ m_Parent = parent;
+
+ /* find the first ancestor with its own log level */
+ NPT_Logger* logger = this;
+ while (logger->m_LevelIsInherited && logger->m_Parent) {
+ logger = logger->m_Parent;
+ }
+ if (logger != this) m_Level = logger->m_Level;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogNullHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogNullHandler::Create(NPT_LogHandler*& handler)
+{
+ handler = new NPT_LogNullHandler();
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogNullHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogNullHandler::Log(const NPT_LogRecord& /*record*/)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogConsoleHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogConsoleHandler::Create(const char* logger_name,
+ NPT_LogHandler*& handler)
+{
+ /* compute a prefix for the configuration of this handler */
+ NPT_String logger_prefix = logger_name;
+ logger_prefix += ".ConsoleHandler";
+
+ /* allocate a new object */
+ NPT_LogConsoleHandler* instance = new NPT_LogConsoleHandler();
+ handler = instance;
+
+ /* configure the object */
+ NPT_String* colors;
+ instance->m_UseColors = NPT_LOG_CONSOLE_HANDLER_DEFAULT_COLOR_MODE;
+ colors = LogManager.GetConfigValue(logger_prefix,".colors");
+ if (colors) {
+ if (NPT_LogManager::ConfigValueIsBooleanTrue(*colors)) {
+ instance->m_UseColors = true;
+ } else if (NPT_LogManager::ConfigValueIsBooleanFalse(*colors)) {
+ instance->m_UseColors = false;
+ }
+ }
+
+ NPT_String* outputs;
+ instance->m_Outputs = OUTPUT_TO_DEBUG;
+ outputs = LogManager.GetConfigValue(logger_prefix,".outputs");
+ if (outputs) {
+ outputs->ToInteger(instance->m_Outputs, true);
+ }
+
+ NPT_String* filter;
+ instance->m_FormatFilter = 0;
+ filter = LogManager.GetConfigValue(logger_prefix,".filter");
+ if (filter) {
+ filter->ToInteger(instance->m_FormatFilter, true);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogConsoleHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogConsoleHandler::Log(const NPT_LogRecord& record)
+{
+ NPT_MemoryStream memory_stream(4096);
+
+ NPT_Log::FormatRecordToStream(record, memory_stream, m_UseColors, m_FormatFilter);
+ memory_stream.Write("\0", 1);
+ if (m_Outputs & OUTPUT_TO_CONSOLE) {
+ NPT_Console::Output((const char*)memory_stream.GetData());
+ }
+ if (m_Outputs & OUTPUT_TO_DEBUG) {
+ NPT_DebugOutput((const char*)memory_stream.GetData());
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogFileHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogFileHandler::Log(const NPT_LogRecord& record)
+{
+ if (m_MaxFilesize > 0) {
+ /* get current file size */
+ NPT_LargeSize size;
+ NPT_File::GetSize(m_Filename, size);
+
+ /* time to recycle ? */
+ if (size > m_MaxFilesize) {
+ /* release stream to force a reopen later
+ and to be able to rename file */
+ m_Stream = NULL;
+
+ /* rename file using current time */
+ NPT_TimeStamp now;
+ NPT_System::GetCurrentTimeStamp(now);
+
+ NPT_String new_name = NPT_FilePath::Create(
+ NPT_FilePath::DirName(m_Filename),
+ NPT_FilePath::BaseName(m_Filename, false) +
+ "-" +
+ NPT_String::FromIntegerU(now.m_Seconds) +
+ NPT_FilePath::FileExtension(m_Filename));
+
+ NPT_File::Rename(m_Filename, new_name);
+ }
+ }
+
+ /* try to reopen the file if it failed to open
+ previously or if we rotated it */
+ if (m_Stream.IsNull()) {
+ Open(m_Append);
+ }
+
+ if (m_Stream.AsPointer()) {
+ NPT_Log::FormatRecordToStream(record, *m_Stream, false, m_FormatFilter);
+ if (m_Flush) m_Stream->Flush();
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogFileHandler::Open
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogFileHandler::Open(bool append /* = true */)
+{
+ /* reset stream just in case */
+ m_Stream = NULL;
+
+ /* open the log file */
+ NPT_File file(m_Filename);
+ NPT_Result result = file.Open(NPT_FILE_OPEN_MODE_CREATE |
+ NPT_FILE_OPEN_MODE_READ |
+ NPT_FILE_OPEN_MODE_WRITE |
+ (append?NPT_FILE_OPEN_MODE_APPEND:NPT_FILE_OPEN_MODE_TRUNCATE));
+ if (NPT_FAILED(result)) {
+ NPT_Debug("NPT_LogFileHandler::Open - cannot open log file '%s' (%d)\n",
+ m_Filename.GetChars(), result);
+ return result;
+ }
+
+ NPT_CHECK(file.GetOutputStream(m_Stream));
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogFileHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogFileHandler::Create(const char* logger_name,
+ NPT_LogHandler*& handler)
+{
+ /* compute a prefix for the configuration of this handler */
+ NPT_String logger_prefix = logger_name;
+ logger_prefix += ".FileHandler";
+
+ /* allocate a new object */
+ NPT_LogFileHandler* instance = new NPT_LogFileHandler();
+ handler = instance;
+
+ /* filename */
+ NPT_String* filename_conf = LogManager.GetConfigValue(logger_prefix, ".filename");
+ if (filename_conf) {
+ instance->m_Filename = *filename_conf;
+ } else if (logger_name[0]) {
+ NPT_String filename_synth = logger_name;
+ filename_synth += ".log";
+ instance->m_Filename = filename_synth;
+ } else {
+ /* default name for the root logger */
+ instance->m_Filename = NPT_CONFIG_DEFAULT_LOG_FILE_HANDLER_FILENAME;
+ }
+
+ /* always flush flag */
+ NPT_String* flush = LogManager.GetConfigValue(logger_prefix, ".flush");
+ if (flush && NPT_LogManager::ConfigValueIsBooleanFalse(*flush)) {
+ instance->m_Flush = true;
+ } else {
+ instance->m_Flush = false;
+ }
+
+ /* append mode */
+ instance->m_Append = true;
+ NPT_String* append_mode = LogManager.GetConfigValue(logger_prefix, ".append");
+ if (append_mode && NPT_LogManager::ConfigValueIsBooleanFalse(*append_mode)) {
+ instance->m_Append = false;
+ }
+
+ /* filter */
+ NPT_String* filter;
+ instance->m_FormatFilter = 0;
+ filter = LogManager.GetConfigValue(logger_prefix,".filter");
+ if (filter) {
+ filter->ToInteger(instance->m_FormatFilter, true);
+ }
+
+ /* recycle */
+ NPT_String* recycle;
+ instance->m_MaxFilesize = 0;
+ recycle = LogManager.GetConfigValue(logger_prefix,".recycle");
+ if (recycle) {
+ NPT_ParseInteger64(*recycle, instance->m_MaxFilesize, true);
+ if (instance->m_MaxFilesize < NPT_LOG_FILE_HANDLER_MIN_RECYCLE_SIZE) {
+ instance->m_MaxFilesize = NPT_LOG_FILE_HANDLER_MIN_RECYCLE_SIZE;
+ }
+ }
+
+ /* open the log file */
+ return instance->Open(instance->m_Append);
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogTcpHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogTcpHandler::Create(const char* logger_name, NPT_LogHandler*& handler)
+{
+ /* compute a prefix for the configuration of this handler */
+ NPT_String logger_prefix = logger_name;
+ logger_prefix += ".TcpHandler";
+
+ /* allocate a new object */
+ NPT_LogTcpHandler* instance = new NPT_LogTcpHandler();
+ handler = instance;
+
+ /* configure the object */
+ const NPT_String* hostname = LogManager.GetConfigValue(logger_prefix, ".hostname");
+ if (hostname) {
+ instance->m_Host = *hostname;
+ } else {
+ /* default hostname */
+ instance->m_Host = "localhost";
+ }
+ const NPT_String* port = LogManager.GetConfigValue(logger_prefix, ".port");
+ if (port) {
+ NPT_UInt32 port_int;
+ if (NPT_SUCCEEDED(port->ToInteger(port_int, true))) {
+ instance->m_Port = (NPT_UInt16)port_int;
+ } else {
+ instance->m_Port = NPT_LOG_TCP_HANDLER_DEFAULT_PORT;
+ }
+ } else {
+ /* default port */
+ instance->m_Port = NPT_LOG_TCP_HANDLER_DEFAULT_PORT;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogTcpHandler::Connect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogTcpHandler::Connect()
+{
+ /* create a socket */
+ NPT_Socket tcp_socket = new NPT_TcpClientSocket();
+
+ /* connect to the host */
+ NPT_IpAddress ip_address;
+ NPT_CHECK(ip_address.ResolveName(m_Host));
+ NPT_Result result = tcp_socket.Connect(NPT_SocketAddress(ip_address, m_Port),
+ NPT_LOG_TCP_HANDLER_DEFAULT_CONNECT_TIMEOUT);
+ if (NPT_FAILED(result)) {
+ return result;
+ }
+
+ /* get the stream */
+ return tcp_socket.GetOutputStream(m_Stream);
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogTcpHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogTcpHandler::FormatRecord(const NPT_LogRecord& record, NPT_String& msg)
+{
+ /* format the record */
+ const char* level_name = NPT_Log::GetLogLevelName(record.m_Level);
+ NPT_String level_string;
+
+ /* format and emit the record */
+ if (level_name[0] == '\0') {
+ level_string = NPT_String::FromIntegerU(record.m_Level);
+ level_name = level_string;
+ }
+ msg.Reserve(2048);
+ msg += "Logger: ";
+ msg += record.m_LoggerName;
+ msg += "\r\nLevel: ";
+ msg += level_name;
+ msg += "\r\nSource-File: ";
+ msg += record.m_SourceFile;
+ msg += "\r\nSource-Function: ";
+ msg += record.m_SourceFunction;
+ msg += "\r\nSource-Line: ";
+ msg += NPT_String::FromIntegerU(record.m_SourceLine);
+ msg += "\r\nTimeStamp: ";
+ msg += NPT_String::FromIntegerU(record.m_TimeStamp.m_Seconds);
+ msg += ":";
+ msg += NPT_String::FromIntegerU(record.m_TimeStamp.m_NanoSeconds/1000000L);
+ msg += "\r\nContent-Length: ";
+ msg += NPT_String::FromIntegerU(NPT_StringLength(record.m_Message));
+ msg += "\r\n\r\n";
+ msg += record.m_Message;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogTcpHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogTcpHandler::Log(const NPT_LogRecord& record)
+{
+ // ensure we're connected
+ if (m_Stream.IsNull()) {
+ if (NPT_FAILED(Connect())) return;
+ }
+
+ // format the record
+ NPT_String msg;
+ FormatRecord(record, msg);
+
+ // log, and disconnect if this fails
+ if (NPT_FAILED(m_Stream->WriteString(msg))) {
+ m_Stream = NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogUdpHandler::Create
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_LogUdpHandler::Create(const char* logger_name, NPT_LogHandler*& handler)
+{
+ /* compute a prefix for the configuration of this handler */
+ NPT_String logger_prefix = logger_name;
+ logger_prefix += ".UdpHandler";
+
+ /* allocate a new object */
+ NPT_LogUdpHandler* instance = new NPT_LogUdpHandler();
+ handler = instance;
+
+ /* configure the object */
+ const char* hostname = "localhost";
+ const NPT_String* hostname_prop = LogManager.GetConfigValue(logger_prefix, ".hostname");
+ if (hostname_prop) {
+ hostname = hostname_prop->GetChars();
+ }
+ NPT_UInt32 port = NPT_LOG_UDP_HANDLER_DEFAULT_PORT;
+ const NPT_String* port_prop = LogManager.GetConfigValue(logger_prefix, ".port");
+ if (port_prop) {
+ if (NPT_FAILED(port_prop->ToInteger(port, true))) {
+ port = NPT_LOG_UDP_HANDLER_DEFAULT_PORT;
+ }
+ }
+
+ // resolve the target hostname
+ NPT_IpAddress target_ip;
+ target_ip.ResolveName(hostname);
+ instance->m_Target.SetIpAddress(target_ip);
+ instance->m_Target.SetPort(port);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_LogUdpHandler::Log
++---------------------------------------------------------------------*/
+void
+NPT_LogUdpHandler::Log(const NPT_LogRecord& record)
+{
+ // format the record
+ NPT_String msg;
+ NPT_LogTcpHandler::FormatRecord(record, msg);
+
+ // send it in a datagram
+ NPT_DataBuffer buffer(msg.GetChars(), msg.GetLength()+1, false);
+ m_Socket.Send(buffer, &m_Target);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpLoggerConfigurator::NPT_HttpLoggerConfigurator
++---------------------------------------------------------------------*/
+NPT_HttpLoggerConfigurator::NPT_HttpLoggerConfigurator(NPT_UInt16 port, bool detached) :
+ NPT_Thread(detached)
+{
+ // create the server
+ m_Server = new NPT_HttpServer(port);
+
+ // attach a handler to response to the requests
+ m_Server->AddRequestHandler(this, "/", true);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpLoggerConfigurator::~NPT_HttpLoggerConfigurator
++---------------------------------------------------------------------*/
+NPT_HttpLoggerConfigurator::~NPT_HttpLoggerConfigurator()
+{
+ // TODO: send a command to the server to tell it to abort
+
+ // cleanup
+ delete m_Server;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpLoggerConfigurator::SetupResponse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HttpLoggerConfigurator::SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response)
+{
+ // we only support GET here
+ if (request.GetMethod() != NPT_HTTP_METHOD_GET) return NPT_ERROR_HTTP_METHOD_NOT_SUPPORTED;
+
+ // construct the response message
+ NPT_String msg;
+
+ msg = "<ul>";
+ NPT_List<NPT_LogConfigEntry>& config = LogManager.GetConfig();
+ NPT_List<NPT_LogConfigEntry>::Iterator cit = config.GetFirstItem();
+ for (; cit; ++cit) {
+ NPT_LogConfigEntry& entry = (*cit);
+ msg += "<li>";
+ msg += entry.m_Key;
+ msg += "=";
+ msg += entry.m_Value;
+ msg += "</li>";
+ }
+ msg += "</ul>";
+
+ msg += "<ul>";
+ NPT_List<NPT_Logger*>& loggers = LogManager.GetLoggers();
+ NPT_List<NPT_Logger*>::Iterator lit = loggers.GetFirstItem();
+ for (;lit;++lit) {
+ NPT_Logger* logger = (*lit);
+ msg += "<li>";
+ msg += logger->GetName();
+ msg += ", level=";
+ msg += NPT_String::FromInteger(logger->GetLevel());
+
+ NPT_List<NPT_LogHandler*>& handlers = logger->GetHandlers();
+ NPT_List<NPT_LogHandler*>::Iterator hit = handlers.GetFirstItem();
+ msg += ", handlers=";
+ for (;hit;++hit) {
+ NPT_LogHandler* handler = (*hit);
+ msg += handler->ToString();
+ }
+ msg += "</li>";
+ }
+ msg += "</ul>";
+
+ // setup the response body
+ NPT_HttpEntity* entity = response.GetEntity();
+ entity->SetContentType("text/html");
+ entity->SetInputStream(msg);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HttpLoggerConfigurator::Run
++---------------------------------------------------------------------*/
+void
+NPT_HttpLoggerConfigurator::Run()
+{
+ for (;;) {
+ NPT_Result result;
+ result = m_Server->Loop();
+ if (NPT_FAILED(result)) {
+ NPT_LOG_FINE_1("server exits with status %d", result);
+ break;
+ }
+ }
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptLogging.h b/lib/libUPnP/Neptune/Source/Core/NptLogging.h
new file mode 100644
index 0000000000..44ac630518
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptLogging.h
@@ -0,0 +1,512 @@
+/*****************************************************************
+|
+| Neptune - Logging Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+/** @file
+* Header file for logging
+*/
+
+#ifndef _NPT_LOGGING_H_
+#define _NPT_LOGGING_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptDebug.h"
+#include "NptTypes.h"
+#include "NptTime.h"
+#include "NptStrings.h"
+#include "NptList.h"
+#include "NptStreams.h"
+#include "NptThreads.h"
+#include "NptHttp.h"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_LogManager;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+class NPT_LogRecord {
+public:
+ const char* m_LoggerName;
+ int m_Level;
+ const char* m_Message;
+ NPT_TimeStamp m_TimeStamp;
+ const char* m_SourceFile;
+ unsigned int m_SourceLine;
+ const char* m_SourceFunction;
+};
+
+class NPT_LogHandler {
+public:
+ // class methods
+ static NPT_Result Create(const char* logger_name,
+ const char* handler_name,
+ NPT_LogHandler*& handler);
+
+ // methods
+ virtual ~NPT_LogHandler() {}
+ virtual void Log(const NPT_LogRecord& record) = 0;
+ virtual NPT_String ToString() { return ""; }
+};
+
+class NPT_Logger {
+public:
+ // methods
+ NPT_Logger(const char* name, NPT_LogManager& manager);
+ ~NPT_Logger();
+ void Log(int level,
+ const char* source_file,
+ unsigned int source_line,
+ const char* source_function,
+ const char* msg,
+ ...);
+
+ NPT_Result AddHandler(NPT_LogHandler* handler);
+ NPT_Result DeleteHandlers();
+ NPT_Result SetParent(NPT_Logger* parent);
+ const NPT_String& GetName() const { return m_Name; }
+ int GetLevel() const { return m_Level; }
+ bool GetForwardToParent() const { return m_ForwardToParent; }
+ NPT_List<NPT_LogHandler*>& GetHandlers() { return m_Handlers; }
+
+private:
+ // members
+ NPT_LogManager& m_Manager;
+ NPT_String m_Name;
+ int m_Level;
+ bool m_LevelIsInherited;
+ bool m_ForwardToParent;
+ NPT_Logger* m_Parent;
+ NPT_List<NPT_LogHandler*> m_Handlers;
+
+ // friends
+ friend class NPT_LogManager;
+};
+
+typedef struct {
+ NPT_Logger* logger;
+ const char* name;
+} NPT_LoggerReference;
+
+class NPT_Log {
+public:
+ // class methods
+ static int GetLogLevel(const char* name);
+ static const char* GetLogLevelName(int level);
+ static const char* GetLogLevelAnsiColor(int level);
+ static void FormatRecordToStream(const NPT_LogRecord& record,
+ NPT_OutputStream& stream,
+ bool use_colors,
+ NPT_Flags format_filter);
+};
+
+class NPT_LogConfigEntry {
+public:
+ NPT_LogConfigEntry(const char* key, const char* value) :
+ m_Key(key), m_Value(value) {}
+ NPT_String m_Key;
+ NPT_String m_Value;
+};
+
+class NPT_LogManager {
+public:
+ // class methods
+ static NPT_LogManager& GetDefault();
+ static bool ConfigValueIsBooleanTrue(NPT_String& value);
+ static bool ConfigValueIsBooleanFalse(NPT_String& value);
+ static NPT_Logger* GetLogger(const char* name);
+
+ // methods
+ NPT_LogManager();
+ ~NPT_LogManager();
+ NPT_Result Configure(const char* config_sources = NULL);
+ NPT_String* GetConfigValue(const char* prefix, const char* suffix);
+ NPT_List<NPT_Logger*>& GetLoggers() { return m_Loggers; }
+ NPT_List<NPT_LogConfigEntry>& GetConfig() { return m_Config; }
+ void Enable(bool value) { m_Enabled = value; }
+ void Lock() { m_Lock.Lock(); }
+ void Unlock() { m_Lock.Unlock(); }
+
+private:
+ // methods
+ NPT_Result SetConfigValue(const char* key, const char* value);
+ NPT_Result ParseConfig(const char* config, NPT_Size config_size);
+ NPT_Result ParseConfigSource(NPT_String& source);
+ NPT_Result ParseConfigFile(const char* filename);
+ bool HaveLoggerConfig(const char* name);
+ NPT_Logger* FindLogger(const char* name);
+ NPT_Result ConfigureLogger(NPT_Logger* logger);
+
+ // members
+ NPT_Mutex m_Lock;
+ volatile bool m_Enabled;
+ volatile bool m_Configured;
+ volatile bool m_Configuring;
+ NPT_List<NPT_LogConfigEntry> m_Config;
+ NPT_List<NPT_Logger*> m_Loggers;
+ NPT_Logger* m_Root;
+};
+
+const unsigned short NPT_HTTP_LOGGER_CONFIGURATOR_DEFAULT_PORT = 6378;
+class NPT_HttpLoggerConfigurator : NPT_HttpRequestHandler, public NPT_Thread {
+public:
+ // constructor and destructor
+ NPT_HttpLoggerConfigurator(NPT_UInt16 port = NPT_HTTP_LOGGER_CONFIGURATOR_DEFAULT_PORT,
+ bool detached = true);
+ virtual ~NPT_HttpLoggerConfigurator();
+
+ // NPT_Runnable (NPT_Thread) methods
+ virtual void Run();
+
+private:
+ // NPT_HttpRequestHandler methods
+ virtual NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response);
+
+ // members
+ NPT_HttpServer* m_Server;
+};
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_LOG_LEVEL_FATAL 700
+#define NPT_LOG_LEVEL_SEVERE 600
+#define NPT_LOG_LEVEL_WARNING 500
+#define NPT_LOG_LEVEL_INFO 400
+#define NPT_LOG_LEVEL_FINE 300
+#define NPT_LOG_LEVEL_FINER 200
+#define NPT_LOG_LEVEL_FINEST 100
+
+#define NPT_LOG_LEVEL_OFF 32767
+#define NPT_LOG_LEVEL_ALL 0
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define NPT_LOG_GET_LOGGER(_logger) \
+ if ((_logger).logger == NULL) { \
+ (_logger).logger = NPT_LogManager::GetLogger((_logger).name); \
+ }
+
+#if defined(NPT_CONFIG_ENABLE_LOGGING)
+
+#define NPT_DEFINE_LOGGER(_logger, _name) static NPT_LoggerReference _logger = { NULL, (_name) };
+
+#define NPT_LOG_X(_logger, _level, _argsx) \
+do { \
+ NPT_LOG_GET_LOGGER((_logger)) \
+ if ((_logger).logger && (_level) >= (_logger).logger->GetLevel()) { \
+ (_logger).logger->Log _argsx; \
+ } \
+} while(0)
+
+#define NPT_CHECK_LL(_logger, _level, _result) do { \
+ NPT_Result _x = (_result); \
+ if (_x != NPT_SUCCESS) { \
+ NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),"NPT_CHECK failed, result=%d (%s) [%s]", _x, NPT_ResultText(_x), #_result)); \
+ return _x; \
+ } \
+} while(0)
+
+#define NPT_CHECK_LABEL_LL(_logger, _level, _result, _label) do { \
+ NPT_Result _x = (_result); \
+ if (_x != NPT_SUCCESS) { \
+ NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),"NPT_CHECK failed, result=%d (%s) [%s]", _x, NPT_ResultText(_x), #_result)); \
+ goto _label; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER_LL(_logger, _level, _p) do { \
+ if ((_p) == NULL) { \
+ NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),"@@@ NULL pointer parameter")); \
+ return NPT_ERROR_INVALID_PARAMETERS; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER_LABEL_LL(_logger, _level, _p, _label) do { \
+ if ((_p) == NULL) { \
+ NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),"@@@ NULL pointer parameter")); \
+ goto _label; \
+ } \
+} while(0)
+
+#else /* NPT_CONFIG_ENABLE_LOGGING */
+
+#define NPT_DEFINE_LOGGER(_logger, _name)
+#define NPT_LOG_X(_logger, _level, _argsx)
+#define NPT_CHECK_LL(_logger, _level, _result) NPT_CHECK(_result)
+#define NPT_CHECK_LABEL_LL(_logger, _level, _result, _label) NPT_CHECK_LABEL((_result), _label)
+#define NPT_CHECK_POINTER_LL(_logger, _level, _p) NPT_CHECK_POINTER((_p))
+#define NPT_CHECK_POINTER_LABEL_LL(_logger, _level, _p, _label) NPT_CHECK_POINTER_LABEL((_p), _label)
+
+#endif /* NPT_CONFIG_ENABLE_LOGGING */
+
+#define NPT_SET_LOCAL_LOGGER(_name) NPT_DEFINE_LOGGER(_NPT_LocalLogger, (_name))
+#define NPT_CHECK_L(_level, _result) NPT_CHECK_LL(_NPT_LocalLogger, (_level), (_result))
+#define NPT_CHECK_LABEL_L(_level, _result, _label) NPT_CHECK_LABEL_LL(_NPT_LocalLogger, (_level), NULL, (_result), _label)
+
+/* NOTE: the following are machine-generated, do not edit */
+#define NPT_LOG_LL(_logger,_level,_msg) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg)))
+#define NPT_LOG(_level,_msg) NPT_LOG_LL((_NPT_LocalLogger),(_level),(_msg))
+#define NPT_LOG_L(_logger,_level,_msg) NPT_LOG_LL((_logger),(_level),(_msg))
+#define NPT_LOG_LL1(_logger,_level,_msg,_arg1) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1)))
+#define NPT_LOG_1(_level,_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),(_level),(_msg),(_arg1))
+#define NPT_LOG_L1(_logger,_level,_msg,_arg1) NPT_LOG_LL1((_logger),(_level),(_msg),(_arg1))
+#define NPT_LOG_LL2(_logger,_level,_msg,_arg1,_arg2) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2)))
+#define NPT_LOG_2(_level,_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2))
+#define NPT_LOG_L2(_logger,_level,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),(_level),(_msg),(_arg1),(_arg2))
+#define NPT_LOG_LL3(_logger,_level,_msg,_arg1,_arg2,_arg3) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3)))
+#define NPT_LOG_3(_level,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_L3(_logger,_level,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_LL4(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4)))
+#define NPT_LOG_4(_level,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_L4(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_LL5(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5)))
+#define NPT_LOG_5(_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_L5(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_LL6(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6)))
+#define NPT_LOG_6(_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_L6(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_LL7(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7)))
+#define NPT_LOG_7(_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_L7(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_LL8(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8)))
+#define NPT_LOG_8(_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_L8(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_LL9(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_X((_logger),(_level),((_level),__FILE__,__LINE__,(NPT_LocalFunctionName),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9)))
+#define NPT_LOG_9(_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_L9(_logger,_level,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),(_level),(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+
+#define NPT_LOG_FATAL(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg))
+#define NPT_LOG_FATAL_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_FATAL,(_msg))
+#define NPT_LOG_FATAL_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1))
+#define NPT_LOG_FATAL_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1))
+#define NPT_LOG_FATAL_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FATAL_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FATAL_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FATAL_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FATAL_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FATAL_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FATAL_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FATAL_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FATAL_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FATAL_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FATAL_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FATAL_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FATAL_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FATAL_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FATAL_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FATAL_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_FATAL,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_SEVERE(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg))
+#define NPT_LOG_SEVERE_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_SEVERE,(_msg))
+#define NPT_LOG_SEVERE_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1))
+#define NPT_LOG_SEVERE_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1))
+#define NPT_LOG_SEVERE_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_SEVERE_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_SEVERE_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_SEVERE_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_SEVERE_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_SEVERE_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_SEVERE_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_SEVERE_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_SEVERE_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_SEVERE_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_SEVERE_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_SEVERE_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_SEVERE_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_SEVERE_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_SEVERE_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_SEVERE_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_SEVERE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_WARNING(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg))
+#define NPT_LOG_WARNING_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_WARNING,(_msg))
+#define NPT_LOG_WARNING_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1))
+#define NPT_LOG_WARNING_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1))
+#define NPT_LOG_WARNING_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_WARNING_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_WARNING_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_WARNING_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_WARNING_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_WARNING_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_WARNING_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_WARNING_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_WARNING_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_WARNING_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_WARNING_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_WARNING_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_WARNING_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_WARNING_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_WARNING_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_WARNING_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_WARNING,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_INFO(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg))
+#define NPT_LOG_INFO_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_INFO,(_msg))
+#define NPT_LOG_INFO_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1))
+#define NPT_LOG_INFO_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1))
+#define NPT_LOG_INFO_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_INFO_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_INFO_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_INFO_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_INFO_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_INFO_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_INFO_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_INFO_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_INFO_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_INFO_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_INFO_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_INFO_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_INFO_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_INFO_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_INFO_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_INFO_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_INFO,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINE(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg))
+#define NPT_LOG_FINE_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_FINE,(_msg))
+#define NPT_LOG_FINE_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1))
+#define NPT_LOG_FINE_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1))
+#define NPT_LOG_FINE_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINE_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINE_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINE_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINE_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINE_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINE_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINE_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINE_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINE_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINE_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINE_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINE_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINE_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINE_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINE_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_FINE,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINER(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg))
+#define NPT_LOG_FINER_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_FINER,(_msg))
+#define NPT_LOG_FINER_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1))
+#define NPT_LOG_FINER_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1))
+#define NPT_LOG_FINER_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINER_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINER_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINER_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINER_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINER_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINER_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINER_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINER_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINER_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINER_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINER_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINER_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINER_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINER_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINER_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_FINER,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINEST(_msg) NPT_LOG_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg))
+#define NPT_LOG_FINEST_L(_logger,_msg) NPT_LOG_LL((_logger),NPT_LOG_LEVEL_FINEST,(_msg))
+#define NPT_LOG_FINEST_1(_msg,_arg1) NPT_LOG_LL1((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1))
+#define NPT_LOG_FINEST_L1(_logger,_msg,_arg1) NPT_LOG_LL1((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1))
+#define NPT_LOG_FINEST_2(_msg,_arg1,_arg2) NPT_LOG_LL2((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINEST_L2(_logger,_msg,_arg1,_arg2) NPT_LOG_LL2((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2))
+#define NPT_LOG_FINEST_3(_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINEST_L3(_logger,_msg,_arg1,_arg2,_arg3) NPT_LOG_LL3((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3))
+#define NPT_LOG_FINEST_4(_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINEST_L4(_logger,_msg,_arg1,_arg2,_arg3,_arg4) NPT_LOG_LL4((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4))
+#define NPT_LOG_FINEST_5(_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINEST_L5(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5) NPT_LOG_LL5((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5))
+#define NPT_LOG_FINEST_6(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINEST_L6(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6) NPT_LOG_LL6((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6))
+#define NPT_LOG_FINEST_7(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINEST_L7(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7) NPT_LOG_LL7((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7))
+#define NPT_LOG_FINEST_8(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINEST_L8(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8) NPT_LOG_LL8((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8))
+#define NPT_LOG_FINEST_9(_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+#define NPT_LOG_FINEST_L9(_logger,_msg,_arg1,_arg2,_arg3,_arg4,_arg5,_arg6,_arg7,_arg8,_arg9) NPT_LOG_LL9((_logger),NPT_LOG_LEVEL_FINEST,(_msg),(_arg1),(_arg2),(_arg3),(_arg4),(_arg5),(_arg6),(_arg7),(_arg8),(_arg9))
+
+#define NPT_CHECK_FATAL(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_result))
+#define NPT_CHECK_FATAL_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_FATAL,(_result))
+#define NPT_CHECK_SEVERE(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_result))
+#define NPT_CHECK_SEVERE_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_SEVERE,(_result))
+#define NPT_CHECK_WARNING(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_result))
+#define NPT_CHECK_WARNING_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_WARNING,(_result))
+#define NPT_CHECK_INFO(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_result))
+#define NPT_CHECK_INFO_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_INFO,(_result))
+#define NPT_CHECK_FINE(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_result))
+#define NPT_CHECK_FINE_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_FINE,(_result))
+#define NPT_CHECK_FINER(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_result))
+#define NPT_CHECK_FINER_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_FINER,(_result))
+#define NPT_CHECK_FINEST(_result) NPT_CHECK_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_result))
+#define NPT_CHECK_FINEST_L(_logger,_result) NPT_CHECK_LL((_logger),NPT_LOG_LEVEL_FINEST,(_result))
+
+#define NPT_CHECK_LABEL_FATAL(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_result),_label)
+#define NPT_CHECK_LABEL_FATAL_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_FATAL,(_result),_label)
+#define NPT_CHECK_LABEL_SEVERE(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_result),_label)
+#define NPT_CHECK_LABEL_SEVERE_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_SEVERE,(_result),_label)
+#define NPT_CHECK_LABEL_WARNING(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_result),_label)
+#define NPT_CHECK_LABEL_WARNING_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_WARNING,(_result),_label)
+#define NPT_CHECK_LABEL_INFO(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_result),_label)
+#define NPT_CHECK_LABEL_INFO_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_INFO,(_result),_label)
+#define NPT_CHECK_LABEL_FINE(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_result),_label)
+#define NPT_CHECK_LABEL_FINE_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_FINE,(_result),_label)
+#define NPT_CHECK_LABEL_FINER(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_result),_label)
+#define NPT_CHECK_LABEL_FINER_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_FINER,(_result),_label)
+#define NPT_CHECK_LABEL_FINEST(_result,_label) NPT_CHECK_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_result),_label)
+#define NPT_CHECK_LABEL_FINEST_L(_logger,_result,_label) NPT_CHECK_LABEL_LL((_logger),NPT_LOG_LEVEL_FINEST,(_result),_label)
+
+#define NPT_CHECK_POINTER_FATAL(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_p))
+#define NPT_CHECK_POINTER_FATAL_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_FATAL,(_p))
+#define NPT_CHECK_POINTER_SEVERE(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_p))
+#define NPT_CHECK_POINTER_SEVERE_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_SEVERE,(_p))
+#define NPT_CHECK_POINTER_WARNING(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_p))
+#define NPT_CHECK_POINTER_WARNING_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_WARNING,(_p))
+#define NPT_CHECK_POINTER_INFO(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_p))
+#define NPT_CHECK_POINTER_INFO_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_INFO,(_p))
+#define NPT_CHECK_POINTER_FINE(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_p))
+#define NPT_CHECK_POINTER_FINE_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_FINE,(_p))
+#define NPT_CHECK_POINTER_FINER(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_p))
+#define NPT_CHECK_POINTER_FINER_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_FINER,(_p))
+#define NPT_CHECK_POINTER_FINEST(_p) NPT_CHECK_POINTER_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_p))
+#define NPT_CHECK_POINTER_FINEST_L(_logger,_p) NPT_CHECK_POINTER_LL(_logger,NPT_LOG_LEVEL_FINEST,(_p))
+
+#define NPT_CHECK_POINTER_LABEL_FATAL(_p,_label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FATAL,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FATAL_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_FATAL,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_SEVERE(_p,_label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_SEVERE,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_SEVERE_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_SEVERE,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_WARNING(_p,_label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_WARNING,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_WARNING_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_WARNING,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_INFO(_p,_label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_INFO,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_INFO_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_INFO,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINE(_p, _label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINE,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINE_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_FINE,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINER(_p,_label) NPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINER,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINER_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_FINER,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINEST(_p,_label) NNPT_CHECK_POINTER_LABEL_LL((_NPT_LocalLogger),NPT_LOG_LEVEL_FINEST,(_p),_label)
+#define NPT_CHECK_POINTER_LABEL_FINEST_L(_logger,_p,_label) NPT_CHECK_POINTER_LABEL_LL(_logger,NPT_LOG_LEVEL_FINEST,(_p),_label)
+
+#endif /* _NPT_LOGGING_H_ */
diff --git a/lib/libUPnP/Neptune/Source/Core/NptMap.h b/lib/libUPnP/Neptune/Source/Core/NptMap.h
new file mode 100644
index 0000000000..dd1e337a34
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptMap.h
@@ -0,0 +1,330 @@
+/*****************************************************************
+|
+| Neptune - Maps
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+#ifndef _NPT_MAP_H_
+#define _NPT_MAP_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptResults.h"
+#include "NptList.h"
+
+/*----------------------------------------------------------------------
+| NPT_Map
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+class NPT_Map
+{
+public:
+ // types
+ class Entry {
+ public:
+ // constructor
+ Entry(const K& key, const V& value) : m_Key(key), m_Value(value) {}
+ Entry(const K& key) : m_Key(key) {}
+
+ // accessors
+ const K& GetKey() const { return m_Key; }
+ const V& GetValue() const { return m_Value; }
+
+ // operators
+ bool operator==(const Entry& other) const {
+ return m_Key == other.m_Key && m_Value == other.m_Value;
+ }
+
+ protected:
+ // methods
+ void SetValue(const V& value) { m_Value = value; }
+
+ // members
+ K m_Key;
+ V m_Value;
+
+ // friends
+ friend class NPT_Map<K,V>;
+ };
+
+ class EntryValueDeleter {
+ public:
+ void operator()(Entry* entry) const {
+ delete entry->GetValue();
+ }
+ };
+
+ // constructors
+ NPT_Map<K,V>() {}
+ NPT_Map<K,V>(const NPT_Map<K,V>& copy);
+
+ // destructor
+ ~NPT_Map<K,V>();
+
+ // methods
+ NPT_Result Put(const K& key, const V& value);
+ NPT_Result Get(const K& key, V*& value) const;
+ bool HasKey(const K& key) const { return GetEntry(key) != NULL; }
+ bool HasValue(const V& value) const;
+ NPT_Result Erase(const K& key);
+ NPT_Cardinal GetEntryCount() const { return m_Entries.GetItemCount(); }
+ const NPT_List<Entry*>& GetEntries() const { return m_Entries; }
+ NPT_Result Clear();
+
+ // operators
+ V& operator[](const K& key);
+ const NPT_Map<K,V>& operator=(const NPT_Map<K,V>& copy);
+ bool operator==(const NPT_Map<K,V>& other) const;
+ bool operator!=(const NPT_Map<K,V>& other) const;
+
+private:
+ // types
+ typedef typename NPT_List<Entry*>::Iterator ListIterator;
+
+ // methods
+ Entry* GetEntry(const K& key) const;
+
+ // members
+ NPT_List<Entry*> m_Entries;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::NPT_Map<K,V>
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+NPT_Map<K,V>::NPT_Map(const NPT_Map<K,V>& copy)
+{
+ *this = copy;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::~NPT_Map<K,V>
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+NPT_Map<K,V>::~NPT_Map()
+{
+ // call Clear to ensure we delete all entry objects
+ Clear();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::Clear
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+NPT_Result
+NPT_Map<K,V>::Clear()
+{
+ m_Entries.Apply(NPT_ObjectDeleter<Entry>());
+ m_Entries.Clear();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::GetEntry
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+typename NPT_Map<K,V>::Entry*
+NPT_Map<K,V>::GetEntry(const K& key) const
+{
+ typename NPT_List<Entry*>::Iterator entry = m_Entries.GetFirstItem();
+ while (entry) {
+ if ((*entry)->GetKey() == key) {
+ return *entry;
+ }
+ ++entry;
+ }
+
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::Put
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+NPT_Result
+NPT_Map<K,V>::Put(const K& key, const V& value)
+{
+ Entry* entry = GetEntry(key);
+ if (entry == NULL) {
+ // no existing entry for that key, create one
+ m_Entries.Add(new Entry(key, value));
+ } else {
+ // replace the existing entry for that key
+ entry->SetValue(value);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::Get
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+NPT_Result
+NPT_Map<K,V>::Get(const K& key, V*& value) const
+{
+ Entry* entry = GetEntry(key);
+ if (entry == NULL) {
+ // no existing entry for that key
+ value = NULL;
+ return NPT_ERROR_NO_SUCH_ITEM;
+ } else {
+ // found an entry with that key
+ value = &entry->m_Value;
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::HasValue
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+bool
+NPT_Map<K,V>::HasValue(const V& value) const
+{
+ ListIterator entry = m_Entries.GetFirstItem();
+ while (entry) {
+ if (value == (*entry)->m_Value) {
+ return true;
+ }
+ ++entry;
+ }
+
+ return false;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::operator=
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+const NPT_Map<K,V>&
+NPT_Map<K,V>::operator=(const NPT_Map<K,V>& copy)
+{
+ // do nothing if we're assigning to ourselves
+ if (this == &copy) return copy;
+
+ // destroy all entries
+ Clear();
+
+ // copy all entries one by one
+ ListIterator entry = copy.m_Entries.GetFirstItem();
+ while (entry) {
+ m_Entries.Add(new Entry((*entry)->GetKey(), (*entry)->GetValue()));
+ ++entry;
+ }
+
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::Erase
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+NPT_Result
+NPT_Map<K,V>::Erase(const K& key)
+{
+ ListIterator entry = m_Entries.GetFirstItem();
+ while (entry) {
+ if ((*entry)->GetKey() == key) {
+ delete *entry; // do this before removing the entry from the
+ // list, because Erase() will invalidate the
+ // iterator item
+ m_Entries.Erase(entry);
+ return NPT_SUCCESS;
+ }
+ ++entry;
+ }
+
+ return NPT_ERROR_NO_SUCH_ITEM;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::operator==
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+bool
+NPT_Map<K,V>::operator==(const NPT_Map<K,V>& other) const
+{
+ // quick test
+ if (m_Entries.GetItemCount() != other.m_Entries.GetItemCount()) return false;
+
+ // compare all entries to all other entries
+ ListIterator entry = m_Entries.GetFirstItem();
+ while (entry) {
+ V* value;
+ if (NPT_SUCCEEDED(other.Get((*entry)->m_Key, value))) {
+ // the other map has an entry for this key, check the value
+ if (!(*value == (*entry)->m_Value)) return false;
+ } else {
+ // the other map does not have an entry for this key
+ return false;
+ }
+ ++entry;
+ }
+
+ return true;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::operator!=
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+bool
+NPT_Map<K,V>::operator!=(const NPT_Map<K,V>& other) const
+{
+ return !(*this == other);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Map<K,V>::operator[]
++---------------------------------------------------------------------*/
+template <typename K, typename V>
+inline
+V&
+NPT_Map<K,V>::operator[](const K& key)
+{
+ Entry* entry = GetEntry(key);
+ if (entry == NULL) {
+ // create a new "default" entry for this key
+ entry = new Entry(key);
+ m_Entries.Add(entry);
+ }
+
+ return entry->m_Value;
+}
+
+#endif // _NPT_MAP_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptMessaging.cpp b/lib/libUPnP/Neptune/Source/Core/NptMessaging.cpp
new file mode 100644
index 0000000000..36be1edd83
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptMessaging.cpp
@@ -0,0 +1,51 @@
+/*****************************************************************
+|
+| Neptune - Messaging System
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptMessaging.h"
+#include "NptDynamicCast.h"
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(NPT_MessageHandler)
+NPT_Message::Type NPT_Message::MessageType = "Generic Message";
+
+/*----------------------------------------------------------------------
+| NPT_MessageHandler::HandleMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MessageHandler::HandleMessage(NPT_Message* message)
+{
+ return message->Dispatch(this);
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptMessaging.h b/lib/libUPnP/Neptune/Source/Core/NptMessaging.h
new file mode 100644
index 0000000000..72d5d4f57d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptMessaging.h
@@ -0,0 +1,176 @@
+/*****************************************************************
+|
+| Neptune - Messaging System
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_MESSAGING_H_
+#define _NPT_MESSAGING_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConstants.h"
+#include "NptTypes.h"
+#include "NptResults.h"
+#include "NptList.h"
+#include "NptDynamicCast.h"
+
+/*----------------------------------------------------------------------
+| forward references
++---------------------------------------------------------------------*/
+class NPT_Message;
+
+/*----------------------------------------------------------------------
+| NPT_MessageHandler
++---------------------------------------------------------------------*/
+class NPT_MessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(NPT_MessageHandler)
+
+ // methods
+ virtual ~NPT_MessageHandler() {}
+
+ // default message handler
+ virtual void OnMessage(NPT_Message*) {}
+
+ // this method is a central point of handling for received messages.
+ // it can be overloaded by subclasses who wish to process all
+ // incoming messages
+ virtual NPT_Result HandleMessage(NPT_Message* message);
+};
+
+/*----------------------------------------------------------------------
+| NPT_Messsage
++---------------------------------------------------------------------*/
+class NPT_Message
+{
+public:
+ // types
+ typedef const char* Type;
+
+ // static members
+ static Type MessageType;
+
+ // methods
+ virtual ~NPT_Message() {}
+ virtual Type GetType() { return MessageType; }
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ return DefaultDeliver(handler);
+ }
+ // this method should really be called 'Deliver', but this would
+ // cause a problem when subclasses overload it
+ virtual NPT_Result DefaultDeliver(NPT_MessageHandler* handler) {
+ handler->OnMessage(this);
+ return NPT_SUCCESS;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_TerminateMesssage
++---------------------------------------------------------------------*/
+class NPT_TerminateMessage : public NPT_Message
+{
+ public:
+ // methods
+ NPT_Result Dispatch(NPT_MessageHandler* /*handler*/) {
+ return NPT_ERROR_TERMINATED;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_MessageQueue
++---------------------------------------------------------------------*/
+class NPT_MessageQueue
+{
+ public:
+ // methods
+ virtual ~NPT_MessageQueue() {}
+ virtual NPT_Result PumpMessage(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+ virtual NPT_Result QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_MessageReceiver
++---------------------------------------------------------------------*/
+class NPT_MessageReceiver
+{
+public:
+ // methods
+ NPT_MessageReceiver() : m_Queue(NULL), m_Handler(NULL) {}
+ NPT_MessageReceiver(NPT_MessageHandler* handler) :
+ m_Queue(NULL), m_Handler(handler) {}
+ NPT_MessageReceiver(NPT_MessageQueue* queue) :
+ m_Queue(queue), m_Handler(NULL) {}
+ NPT_MessageReceiver(NPT_MessageHandler* handler,
+ NPT_MessageQueue* queue) :
+ m_Queue(queue), m_Handler(handler) {}
+ virtual ~NPT_MessageReceiver() {}
+ NPT_Result SetQueue(NPT_MessageQueue* queue) {
+ m_Queue = queue;
+ return NPT_SUCCESS;
+ }
+ NPT_Result SetHandler(NPT_MessageHandler* handler) {
+ m_Handler = handler;
+ return NPT_SUCCESS;
+ }
+ virtual NPT_Result PostMessage(NPT_Message* message) {
+ if (m_Queue) {
+ return m_Queue->QueueMessage(message, m_Handler);
+ } else {
+ return NPT_FAILURE;
+ }
+ }
+
+protected:
+ // members
+ NPT_MessageQueue* m_Queue;
+ NPT_MessageHandler* m_Handler;
+};
+
+/*----------------------------------------------------------------------
+| NPT_MessageBroadcaster
++---------------------------------------------------------------------*/
+class NPT_MessageBroadcaster
+{
+public:
+ // methods
+ NPT_MessageBroadcaster(NPT_Message* message) : m_Message(message) {}
+ NPT_Result operator()(NPT_MessageReceiver*& receiver) const {
+ receiver->PostMessage(m_Message);
+ return NPT_SUCCESS;
+ }
+
+private:
+ // members
+ NPT_Message* m_Message;
+};
+
+#endif // _NPT_MESSAGING_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptNetwork.cpp b/lib/libUPnP/Neptune/Source/Core/NptNetwork.cpp
new file mode 100644
index 0000000000..e7fbbb430c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptNetwork.cpp
@@ -0,0 +1,256 @@
+/*****************************************************************
+|
+| Neptune - Network
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptSockets.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::Any
++---------------------------------------------------------------------*/
+const NPT_IpAddress NPT_IpAddress::Any;
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::NPT_IpAddress
++---------------------------------------------------------------------*/
+NPT_IpAddress::NPT_IpAddress()
+{
+ m_Address[0] = m_Address[1] = m_Address[2] = m_Address[3] = 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::NPT_IpAddress
++---------------------------------------------------------------------*/
+NPT_IpAddress::NPT_IpAddress(unsigned long address)
+{
+ Set(address);
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_IpAddress::Parse(const char* name)
+{
+ // check the name
+ if (name == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // clear the address
+ m_Address[0] = m_Address[1] = m_Address[2] = m_Address[3] = 0;
+
+ // parse
+ unsigned int fragment;
+ bool fragment_empty = true;
+ unsigned char address[4];
+ unsigned int accumulator;
+ for (fragment = 0, accumulator = 0; fragment < 4; ++name) {
+ if (*name == '\0' || *name == '.') {
+ // fragment terminator
+ if (fragment_empty) return NPT_ERROR_INVALID_SYNTAX;
+ address[fragment++] = accumulator;
+ if (*name == '\0') break;
+ accumulator = 0;
+ fragment_empty = true;
+ } else if (*name >= '0' && *name <= '9') {
+ // numerical character
+ accumulator = accumulator*10 + (*name - '0');
+ if (accumulator > 255) return NPT_ERROR_INVALID_SYNTAX;
+ fragment_empty = false;
+ } else {
+ // invalid character
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ }
+
+ if (fragment == 4 && *name == '\0' && !fragment_empty) {
+ m_Address[0] = address[0];
+ m_Address[1] = address[1];
+ m_Address[2] = address[2];
+ m_Address[3] = address[3];
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::AsLong
++---------------------------------------------------------------------*/
+unsigned long
+NPT_IpAddress::AsLong() const
+{
+ return
+ (((unsigned long)m_Address[0])<<24) |
+ (((unsigned long)m_Address[1])<<16) |
+ (((unsigned long)m_Address[2])<< 8) |
+ (((unsigned long)m_Address[3]));
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::AsBytes
++---------------------------------------------------------------------*/
+const unsigned char*
+NPT_IpAddress::AsBytes() const
+{
+ return m_Address;
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_IpAddress::ToString() const
+{
+ NPT_String address;
+ address.Reserve(16);
+ address += NPT_String::FromInteger(m_Address[0]);
+ address += '.';
+ address += NPT_String::FromInteger(m_Address[1]);
+ address += '.';
+ address += NPT_String::FromInteger(m_Address[2]);
+ address += '.';
+ address += NPT_String::FromInteger(m_Address[3]);
+
+ return address;
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::Set
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_IpAddress::Set(const unsigned char bytes[4])
+{
+ m_Address[0] = bytes[0];
+ m_Address[1] = bytes[1];
+ m_Address[2] = bytes[2];
+ m_Address[3] = bytes[3];
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::Set
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_IpAddress::Set(unsigned long address)
+{
+ m_Address[0] = (unsigned char)((address >> 24) & 0xFF);
+ m_Address[1] = (unsigned char)((address >> 16) & 0xFF);
+ m_Address[2] = (unsigned char)((address >> 8) & 0xFF);
+ m_Address[3] = (unsigned char)((address ) & 0xFF);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::operator==
++---------------------------------------------------------------------*/
+bool
+NPT_IpAddress::operator==(const NPT_IpAddress& other) const
+{
+ return other.AsLong() == AsLong();
+}
+
+/*----------------------------------------------------------------------
+| NPT_MacAddress::NPT_MacAddress
++---------------------------------------------------------------------*/
+NPT_MacAddress::NPT_MacAddress(Type type,
+ const unsigned char* address,
+ unsigned int length)
+{
+ SetAddress(type, address, length);
+}
+
+/*----------------------------------------------------------------------
+| NPT_MacAddress::SetAddress
++---------------------------------------------------------------------*/
+void
+NPT_MacAddress::SetAddress(Type type,
+ const unsigned char* address,
+ unsigned int length)
+{
+ m_Type = type;
+ if (length > NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH) {
+ length = NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH;
+ }
+ m_Length = length;
+ for (unsigned int i=0; i<length; i++) {
+ m_Address[i] = address[i];
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_MacAddress::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_MacAddress::ToString() const
+{
+ NPT_String result;
+
+ if (m_Length) {
+ char s[3*NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH];
+ const char hex[17] = "0123456789abcdef";
+ for (unsigned int i=0; i<m_Length; i++) {
+ s[i*3 ] = hex[m_Address[i]>>4];
+ s[i*3+1] = hex[m_Address[i]&0xf];
+ s[i*3+2] = ':';
+ }
+ s[3*m_Length-1] = '\0';
+ result = s;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::NPT_NetworkInterface
++---------------------------------------------------------------------*/
+NPT_NetworkInterface::NPT_NetworkInterface(const char* name,
+ const NPT_MacAddress& mac,
+ NPT_Flags flags) :
+ m_Name(name),
+ m_MacAddress(mac),
+ m_Flags(flags)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::AddAddress
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::AddAddress(const NPT_NetworkInterfaceAddress& address)
+{
+ return m_Addresses.Add(address);
+}
+
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptNetwork.h b/lib/libUPnP/Neptune/Source/Core/NptNetwork.h
new file mode 100644
index 0000000000..ca5dc4637a
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptNetwork.h
@@ -0,0 +1,228 @@
+/*****************************************************************
+|
+| Neptune - Network
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_NETWORK_H_
+#define _NPT_NETWORK_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptStrings.h"
+#include "NptList.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH = 8;
+
+/*----------------------------------------------------------------------
+| flags
++---------------------------------------------------------------------*/
+#define NPT_NETWORK_INTERFACE_FLAG_LOOPBACK 0x01
+#define NPT_NETWORK_INTERFACE_FLAG_PROMISCUOUS 0x02
+#define NPT_NETWORK_INTERFACE_FLAG_BROADCAST 0x04
+#define NPT_NETWORK_INTERFACE_FLAG_MULTICAST 0x08
+#define NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT 0x10
+
+/*----------------------------------------------------------------------
+| workarounds
++---------------------------------------------------------------------*/
+#if defined(_WIN32)
+#if defined(SetPort)
+#undef SetPort
+#endif
+#endif
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef unsigned int NPT_IpPort;
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress
++---------------------------------------------------------------------*/
+class NPT_IpAddress
+{
+public:
+ // class members
+ static const NPT_IpAddress Any;
+
+ // constructors and destructor
+ NPT_IpAddress();
+ NPT_IpAddress(unsigned long address);
+
+ // methods
+ NPT_Result ResolveName(const char* name,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ NPT_Result Parse(const char* name);
+ NPT_Result Set(unsigned long address);
+ NPT_Result Set(const unsigned char bytes[4]);
+ const unsigned char* AsBytes() const;
+ unsigned long AsLong() const;
+ NPT_String ToString() const;
+
+ // operators
+ bool operator==(const NPT_IpAddress& other) const;
+
+private:
+ // members
+ unsigned char m_Address[4];
+};
+
+/*----------------------------------------------------------------------
+| NPT_MacAddress
++---------------------------------------------------------------------*/
+class NPT_MacAddress
+{
+public:
+ // typedef enum
+ typedef enum {
+ TYPE_UNKNOWN,
+ TYPE_LOOPBACK,
+ TYPE_ETHERNET,
+ TYPE_PPP,
+ TYPE_IEEE_802_11
+ } Type;
+
+ // constructors and destructor
+ NPT_MacAddress() : m_Type(TYPE_UNKNOWN), m_Length(0) {}
+ NPT_MacAddress(Type type,
+ const unsigned char* addr,
+ unsigned int length);
+
+ // methods
+ void SetAddress(Type type, const unsigned char* addr,
+ unsigned int length);
+ Type GetType() const { return m_Type; }
+ const unsigned char* GetAddress() const { return m_Address; }
+ unsigned int GetLength() const { return m_Length; }
+ NPT_String ToString() const;
+
+private:
+ // members
+ Type m_Type;
+ unsigned char m_Address[NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH];
+ unsigned int m_Length;
+};
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterfaceAddress
++---------------------------------------------------------------------*/
+class NPT_NetworkInterfaceAddress
+{
+public:
+ // constructors and destructor
+ NPT_NetworkInterfaceAddress(const NPT_IpAddress& primary,
+ const NPT_IpAddress& broadcast,
+ const NPT_IpAddress& destination,
+ const NPT_IpAddress& netmask) :
+ m_PrimaryAddress(primary),
+ m_BroadcastAddress(broadcast),
+ m_DestinationAddress(destination),
+ m_NetMask(netmask) {}
+
+ // methods
+ const NPT_IpAddress& GetPrimaryAddress() const {
+ return m_PrimaryAddress;
+ }
+ const NPT_IpAddress& GetBroadcastAddress() const {
+ return m_BroadcastAddress;
+ }
+ const NPT_IpAddress& GetDestinationAddress() const {
+ return m_DestinationAddress;
+ }
+ const NPT_IpAddress& GetNetMask() const {
+ return m_NetMask;
+ }
+
+ bool IsAddressInNetwork(const NPT_IpAddress& adress) {
+ if (m_PrimaryAddress.AsLong() == adress.AsLong()) return true;
+ if (m_NetMask.AsLong() == 0) return false;
+ return (m_PrimaryAddress.AsLong() & m_NetMask.AsLong()) == (adress.AsLong() & m_NetMask.AsLong());
+ }
+
+private:
+ // members
+ NPT_IpAddress m_PrimaryAddress;
+ NPT_IpAddress m_BroadcastAddress;
+ NPT_IpAddress m_DestinationAddress;
+ NPT_IpAddress m_NetMask;
+};
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface
++---------------------------------------------------------------------*/
+class NPT_NetworkInterface
+{
+public:
+ // class methods
+ static NPT_Result GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces);
+
+ // constructors and destructor
+ NPT_NetworkInterface(const char* name,
+ const NPT_MacAddress& mac,
+ NPT_Flags flags);
+ ~NPT_NetworkInterface() {}
+
+ // methods
+ NPT_Result AddAddress(const NPT_NetworkInterfaceAddress& address);
+ const NPT_String& GetName() const {
+ return m_Name;
+ }
+ const NPT_MacAddress& GetMacAddress() const {
+ return m_MacAddress;
+ }
+ NPT_Flags GetFlags() const { return m_Flags; }
+ const NPT_List<NPT_NetworkInterfaceAddress>& GetAddresses() const {
+ return m_Addresses;
+ }
+
+ bool IsAddressInNetwork(const NPT_IpAddress& address) {
+ NPT_List<NPT_NetworkInterfaceAddress>::Iterator iter = m_Addresses.GetFirstItem();
+ while (iter) {
+ if ((*iter).IsAddressInNetwork(address)) return true;
+ ++iter;
+ }
+ return false;
+ }
+
+private:
+ // members
+ NPT_String m_Name;
+ NPT_MacAddress m_MacAddress;
+ NPT_Flags m_Flags;
+ NPT_List<NPT_NetworkInterfaceAddress> m_Addresses;
+};
+
+
+#endif // _NPT_NETWORK_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptQueue.cpp b/lib/libUPnP/Neptune/Source/Core/NptQueue.cpp
new file mode 100644
index 0000000000..bd68ad26b0
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptQueue.cpp
@@ -0,0 +1,36 @@
+/*****************************************************************
+|
+| Neptune - Queue
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptQueue.h"
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptQueue.h b/lib/libUPnP/Neptune/Source/Core/NptQueue.h
new file mode 100644
index 0000000000..b1532351c7
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptQueue.h
@@ -0,0 +1,96 @@
+/*****************************************************************
+|
+| Neptune - Queue
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_QUEUE_H_
+#define _NPT_QUEUE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| NPT_QueueItem
++---------------------------------------------------------------------*/
+class NPT_QueueItem;
+
+/*----------------------------------------------------------------------
+| NPT_GenericQueue
++---------------------------------------------------------------------*/
+class NPT_GenericQueue
+{
+ public:
+ // class methods
+ static NPT_GenericQueue* CreateInstance(NPT_Cardinal max_items = 0);
+
+ // methods
+ virtual ~NPT_GenericQueue() {}
+ virtual NPT_Result Push(NPT_QueueItem* item,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+ virtual NPT_Result Pop(NPT_QueueItem*& item,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+ virtual NPT_Result Peek(NPT_QueueItem*& item,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+ protected:
+ // methods
+ NPT_GenericQueue() {}
+};
+
+/*----------------------------------------------------------------------
+| NPT_Queue
++---------------------------------------------------------------------*/
+template <class T>
+class NPT_Queue
+{
+ public:
+ // methods
+ NPT_Queue(NPT_Cardinal max_items = 0) :
+ m_Delegate(NPT_GenericQueue::CreateInstance(max_items)) {}
+ virtual ~NPT_Queue<T>() { delete m_Delegate; }
+ virtual NPT_Result Push(T* item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->Push(reinterpret_cast<NPT_QueueItem*>(item), timeout);
+ }
+ virtual NPT_Result Pop(T*& item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->Pop(reinterpret_cast<NPT_QueueItem*&>(item),
+ timeout);
+ }
+ virtual NPT_Result Peek(T*& item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->Peek(reinterpret_cast<NPT_QueueItem*&>(item),
+ timeout);
+ }
+
+ protected:
+ // members
+ NPT_GenericQueue* m_Delegate;
+};
+
+#endif // _NPT_QUEUE_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptReferences.h b/lib/libUPnP/Neptune/Source/Core/NptReferences.h
new file mode 100644
index 0000000000..94085ce3da
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptReferences.h
@@ -0,0 +1,146 @@
+/*****************************************************************
+|
+| Neptune - References
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+#ifndef _NPT_REFERENCES_H_
+#define _NPT_REFERENCES_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| NPT_Reference
++---------------------------------------------------------------------*/
+template <typename T>
+class NPT_Reference
+{
+public:
+ // constructors and destructor
+ NPT_Reference() : m_Object(NULL), m_Counter(NULL) {}
+ explicit NPT_Reference(T* object) :
+ m_Object(object), m_Counter(object?new NPT_Cardinal(1):NULL) {}
+
+ NPT_Reference(const NPT_Reference<T>& ref) :
+ m_Object(ref.m_Object), m_Counter(ref.m_Counter) {
+ if (m_Counter) ++(*m_Counter);
+ }
+
+ // this methods should be private, but this causes a problem on some
+ // compilers, because we need this function in order to implement
+ // the cast operator operator NPT_Reference<U>() below, which would
+ // have to be marked as a friend, and friend declarations with the
+ // same class name confuses some compilers
+ NPT_Reference(T* object, NPT_Cardinal* counter) :
+ m_Object(object), m_Counter(counter) {
+ if (m_Counter) ++(*m_Counter);
+ }
+
+ ~NPT_Reference() {
+ Release();
+ }
+
+ // overloaded operators
+ NPT_Reference<T>& operator=(const NPT_Reference<T>& ref) {
+ if (this != &ref) {
+ Release();
+ m_Object = ref.m_Object;
+ m_Counter = ref.m_Counter;
+ if (m_Counter) ++(*m_Counter);
+ }
+ return *this;
+ }
+ NPT_Reference<T>& operator=(T* object) {
+ Release();
+ m_Object = object;
+ m_Counter = object?new NPT_Cardinal(1):NULL;
+ return *this;
+ }
+ T& operator*() const { return *m_Object; }
+ T* operator->() const { return m_Object; }
+
+ bool operator==(const NPT_Reference<T>& ref) const {
+ return m_Object == ref.m_Object;
+ }
+ bool operator!=(const NPT_Reference<T>& ref) const {
+ return m_Object != ref.m_Object;
+ }
+
+ // overloaded cast operators
+ template <typename U> operator NPT_Reference<U>() {
+ return NPT_Reference<U>(m_Object, m_Counter);
+ }
+
+ // methods
+ /**
+ * Returns the naked pointer value.
+ */
+ T* AsPointer() const { return m_Object; }
+
+ /**
+ * Returns the reference counter value.
+ */
+ NPT_Cardinal GetCounter() const { return *m_Counter; }
+
+ /**
+ * Returns wether this references a NULL object.
+ */
+ bool IsNull() const { return m_Object == NULL; }
+
+ /**
+ * Detach the reference from the shared object.
+ * The reference count is decremented, but the object is not deleted if the
+ * reference count becomes 0.
+ * After the method returns, this reference does not point to any shared object.
+ */
+ void Detach() {
+ if (m_Counter && --(*m_Counter) == 0) {
+ delete m_Counter;
+ }
+ m_Counter = NULL;
+ m_Object = NULL;
+ }
+
+private:
+ // methods
+ void Release() {
+ if (m_Counter && --(*m_Counter) == 0) {
+ delete m_Counter; m_Counter = NULL;
+ delete m_Object; m_Object = NULL;
+ }
+ }
+
+ // members
+ T* m_Object;
+ NPT_Cardinal* m_Counter;
+};
+
+#endif // _NPT_REFERENCES_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptResults.cpp b/lib/libUPnP/Neptune/Source/Core/NptResults.cpp
new file mode 100644
index 0000000000..b16ae08573
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptResults.cpp
@@ -0,0 +1,116 @@
+
+/*****************************************************************
+|
+| Neptune - Result Code Map
+|
+| This file is automatically generated by a script, do not edit!
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| NPT_ResultText
++---------------------------------------------------------------------*/
+const char*
+NPT_ResultText(NPT_Result result)
+{
+ switch (result) {
+ case NPT_SUCCESS: return "SUCCESS";
+ case NPT_FAILURE: return "FAILURE";
+
+ case NPT_ERROR_INVALID_PARAMETERS: return "NPT_ERROR_INVALID_PARAMETERS";
+ case NPT_ERROR_PERMISSION_DENIED: return "NPT_ERROR_PERMISSION_DENIED";
+ case NPT_ERROR_OUT_OF_MEMORY: return "NPT_ERROR_OUT_OF_MEMORY";
+ case NPT_ERROR_NO_SUCH_NAME: return "NPT_ERROR_NO_SUCH_NAME";
+ case NPT_ERROR_NO_SUCH_PROPERTY: return "NPT_ERROR_NO_SUCH_PROPERTY";
+ case NPT_ERROR_NO_SUCH_ITEM: return "NPT_ERROR_NO_SUCH_ITEM";
+ case NPT_ERROR_NO_SUCH_CLASS: return "NPT_ERROR_NO_SUCH_CLASS";
+ case NPT_ERROR_OVERFLOW: return "NPT_ERROR_OVERFLOW";
+ case NPT_ERROR_INTERNAL: return "NPT_ERROR_INTERNAL";
+ case NPT_ERROR_INVALID_STATE: return "NPT_ERROR_INVALID_STATE";
+ case NPT_ERROR_INVALID_FORMAT: return "NPT_ERROR_INVALID_FORMAT";
+ case NPT_ERROR_INVALID_SYNTAX: return "NPT_ERROR_INVALID_SYNTAX";
+ case NPT_ERROR_NOT_IMPLEMENTED: return "NPT_ERROR_NOT_IMPLEMENTED";
+ case NPT_ERROR_NOT_SUPPORTED: return "NPT_ERROR_NOT_SUPPORTED";
+ case NPT_ERROR_TIMEOUT: return "NPT_ERROR_TIMEOUT";
+ case NPT_ERROR_WOULD_BLOCK: return "NPT_ERROR_WOULD_BLOCK";
+ case NPT_ERROR_TERMINATED: return "NPT_ERROR_TERMINATED";
+ case NPT_ERROR_OUT_OF_RANGE: return "NPT_ERROR_OUT_OF_RANGE";
+ case NPT_ERROR_LIST_EMPTY: return "NPT_ERROR_LIST_EMPTY";
+ case NPT_ERROR_LIST_OPERATION_ABORTED: return "NPT_ERROR_LIST_OPERATION_ABORTED";
+ case NPT_ERROR_LIST_OPERATION_CONTINUE: return "NPT_ERROR_LIST_OPERATION_CONTINUE";
+ case NPT_ERROR_NO_SUCH_FILE: return "NPT_ERROR_NO_SUCH_FILE";
+ case NPT_ERROR_FILE_NOT_OPEN: return "NPT_ERROR_FILE_NOT_OPEN";
+ case NPT_ERROR_FILE_BUSY: return "NPT_ERROR_FILE_BUSY";
+ case NPT_ERROR_FILE_ALREADY_OPEN: return "NPT_ERROR_FILE_ALREADY_OPEN";
+ case NPT_ERROR_FILE_NOT_READABLE: return "NPT_ERROR_FILE_NOT_READABLE";
+ case NPT_ERROR_FILE_NOT_WRITABLE: return "NPT_ERROR_FILE_NOT_WRITABLE";
+ case NPT_ERROR_FILE_NOT_DIRECTORY: return "NPT_ERROR_FILE_NOT_DIRECTORY";
+ case NPT_ERROR_FILE_ALREADY_EXISTS: return "NPT_ERROR_FILE_ALREADY_EXISTS";
+ case NPT_ERROR_FILE_NOT_ENOUGH_SPACE: return "NPT_ERROR_FILE_NOT_ENOUGH_SPACE";
+ case NPT_ERROR_DIRECTORY_NOT_EMPTY: return "NPT_ERROR_DIRECTORY_NOT_EMPTY";
+ case NPT_ERROR_READ_FAILED: return "NPT_ERROR_READ_FAILED";
+ case NPT_ERROR_WRITE_FAILED: return "NPT_ERROR_WRITE_FAILED";
+ case NPT_ERROR_EOS: return "NPT_ERROR_EOS";
+ case NPT_ERROR_CONNECTION_RESET: return "NPT_ERROR_CONNECTION_RESET";
+ case NPT_ERROR_CONNECTION_ABORTED: return "NPT_ERROR_CONNECTION_ABORTED";
+ case NPT_ERROR_CONNECTION_REFUSED: return "NPT_ERROR_CONNECTION_REFUSED";
+ case NPT_ERROR_CONNECTION_FAILED: return "NPT_ERROR_CONNECTION_FAILED";
+ case NPT_ERROR_HOST_UNKNOWN: return "NPT_ERROR_HOST_UNKNOWN";
+ case NPT_ERROR_SOCKET_FAILED: return "NPT_ERROR_SOCKET_FAILED";
+ case NPT_ERROR_GETSOCKOPT_FAILED: return "NPT_ERROR_GETSOCKOPT_FAILED";
+ case NPT_ERROR_SETSOCKOPT_FAILED: return "NPT_ERROR_SETSOCKOPT_FAILED";
+ case NPT_ERROR_SOCKET_CONTROL_FAILED: return "NPT_ERROR_SOCKET_CONTROL_FAILED";
+ case NPT_ERROR_BIND_FAILED: return "NPT_ERROR_BIND_FAILED";
+ case NPT_ERROR_LISTEN_FAILED: return "NPT_ERROR_LISTEN_FAILED";
+ case NPT_ERROR_ACCEPT_FAILED: return "NPT_ERROR_ACCEPT_FAILED";
+ case NPT_ERROR_ADDRESS_IN_USE: return "NPT_ERROR_ADDRESS_IN_USE";
+ case NPT_ERROR_NETWORK_DOWN: return "NPT_ERROR_NETWORK_DOWN";
+ case NPT_ERROR_NETWORK_UNREACHABLE: return "NPT_ERROR_NETWORK_UNREACHABLE";
+ case NPT_ERROR_NO_SUCH_INTERFACE: return "NPT_ERROR_NO_SUCH_INTERFACE";
+ case NPT_ERROR_XML_INVALID_NESTING: return "NPT_ERROR_XML_INVALID_NESTING";
+ case NPT_ERROR_XML_TAG_MISMATCH: return "NPT_ERROR_XML_TAG_MISMATCH";
+ case NPT_ERROR_HTTP_INVALID_RESPONSE_LINE: return "NPT_ERROR_HTTP_INVALID_RESPONSE_LINE";
+ case NPT_ERROR_HTTP_INVALID_REQUEST_LINE: return "NPT_ERROR_HTTP_INVALID_REQUEST_LINE";
+ case NPT_ERROR_HTTP_NO_PROXY: return "NPT_ERROR_HTTP_NO_PROXY";
+ case NPT_ERROR_HTTP_INVALID_REQUEST: return "NPT_ERROR_HTTP_INVALID_REQUEST";
+ case NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN: return "NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN";
+ case NPT_ERROR_CALLBACK_NOTHING_PENDING: return "NPT_ERROR_CALLBACK_NOTHING_PENDING";
+ case NPT_ERROR_NO_SUCH_SERIAL_PORT: return "NPT_ERROR_NO_SUCH_SERIAL_PORT";
+ case NPT_ERROR_SERIAL_PORT_NOT_OPEN: return "NPT_ERROR_SERIAL_PORT_NOT_OPEN";
+ case NPT_ERROR_SERIAL_PORT_ALREADY_OPEN: return "NPT_ERROR_SERIAL_PORT_ALREADY_OPEN";
+ case NPT_ERROR_SERIAL_PORT_BUSY: return "NPT_ERROR_SERIAL_PORT_BUSY";
+
+ default: return "UNKNOWN";
+ }
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptResults.h b/lib/libUPnP/Neptune/Source/Core/NptResults.h
new file mode 100644
index 0000000000..be505cff53
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptResults.h
@@ -0,0 +1,160 @@
+/*****************************************************************
+|
+| Neptune - Result Codes
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_RESULTS_H_
+#define _NPT_RESULTS_H_
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#if defined(NPT_DEBUG)
+#include "NptDebug.h"
+#define NPT_CHECK(_x) \
+do { \
+ NPT_Result _result = (_x); \
+ if (_result != NPT_SUCCESS) { \
+ NPT_Debug("%s(%d): @@@ NPT_CHECK failed, result=%d (%s)", __FILE__, __LINE__, _result, NPT_ResultText(_result)); \
+ return _result; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER(_p) \
+do { \
+ if ((_p) == NULL) { \
+ NPT_Debug("%s(%d): @@@ NULL pointer parameter", __FILE__, __LINE__); \
+ return NPT_ERROR_INVALID_PARAMETERS; \
+ } \
+} while(0)
+#define NPT_CHECK_LABEL(_x, label) \
+do { \
+ NPT_Result _result = (_x); \
+ if (_result != NPT_SUCCESS) { \
+ NPT_Debug("%s(%d): @@@ NPT_CHECK failed, result=%d (%s)", __FILE__, __LINE__, _result, NPT_ResultText(_result)); \
+ goto label; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER_LABEL(_p, label) \
+do { \
+ if (_p == NULL) { \
+ NPT_Debug("%s(%d): @@@ NULL pointer parameter", __FILE__, __LINE__); \
+ goto label; \
+ } \
+} while(0)
+#else
+#define NPT_CHECK(_x) \
+do { \
+ NPT_Result _result = (_x); \
+ if (_result != NPT_SUCCESS) { \
+ return _result; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER(_p) \
+do { \
+ if ((_p) == NULL) return NPT_ERROR_INVALID_PARAMETERS; \
+} while(0)
+#define NPT_CHECK_LABEL(_x, label) \
+do { \
+ NPT_Result _result = (_x); \
+ if (_result != NPT_SUCCESS) { \
+ goto label; \
+ } \
+} while(0)
+#define NPT_CHECK_POINTER_LABEL(_p, label) \
+do { \
+ if ((_p) == NULL) { \
+ goto label; \
+ } \
+} while(0)
+#endif
+
+#define NPT_FAILED(result) ((result) != NPT_SUCCESS)
+#define NPT_SUCCEEDED(result) ((result) == NPT_SUCCESS)
+
+/*----------------------------------------------------------------------
+| result codes
++---------------------------------------------------------------------*/
+/** Result indicating that the operation or call succeeded */
+#define NPT_SUCCESS 0
+
+/** Result indicating an unspecififed failure condition */
+#define NPT_FAILURE (-1)
+
+#if !defined(NPT_ERROR_BASE)
+#define NPT_ERROR_BASE -20000
+#endif
+
+// error bases
+const int NPT_ERROR_BASE_GENERAL = NPT_ERROR_BASE-0;
+const int NPT_ERROR_BASE_LIST = NPT_ERROR_BASE-100;
+const int NPT_ERROR_BASE_FILE = NPT_ERROR_BASE-200;
+const int NPT_ERROR_BASE_IO = NPT_ERROR_BASE-300;
+const int NPT_ERROR_BASE_SOCKET = NPT_ERROR_BASE-400;
+const int NPT_ERROR_BASE_INTERFACES = NPT_ERROR_BASE-500;
+const int NPT_ERROR_BASE_XML = NPT_ERROR_BASE-600;
+const int NPT_ERROR_BASE_UNIX = NPT_ERROR_BASE-700;
+const int NPT_ERROR_BASE_HTTP = NPT_ERROR_BASE-800;
+const int NPT_ERROR_BASE_THREADS = NPT_ERROR_BASE-900;
+const int NPT_ERROR_BASE_SERIAL_PORT = NPT_ERROR_BASE-1000;
+const int NPT_ERROR_BASE_TLS = NPT_ERROR_BASE-1100;
+
+// general errors
+const int NPT_ERROR_INVALID_PARAMETERS = NPT_ERROR_BASE_GENERAL - 0;
+const int NPT_ERROR_PERMISSION_DENIED = NPT_ERROR_BASE_GENERAL - 1;
+const int NPT_ERROR_OUT_OF_MEMORY = NPT_ERROR_BASE_GENERAL - 2;
+const int NPT_ERROR_NO_SUCH_NAME = NPT_ERROR_BASE_GENERAL - 3;
+const int NPT_ERROR_NO_SUCH_PROPERTY = NPT_ERROR_BASE_GENERAL - 4;
+const int NPT_ERROR_NO_SUCH_ITEM = NPT_ERROR_BASE_GENERAL - 5;
+const int NPT_ERROR_NO_SUCH_CLASS = NPT_ERROR_BASE_GENERAL - 6;
+const int NPT_ERROR_OVERFLOW = NPT_ERROR_BASE_GENERAL - 7;
+const int NPT_ERROR_INTERNAL = NPT_ERROR_BASE_GENERAL - 8;
+const int NPT_ERROR_INVALID_STATE = NPT_ERROR_BASE_GENERAL - 9;
+const int NPT_ERROR_INVALID_FORMAT = NPT_ERROR_BASE_GENERAL - 10;
+const int NPT_ERROR_INVALID_SYNTAX = NPT_ERROR_BASE_GENERAL - 11;
+const int NPT_ERROR_NOT_IMPLEMENTED = NPT_ERROR_BASE_GENERAL - 12;
+const int NPT_ERROR_NOT_SUPPORTED = NPT_ERROR_BASE_GENERAL - 13;
+const int NPT_ERROR_TIMEOUT = NPT_ERROR_BASE_GENERAL - 14;
+const int NPT_ERROR_WOULD_BLOCK = NPT_ERROR_BASE_GENERAL - 15;
+const int NPT_ERROR_TERMINATED = NPT_ERROR_BASE_GENERAL - 16;
+const int NPT_ERROR_OUT_OF_RANGE = NPT_ERROR_BASE_GENERAL - 17;
+const int NPT_ERROR_OUT_OF_RESOURCES = NPT_ERROR_BASE_GENERAL - 18;
+
+/* standard error codes */
+/* these are special codes to convey an errno */
+/* the error code is (SHI_ERROR_BASE_ERRNO - errno) */
+/* where errno is the positive integer from errno.h */
+const int NPT_ERROR_BASE_ERRNO = NPT_ERROR_BASE-2000;
+#define NPT_ERROR_ERRNO(e) (NPT_ERROR_BASE_ERRNO - (e))
+
+/*----------------------------------------------------------------------
+| functions
++---------------------------------------------------------------------*/
+const char* NPT_ResultText(int result);
+
+#endif // _NPT_RESULTS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.cpp b/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.cpp
new file mode 100644
index 0000000000..013bfb18fd
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.cpp
@@ -0,0 +1,270 @@
+/*****************************************************************
+|
+| Neptune - Ring Buffer
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptRingBuffer.h"
+#include "NptResults.h"
+#include "NptUtils.h"
+#include "NptStreams.h"
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::NPT_RingBuffer
++---------------------------------------------------------------------*/
+NPT_RingBuffer::NPT_RingBuffer(NPT_Size size) :
+ m_Size(size),
+ m_BufferIsLocal(true),
+ m_Closed(false)
+{
+ m_Data.start = new unsigned char[size];
+ m_Data.end = m_Data.start + size;
+
+ m_In = m_Out = m_Data.start;
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::NPT_RingBuffer
++---------------------------------------------------------------------*/
+NPT_RingBuffer::NPT_RingBuffer(void* buffer, NPT_Size size) :
+ m_Size(size),
+ m_BufferIsLocal(false)
+{
+ m_Data.start = (unsigned char*)buffer;
+ m_Data.end = m_Data.start + size;
+
+ m_In = m_Out = m_Data.start;
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::~NPT_RingBuffer
++---------------------------------------------------------------------*/
+NPT_RingBuffer::~NPT_RingBuffer()
+{
+ if (m_BufferIsLocal) delete[] m_Data.start;
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::GetContiguousSpace
++---------------------------------------------------------------------*/
+NPT_Size
+NPT_RingBuffer::GetContiguousSpace() const
+{
+ return
+ (m_In < m_Out) ?
+ (NPT_Size)(m_Out - m_In - 1) :
+ ((m_Out == m_Data.start) ?
+ (NPT_Size)(m_Data.end - m_In - 1) :
+ (NPT_Size)(m_Data.end - m_In));
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::GetSpace
++---------------------------------------------------------------------*/
+NPT_Size
+NPT_RingBuffer::GetSpace() const
+{
+ return
+ (m_In < m_Out) ?
+ (NPT_Size)(m_Out - m_In - 1) :
+ (NPT_Size)(m_Data.end - m_In + m_Out - m_Data.start - 1);
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::Write
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::Write(const void* buffer, NPT_Size byte_count)
+{
+ if (m_Closed) return NPT_ERROR_WRITE_FAILED;
+
+ if (byte_count == 0) return NPT_SUCCESS;
+ if (m_In < m_Out) {
+ if (buffer) NPT_CopyMemory(m_In, buffer, byte_count);
+ m_In += byte_count;
+ if (m_In == m_Data.end) m_In = m_Data.start;
+ } else {
+ unsigned int chunk = (unsigned int)(m_Data.end - m_In);
+ if (chunk >= byte_count) chunk = byte_count;
+
+ if (buffer) NPT_CopyMemory(m_In, buffer, chunk);
+ m_In += chunk;
+ if (m_In == m_Data.end) m_In = m_Data.start;
+ if (chunk != byte_count) {
+ if (buffer) {
+ NPT_CopyMemory(m_In,
+ ((const char*)buffer)+chunk,
+ byte_count-chunk);
+ }
+ m_In += byte_count-chunk;
+ if (m_In == m_Data.end) m_In = m_Data.start;
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::GetContiguousAvailable
++---------------------------------------------------------------------*/
+NPT_Size
+NPT_RingBuffer::GetContiguousAvailable() const
+{
+ return
+ (m_Out <= m_In) ?
+ (NPT_Size)(m_In-m_Out) :
+ (NPT_Size)(m_Data.end - m_Out);
+}
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Size
+NPT_RingBuffer::GetAvailable() const
+{
+ return
+ (m_Out <= m_In) ?
+ (NPT_Size)(m_In-m_Out) :
+ (NPT_Size)(m_Data.end - m_Out + m_In - m_Data.start);
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::Read
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::Read(void* buffer, NPT_Size byte_count)
+{
+ if (m_Closed) return NPT_ERROR_READ_FAILED;
+
+ if (byte_count == 0) return NPT_SUCCESS;
+ if (m_In > m_Out) {
+ if (buffer) NPT_CopyMemory(buffer, m_Out, byte_count);
+ m_Out += byte_count;
+ if (m_Out == m_Data.end) m_Out = m_Data.start;
+ } else {
+ unsigned int chunk = (unsigned int)(m_Data.end - m_Out);
+ if (chunk >= byte_count) chunk = byte_count;
+
+ if (buffer) NPT_CopyMemory(buffer, m_Out, chunk);
+ m_Out += chunk;
+ if (m_Out == m_Data.end) m_Out = m_Data.start;
+ if (chunk != byte_count) {
+ if (buffer) {
+ NPT_CopyMemory(((char*)buffer)+chunk, m_Out, byte_count-chunk);
+ }
+ m_Out += byte_count-chunk;
+ if (m_Out == m_Data.end) m_Out = m_Data.start;
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::ReadByte
++----------------------------------------------------------------------*/
+unsigned char
+NPT_RingBuffer::ReadByte()
+{
+ unsigned char result = *m_Out++;
+ if (m_Out == m_Data.end) m_Out = m_Data.start;
+ return result;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::PeekByte
++----------------------------------------------------------------------*/
+unsigned char
+NPT_RingBuffer::PeekByte(NPT_Position offset)
+{
+ unsigned char *where;
+
+ where = m_Out+offset;
+ if (where >= m_Data.end) where -= (m_Data.end - m_Data.start);
+
+ return *where;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::MoveIn
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::MoveIn(NPT_Position offset)
+{
+ int fold;
+
+ m_In += offset;
+ fold = (int)(m_In - m_Data.end);
+ if (fold >= 0) {
+ m_In = m_Data.start + fold;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::MoveOut
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::MoveOut(NPT_Position offset)
+{
+ int fold;
+
+ m_Out += offset;
+ fold = (int)(m_Out - m_Data.end);
+ if (fold >= 0) {
+ m_Out = m_Data.start + fold;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::Flush
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::Flush()
+{
+ m_In = m_Out = m_Data.start;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------+
+| NPT_RingBuffer::Close
++----------------------------------------------------------------------*/
+NPT_Result
+NPT_RingBuffer::Close()
+{
+ m_Closed = true;
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.h b/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.h
new file mode 100644
index 0000000000..ceda43ff9c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptRingBuffer.h
@@ -0,0 +1,84 @@
+/*****************************************************************
+|
+| Neptune - Ring Buffer
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_RING_BUFFER_H_
+#define _NPT_RING_BUFFER_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptReferences.h"
+
+/*----------------------------------------------------------------------
+| NPT_RingBuffer
++---------------------------------------------------------------------*/
+class NPT_RingBuffer
+{
+ public:
+ // methods
+ NPT_RingBuffer(NPT_Size size);
+ NPT_RingBuffer(void* buffer, NPT_Size size);
+ virtual ~NPT_RingBuffer();
+ NPT_Size GetSpace() const;
+ NPT_Size GetContiguousSpace() const;
+ NPT_Result Write(const void* buffer, NPT_Size byte_count);
+ NPT_Size GetAvailable() const;
+ NPT_Size GetContiguousAvailable() const;
+ NPT_Result Read(void* buffer, NPT_Size byte_count);
+ unsigned char ReadByte();
+ unsigned char PeekByte(NPT_Position offset);
+ NPT_Result MoveIn(NPT_Position offset);
+ NPT_Result MoveOut(NPT_Position offset);
+ NPT_Result Flush();
+ NPT_Result Close();
+ bool IsClosed() { return m_Closed; }
+
+ // accessors
+ unsigned char* GetWritePointer() { return m_In; }
+ unsigned char* GetReadPointer() { return m_Out;}
+
+ private:
+ // members
+ struct {
+ unsigned char* start;
+ unsigned char* end;
+ } m_Data;
+ unsigned char* m_In;
+ unsigned char* m_Out;
+ NPT_Size m_Size;
+ bool m_BufferIsLocal;
+ bool m_Closed;
+};
+
+typedef NPT_Reference<NPT_RingBuffer> NPT_RingBufferReference;
+
+#endif // _NPT_RING_BUFFER_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSelectableMessageQueue.h b/lib/libUPnP/Neptune/Source/Core/NptSelectableMessageQueue.h
new file mode 100644
index 0000000000..23dd499153
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSelectableMessageQueue.h
@@ -0,0 +1,68 @@
+/*****************************************************************
+|
+| Neptune - Selectable Message Queue
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_SELECTABLE_MESSAGE_QUEUE_H_
+#define _NPT_SELECTABLE_MESSAGE_QUEUE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptMessaging.h"
+#include "NptSimpleMessageQueue.h"
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue
++---------------------------------------------------------------------*/
+class NPT_SelectableMessageQueue : public NPT_SimpleMessageQueue
+{
+public:
+ // methods
+ NPT_SelectableMessageQueue();
+ virtual ~NPT_SelectableMessageQueue();
+
+ // NPT_MessageQueue methods
+ virtual NPT_Result PumpMessage(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ virtual NPT_Result QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler);
+
+ // methods
+ int GetEventFd() { return m_Pipe[0]; }
+
+private:
+ // methods
+ NPT_Result FlushEvent();
+
+ // members
+ int m_Pipe[2];
+};
+
+
+#endif /* _NPT_SELECTABLE_MESSAGE_QUEUE_H_ */
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSerialPort.h b/lib/libUPnP/Neptune/Source/Core/NptSerialPort.h
new file mode 100644
index 0000000000..1e23a3d37f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSerialPort.h
@@ -0,0 +1,119 @@
+/*****************************************************************
+|
+| Neptune - Serial Ports
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_SERIAL_PORT_H_
+#define _NPT_SERIAL_PORT_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptStreams.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_NO_SUCH_SERIAL_PORT = NPT_ERROR_BASE_SERIAL_PORT - 0;
+const int NPT_ERROR_SERIAL_PORT_NOT_OPEN = NPT_ERROR_BASE_SERIAL_PORT - 1;
+const int NPT_ERROR_SERIAL_PORT_ALREADY_OPEN = NPT_ERROR_BASE_SERIAL_PORT - 2;
+const int NPT_ERROR_SERIAL_PORT_BUSY = NPT_ERROR_BASE_SERIAL_PORT - 3;
+
+typedef enum {
+ NPT_SERIAL_PORT_PARITY_NONE,
+ NPT_SERIAL_PORT_PARITY_EVEN,
+ NPT_SERIAL_PORT_PARITY_ODD,
+ NPT_SERIAL_PORT_PARITY_MARK
+} NPT_SerialPortParity;
+
+typedef enum {
+ NPT_SERIAL_PORT_STOP_BITS_1,
+ NPT_SERIAL_PORT_STOP_BITS_1_5,
+ NPT_SERIAL_PORT_STOP_BITS_2
+} NPT_SerialPortStopBits;
+
+typedef enum {
+ NPT_SERIAL_PORT_FLOW_CONTROL_NONE,
+ NPT_SERIAL_PORT_FLOW_CONTROL_HARDWARE,
+ NPT_SERIAL_PORT_FLOW_CONTROL_XON_XOFF
+} NPT_SerialPortFlowControl;
+
+/*----------------------------------------------------------------------
+| NPT_SerialPortInterface
++---------------------------------------------------------------------*/
+class NPT_SerialPortInterface
+{
+public:
+ // constructors and destructor
+ virtual ~NPT_SerialPortInterface() {}
+
+ // methods
+ virtual NPT_Result Open(unsigned int speed,
+ NPT_SerialPortStopBits stop_bits,
+ NPT_SerialPortFlowControl flow_control,
+ NPT_SerialPortParity parity) = 0;
+ virtual NPT_Result Close() = 0;
+ virtual NPT_Result GetInputStream(NPT_InputStreamReference& stream) = 0;
+ virtual NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_SerialPort
++---------------------------------------------------------------------*/
+class NPT_SerialPort : public NPT_SerialPortInterface
+{
+public:
+ // constructors and destructor
+ NPT_SerialPort(const char* name);
+ ~NPT_SerialPort() { delete m_Delegate; }
+
+ // NPT_SerialPortInterface methods
+ NPT_Result Open(unsigned int speed,
+ NPT_SerialPortStopBits stop_bits = NPT_SERIAL_PORT_STOP_BITS_1,
+ NPT_SerialPortFlowControl flow_control = NPT_SERIAL_PORT_FLOW_CONTROL_NONE,
+ NPT_SerialPortParity parity = NPT_SERIAL_PORT_PARITY_NONE) {
+ return m_Delegate->Open(speed, stop_bits, flow_control, parity);
+ }
+ NPT_Result Close() {
+ return m_Delegate->Close();
+ }
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream) {
+ return m_Delegate->GetInputStream(stream);
+ }
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) {
+ return m_Delegate->GetOutputStream(stream);
+ }
+
+protected:
+ // members
+ NPT_SerialPortInterface* m_Delegate;
+};
+
+#endif // _NPT_SERIAL_PORT_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.cpp b/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.cpp
new file mode 100644
index 0000000000..d1570adfbd
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.cpp
@@ -0,0 +1,94 @@
+/*****************************************************************
+|
+| Neptune - Simple Message Queue
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptSimpleMessageQueue.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageCapsule
++---------------------------------------------------------------------*/
+struct NPT_SimpleMessageCapsule
+{
+ NPT_SimpleMessageCapsule(NPT_Message* message,
+ NPT_MessageHandler* handler) :
+ m_Message(message), m_Handler(handler) {}
+ NPT_Message* m_Message;
+ NPT_MessageHandler* m_Handler;
+};
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageQueue::NPT_SimpleMessageQueue
++---------------------------------------------------------------------*/
+NPT_SimpleMessageQueue::NPT_SimpleMessageQueue()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageQueue::~NPT_SimpleMessageQueue
++---------------------------------------------------------------------*/
+NPT_SimpleMessageQueue::~NPT_SimpleMessageQueue()
+{
+ // empty the queue
+ // TBD
+}
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageQueue::QueueMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SimpleMessageQueue::QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler)
+{
+ // push the message on the queue, with the handler reference
+ return m_Queue.Push(new NPT_SimpleMessageCapsule(message, handler));
+}
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageQueue::PumpMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SimpleMessageQueue::PumpMessage(NPT_Timeout timeout /* = NPT_TIMEOUT_INFINITE */)
+{
+ NPT_SimpleMessageCapsule* capsule;
+ NPT_Result result = m_Queue.Pop(capsule, timeout);
+ if (NPT_SUCCEEDED(result) && capsule) {
+ if (capsule->m_Handler && capsule->m_Message) {
+ result = capsule->m_Handler->HandleMessage(capsule->m_Message);
+ }
+ delete capsule->m_Message;
+ delete capsule;
+ }
+
+ return result;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.h b/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.h
new file mode 100644
index 0000000000..82b3d915e1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSimpleMessageQueue.h
@@ -0,0 +1,68 @@
+/*****************************************************************
+|
+| Neptune - Simple Message Queue
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_SIMPLE_MESSAGE_QUEUE_H_
+#define _NPT_SIMPLE_MESSAGE_QUEUE_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptThreads.h"
+#include "NptMessaging.h"
+#include "NptQueue.h"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+struct NPT_SimpleMessageCapsule;
+
+/*----------------------------------------------------------------------
+| NPT_SimpleMessageQueue
++---------------------------------------------------------------------*/
+class NPT_SimpleMessageQueue : public NPT_MessageQueue
+{
+ public:
+ // members
+ NPT_SimpleMessageQueue();
+ virtual ~NPT_SimpleMessageQueue();
+
+ // NPT_MessageQueue methods
+ virtual NPT_Result QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler);
+ virtual NPT_Result PumpMessage(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+ private:
+ // members
+ NPT_Queue<NPT_SimpleMessageCapsule> m_Queue;
+};
+
+#endif // _NPT_SIMPLE_MESSAGE_QUEUE_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSockets.cpp b/lib/libUPnP/Neptune/Source/Core/NptSockets.cpp
new file mode 100644
index 0000000000..7958f6121e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSockets.cpp
@@ -0,0 +1,59 @@
+/*****************************************************************
+|
+| Neptune - Sockets
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptSockets.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| NPT_SocketAddress::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_SocketAddress::ToString() const
+{
+ NPT_String s = m_IpAddress.ToString();
+ s += ':';
+ s += NPT_String::FromInteger(m_Port);
+ return s;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SocketAddress::operator==
++---------------------------------------------------------------------*/
+bool
+NPT_SocketAddress::operator==(const NPT_SocketAddress& other) const
+{
+ return (other.GetIpAddress().AsLong() == m_IpAddress.AsLong() &&
+ other.GetPort() == m_Port);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSockets.h b/lib/libUPnP/Neptune/Source/Core/NptSockets.h
new file mode 100644
index 0000000000..cccea14168
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSockets.h
@@ -0,0 +1,335 @@
+/*****************************************************************
+|
+| Neptune - Network Sockets
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_SOCKETS_H_
+#define _NPT_SOCKETS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptStreams.h"
+#include "NptStrings.h"
+#include "NptDataBuffer.h"
+#include "NptNetwork.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_CONNECTION_RESET = NPT_ERROR_BASE_SOCKET - 0;
+const int NPT_ERROR_CONNECTION_ABORTED = NPT_ERROR_BASE_SOCKET - 1;
+const int NPT_ERROR_CONNECTION_REFUSED = NPT_ERROR_BASE_SOCKET - 2;
+const int NPT_ERROR_CONNECTION_FAILED = NPT_ERROR_BASE_SOCKET - 3;
+const int NPT_ERROR_HOST_UNKNOWN = NPT_ERROR_BASE_SOCKET - 4;
+const int NPT_ERROR_SOCKET_FAILED = NPT_ERROR_BASE_SOCKET - 5;
+const int NPT_ERROR_GETSOCKOPT_FAILED = NPT_ERROR_BASE_SOCKET - 6;
+const int NPT_ERROR_SETSOCKOPT_FAILED = NPT_ERROR_BASE_SOCKET - 7;
+const int NPT_ERROR_SOCKET_CONTROL_FAILED = NPT_ERROR_BASE_SOCKET - 8;
+const int NPT_ERROR_BIND_FAILED = NPT_ERROR_BASE_SOCKET - 9;
+const int NPT_ERROR_LISTEN_FAILED = NPT_ERROR_BASE_SOCKET - 10;
+const int NPT_ERROR_ACCEPT_FAILED = NPT_ERROR_BASE_SOCKET - 11;
+const int NPT_ERROR_ADDRESS_IN_USE = NPT_ERROR_BASE_SOCKET - 12;
+const int NPT_ERROR_NETWORK_DOWN = NPT_ERROR_BASE_SOCKET - 13;
+const int NPT_ERROR_NETWORK_UNREACHABLE = NPT_ERROR_BASE_SOCKET - 14;
+
+/*----------------------------------------------------------------------
+| forward references
++---------------------------------------------------------------------*/
+class NPT_Socket;
+
+/*----------------------------------------------------------------------
+| NPT_SocketAddress
++---------------------------------------------------------------------*/
+class NPT_SocketAddress
+{
+public:
+ // constructors and destructor
+ NPT_SocketAddress() : m_Port(0) {}
+ NPT_SocketAddress(const NPT_IpAddress& address, NPT_IpPort port) :
+ m_IpAddress(address),
+ m_Port(port) {}
+
+ // methods
+ NPT_Result SetIpAddress(const NPT_IpAddress& address) {
+ m_IpAddress = address;
+ return NPT_SUCCESS;
+ }
+ const NPT_IpAddress& GetIpAddress() const {
+ return m_IpAddress;
+ }
+ NPT_Result SetPort(NPT_IpPort port) {
+ m_Port = port;
+ return NPT_SUCCESS;
+ }
+ NPT_IpPort GetPort() const {
+ return m_Port;
+ }
+ NPT_String ToString() const;
+
+ // operators
+ bool operator==(const NPT_SocketAddress& other) const;
+
+private:
+ // members
+ NPT_IpAddress m_IpAddress;
+ NPT_IpPort m_Port;
+};
+
+/*----------------------------------------------------------------------
+| NPT_SocketInfo
++---------------------------------------------------------------------*/
+typedef struct {
+ NPT_SocketAddress local_address;
+ NPT_SocketAddress remote_address;
+} NPT_SocketInfo;
+
+/*----------------------------------------------------------------------
+| NPT_SocketInterface
++---------------------------------------------------------------------*/
+class NPT_SocketInterface
+{
+ public:
+ virtual ~NPT_SocketInterface() {}
+
+ // interface methods
+ virtual NPT_Result Bind(const NPT_SocketAddress& address, bool reuse_address = true) = 0;
+ virtual NPT_Result Connect(const NPT_SocketAddress& address, NPT_Timeout timeout) = 0;
+ virtual NPT_Result Disconnect() = 0;
+ virtual NPT_Result WaitForConnection(NPT_Timeout timeout) = 0;
+ virtual NPT_Result GetInputStream(NPT_InputStreamReference& stream) = 0;
+ virtual NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) = 0;
+ virtual NPT_Result GetInfo(NPT_SocketInfo& info) = 0;
+ virtual NPT_Result SetBlockingMode(bool blocking) = 0;
+ virtual NPT_Result SetReadTimeout(NPT_Timeout timeout) = 0;
+ virtual NPT_Result SetWriteTimeout(NPT_Timeout timeout) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_UdpSocketInterface
++---------------------------------------------------------------------*/
+class NPT_UdpSocketInterface
+{
+ public:
+ virtual ~NPT_UdpSocketInterface() {}
+
+ // methods
+ virtual NPT_Result Send(const NPT_DataBuffer& packet,
+ const NPT_SocketAddress* address = NULL) = 0;
+ virtual NPT_Result Receive(NPT_DataBuffer& packet,
+ NPT_SocketAddress* address = NULL) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_UdpMulticastSocketInterface
++---------------------------------------------------------------------*/
+class NPT_UdpMulticastSocketInterface
+{
+ public:
+ virtual ~NPT_UdpMulticastSocketInterface() {}
+
+ // methods
+ virtual NPT_Result JoinGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface) = 0;
+ virtual NPT_Result LeaveGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface) = 0;
+ virtual NPT_Result SetTimeToLive(unsigned char ttl) = 0;
+ virtual NPT_Result SetInterface(const NPT_IpAddress& iface) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TcpServerSocketInterface
++---------------------------------------------------------------------*/
+class NPT_TcpServerSocketInterface
+{
+ public:
+ virtual ~NPT_TcpServerSocketInterface() {}
+
+ // interface methods
+ virtual NPT_Result Listen(unsigned int max_clients) = 0;
+ virtual NPT_Result WaitForNewClient(NPT_Socket*& client,
+ NPT_Timeout timeout) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Socket
++---------------------------------------------------------------------*/
+class NPT_Socket : public NPT_SocketInterface
+{
+public:
+ // constructor and destructor
+ NPT_Socket(NPT_SocketInterface* delegate) :
+ m_SocketDelegate(delegate) {}
+ virtual ~NPT_Socket();
+
+ // delegate NPT_SocketInterface methods
+ NPT_Result Bind(const NPT_SocketAddress& address, bool reuse_address = true) {
+ return m_SocketDelegate->Bind(address, reuse_address);
+ }
+ NPT_Result Connect(const NPT_SocketAddress& address,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_SocketDelegate->Connect(address, timeout);
+ }
+ NPT_Result Disconnect() {
+ return m_SocketDelegate->Disconnect();
+ }
+ NPT_Result WaitForConnection(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_SocketDelegate->WaitForConnection(timeout);
+ }
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream) {
+ return m_SocketDelegate->GetInputStream(stream);
+ }
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) {
+ return m_SocketDelegate->GetOutputStream(stream);
+ }
+ NPT_Result GetInfo(NPT_SocketInfo& info) {
+ return m_SocketDelegate->GetInfo(info);
+ }
+ NPT_Result SetBlockingMode(bool blocking) {
+ return m_SocketDelegate->SetBlockingMode(blocking);
+ }
+ NPT_Result SetReadTimeout(NPT_Timeout timeout) {
+ return m_SocketDelegate->SetReadTimeout(timeout);
+ }
+ NPT_Result SetWriteTimeout(NPT_Timeout timeout) {
+ return m_SocketDelegate->SetWriteTimeout(timeout);
+ }
+
+protected:
+ // constructor
+ NPT_Socket() {}
+
+ // members
+ NPT_SocketInterface* m_SocketDelegate;
+};
+
+typedef NPT_Reference<NPT_Socket> NPT_SocketReference;
+
+/*----------------------------------------------------------------------
+| NPT_UdpSocket
++---------------------------------------------------------------------*/
+class NPT_UdpSocket : public NPT_Socket,
+ public NPT_UdpSocketInterface
+{
+ public:
+ // constructor and destructor
+ NPT_UdpSocket();
+ virtual ~NPT_UdpSocket();
+
+ // delegate NPT_UdpSocketInterface methods
+ NPT_Result Send(const NPT_DataBuffer& packet,
+ const NPT_SocketAddress* address = NULL) {
+ return m_UdpSocketDelegate->Send(packet, address);
+ }
+ NPT_Result Receive(NPT_DataBuffer& packet,
+ NPT_SocketAddress* address = NULL) {
+ return m_UdpSocketDelegate->Receive(packet, address);
+ }
+
+protected:
+ // constructor
+ NPT_UdpSocket(NPT_UdpSocketInterface* delegate);
+
+ // members
+ NPT_UdpSocketInterface* m_UdpSocketDelegate;
+};
+
+/*----------------------------------------------------------------------
+| NPT_UdpMulticastSocket
++---------------------------------------------------------------------*/
+class NPT_UdpMulticastSocket : public NPT_UdpSocket,
+ public NPT_UdpMulticastSocketInterface
+{
+public:
+ // constructor and destructor
+ NPT_UdpMulticastSocket();
+ virtual ~NPT_UdpMulticastSocket();
+
+ // delegate NPT_UdpMulticastSocketInterface methods
+ NPT_Result JoinGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface =
+ NPT_IpAddress::Any) {
+ return m_UdpMulticastSocketDelegate->JoinGroup(group, iface);
+ }
+ NPT_Result LeaveGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface =
+ NPT_IpAddress::Any) {
+ return m_UdpMulticastSocketDelegate->LeaveGroup(group, iface);
+ }
+ NPT_Result SetTimeToLive(unsigned char ttl) {
+ return m_UdpMulticastSocketDelegate->SetTimeToLive(ttl);
+ }
+ NPT_Result SetInterface(const NPT_IpAddress& iface) {
+ return m_UdpMulticastSocketDelegate->SetInterface(iface);
+ }
+
+protected:
+ // members
+ NPT_UdpMulticastSocketInterface* m_UdpMulticastSocketDelegate;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TcpClientSocket
++---------------------------------------------------------------------*/
+class NPT_TcpClientSocket : public NPT_Socket
+{
+public:
+ // constructors and destructor
+ NPT_TcpClientSocket();
+ virtual ~NPT_TcpClientSocket();
+};
+
+/*----------------------------------------------------------------------
+| NPT_TcpServerSocket
++---------------------------------------------------------------------*/
+class NPT_TcpServerSocket : public NPT_Socket,
+ public NPT_TcpServerSocketInterface
+{
+public:
+ // constructors and destructor
+ NPT_TcpServerSocket();
+ virtual ~NPT_TcpServerSocket();
+
+ // delegate NPT_TcpServerSocketInterface methods
+ NPT_Result Listen(unsigned int max_clients) {
+ return m_TcpServerSocketDelegate->Listen(max_clients);
+ }
+ NPT_Result WaitForNewClient(NPT_Socket*& client,
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_TcpServerSocketDelegate->WaitForNewClient(client, timeout);
+ }
+
+protected:
+ // members
+ NPT_TcpServerSocketInterface* m_TcpServerSocketDelegate;
+};
+
+#endif // _NPT_SOCKETS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptStack.h b/lib/libUPnP/Neptune/Source/Core/NptStack.h
new file mode 100644
index 0000000000..034b3ec4bf
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptStack.h
@@ -0,0 +1,72 @@
+/*****************************************************************
+|
+| Neptune - Stack
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+****************************************************************/
+
+#ifndef _NPT_STACK_H_
+#define _NPT_STACK_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptResults.h"
+#include "NptTypes.h"
+#include "NptList.h"
+
+/*----------------------------------------------------------------------
+| NPT_Stack
++---------------------------------------------------------------------*/
+template <typename T>
+class NPT_Stack : public NPT_List<T>
+{
+public:
+ // methods
+ NPT_Result Push(const T& value) {
+ return Add(value);
+ }
+
+ NPT_Result Peek(T& value) {
+ // NOTE: we must use the this-> accessor here because the standard
+ // requires it when the member to look up is in a parent template
+ if (this->m_ItemCount == 0) return NPT_ERROR_NO_SUCH_ITEM;
+ value = this->m_Tail->m_Data;
+ return NPT_SUCCESS;
+ }
+
+ NPT_Result Pop(T& value) {
+ // NOTE: we must use the this-> accessor here because the standard
+ // requires it when the member to look up is in a parent template
+ if (this->m_ItemCount == 0) return NPT_ERROR_NO_SUCH_ITEM;
+ typename NPT_List<T>::Iterator tail = this->GetLastItem();
+ value = *tail;
+ return this->Erase(tail);
+ }
+};
+
+#endif // _NPT_STACK_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptStreams.cpp b/lib/libUPnP/Neptune/Source/Core/NptStreams.cpp
new file mode 100644
index 0000000000..a445866198
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptStreams.cpp
@@ -0,0 +1,724 @@
+/*****************************************************************
+|
+| Neptune - Byte Streams
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptStreams.h"
+#include "NptUtils.h"
+#include "NptConstants.h"
+#include "NptStrings.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const NPT_Size NPT_INPUT_STREAM_LOAD_DEFAULT_READ_CHUNK = 4096;
+const NPT_LargeSize NPT_INPUT_STREAM_LOAD_MAX_SIZE = 0x40000000; // 1GB
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::Load(NPT_DataBuffer& buffer, NPT_Size max_read /* = 0 */)
+{
+ NPT_Result result;
+ NPT_LargeSize total_bytes_read;
+
+ // reset the buffer
+ buffer.SetDataSize(0);
+
+ // check the limits
+ if (max_read > NPT_INPUT_STREAM_LOAD_MAX_SIZE) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // try to get the stream size
+ NPT_LargeSize size;
+ if (NPT_SUCCEEDED(GetSize(size))) {
+ // make sure we don't read more than max_read
+ if (max_read && max_read < size) size = max_read;
+ if (size > NPT_INPUT_STREAM_LOAD_MAX_SIZE) {
+ return NPT_ERROR_OUT_OF_RANGE;
+ }
+ } else {
+ size = max_read;
+ }
+
+ // pre-allocate the buffer
+ if (size) NPT_CHECK(buffer.Reserve((NPT_Size)size));
+
+ // read the data from the file
+ total_bytes_read = 0;
+ do {
+ NPT_LargeSize available = 0;
+ NPT_LargeSize bytes_to_read;
+ NPT_Size bytes_read;
+ NPT_Byte* data;
+
+ // check if we know how much data is available
+ result = GetAvailable(available);
+ if (NPT_SUCCEEDED(result) && available) {
+ // we know how much is available
+ bytes_to_read = available;
+ } else {
+ bytes_to_read = NPT_INPUT_STREAM_LOAD_DEFAULT_READ_CHUNK;
+ }
+
+ // make sure we don't read more than what was asked
+ if (size != 0 && total_bytes_read+bytes_to_read>size) {
+ bytes_to_read = size-total_bytes_read;
+ }
+
+ // stop if we've read everything
+ if (bytes_to_read == 0) break;
+
+ // ensure that the buffer has enough space
+ if (total_bytes_read+bytes_to_read > NPT_INPUT_STREAM_LOAD_MAX_SIZE) {
+ buffer.SetBufferSize(0);
+ return NPT_ERROR_OUT_OF_RANGE;
+ }
+ NPT_CHECK(buffer.Reserve((NPT_Size)(total_bytes_read+bytes_to_read)));
+
+ // read the data
+ data = buffer.UseData()+total_bytes_read;
+ result = Read((void*)data, (NPT_Size)bytes_to_read, &bytes_read);
+ if (NPT_SUCCEEDED(result) && bytes_read != 0) {
+ total_bytes_read += bytes_read;
+ buffer.SetDataSize((NPT_Size)total_bytes_read);
+ }
+ } while(NPT_SUCCEEDED(result) && (size==0 || total_bytes_read < size));
+
+ if (result == NPT_ERROR_EOS) {
+ return NPT_SUCCESS;
+ } else {
+ return result;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadFully
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadFully(void* buffer, NPT_Size bytes_to_read)
+{
+ // shortcut
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // read until failure
+ NPT_Size bytes_read;
+ while (bytes_to_read) {
+ NPT_Result result = Read(buffer, bytes_to_read, &bytes_read);
+ if (NPT_FAILED(result)) return result;
+ if (bytes_read == 0) return NPT_ERROR_INTERNAL;
+ NPT_ASSERT(bytes_read <= bytes_to_read);
+ bytes_to_read -= bytes_read;
+ buffer = (void*)(((NPT_Byte*)buffer)+bytes_read);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadUI64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadUI64(NPT_UInt64& value)
+{
+ unsigned char buffer[8];
+
+ // read bytes from the stream
+ NPT_Result result;
+ result = ReadFully((void*)buffer, 8);
+ if (NPT_FAILED(result)) {
+ value = 0;
+ return result;
+ }
+
+ // convert bytes to value
+ value = NPT_BytesToInt64Be(buffer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadUI32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadUI32(NPT_UInt32& value)
+{
+ unsigned char buffer[4];
+
+ // read bytes from the stream
+ NPT_Result result;
+ result = ReadFully((void*)buffer, 4);
+ if (NPT_FAILED(result)) {
+ value = 0;
+ return result;
+ }
+
+ // convert bytes to value
+ value = NPT_BytesToInt32Be(buffer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadUI24
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadUI24(NPT_UInt32& value)
+{
+ unsigned char buffer[3];
+
+ // read bytes from the stream
+ NPT_Result result;
+ result = ReadFully((void*)buffer, 3);
+ if (NPT_FAILED(result)) {
+ value = 0;
+ return result;
+ }
+
+ // convert bytes to value
+ value = NPT_BytesToInt24Be(buffer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadUI16
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadUI16(NPT_UInt16& value)
+{
+ unsigned char buffer[2];
+
+ // read bytes from the stream
+ NPT_Result result;
+ result = ReadFully((void*)buffer, 2);
+ if (NPT_FAILED(result)) {
+ value = 0;
+ return result;
+ }
+
+ // convert bytes to value
+ value = NPT_BytesToInt16Be(buffer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::ReadUI08
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::ReadUI08(NPT_UInt8& value)
+{
+ unsigned char buffer[1];
+
+ // read bytes from the stream
+ NPT_Result result;
+ result = ReadFully((void*)buffer, 1);
+ if (NPT_FAILED(result)) {
+ value = 0;
+ return result;
+ }
+
+ // convert bytes to value
+ value = buffer[0];
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_InputStream::Skip
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_InputStream::Skip(NPT_Size count)
+{
+ // get the current location
+ NPT_Position position;
+ NPT_CHECK(Tell(position));
+
+ // seek ahead
+ return Seek(position+count);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteFully
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteFully(const void* buffer, NPT_Size bytes_to_write)
+{
+ // shortcut
+ if (bytes_to_write == 0) return NPT_SUCCESS;
+
+ // write until failure
+ NPT_Size bytes_written;
+ while (bytes_to_write) {
+ NPT_Result result = Write(buffer, bytes_to_write, &bytes_written);
+ if (NPT_FAILED(result)) return result;
+ if (bytes_written == 0) return NPT_ERROR_INTERNAL;
+ NPT_ASSERT(bytes_written <= bytes_to_write);
+ bytes_to_write -= bytes_written;
+ buffer = (const void*)(((const NPT_Byte*)buffer)+bytes_written);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteString
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteString(const char* buffer)
+{
+ // shortcut
+ NPT_Size string_length;
+ if (buffer == NULL || (string_length = NPT_StringLength(buffer)) == 0) {
+ return NPT_SUCCESS;
+ }
+
+ // write the string
+ return WriteFully((const void*)buffer, string_length);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteLine
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteLine(const char* buffer)
+{
+ NPT_CHECK(WriteString(buffer));
+ NPT_CHECK(WriteFully((const void*)"\r\n", 2));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteUI64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteUI64(NPT_UInt64 value)
+{
+ unsigned char buffer[8];
+
+ // convert value to bytes
+ NPT_BytesFromInt64Be(buffer, value);
+
+ // write bytes to the stream
+ return WriteFully((void*)buffer, 8);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteUI32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteUI32(NPT_UInt32 value)
+{
+ unsigned char buffer[4];
+
+ // convert value to bytes
+ NPT_BytesFromInt32Be(buffer, value);
+
+ // write bytes to the stream
+ return WriteFully((void*)buffer, 4);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteUI24
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteUI24(NPT_UInt32 value)
+{
+ unsigned char buffer[3];
+
+ // convert value to bytes
+ NPT_BytesFromInt24Be(buffer, value);
+
+ // write bytes to the stream
+ return WriteFully((void*)buffer, 3);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteUI16
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteUI16(NPT_UInt16 value)
+{
+ unsigned char buffer[2];
+
+ // convert value to bytes
+ NPT_BytesFromInt16Be(buffer, value);
+
+ // write bytes to the stream
+ return WriteFully((void*)buffer, 2);
+}
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream::WriteUI08
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_OutputStream::WriteUI08(NPT_UInt8 value)
+{
+ return WriteFully((void*)&value, 1);
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::NPT_MemoryStream
++---------------------------------------------------------------------*/
+NPT_MemoryStream::NPT_MemoryStream(NPT_Size initial_capacity) :
+ m_Buffer(initial_capacity),
+ m_ReadOffset(0),
+ m_WriteOffset(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::NPT_MemoryStream
++---------------------------------------------------------------------*/
+NPT_MemoryStream::NPT_MemoryStream(const void* data, NPT_Size size) :
+ m_Buffer(data, size),
+ m_ReadOffset(0),
+ m_WriteOffset(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MemoryStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // check for shortcut
+ if (bytes_to_read == 0) {
+ if (bytes_read) *bytes_read = 0;
+ return NPT_SUCCESS;
+ }
+
+ // clip to what's available
+ NPT_Size available = m_Buffer.GetDataSize();
+ if (m_ReadOffset+bytes_to_read > available) {
+ bytes_to_read = available-m_ReadOffset;
+ }
+
+ // copy the data
+ if (bytes_to_read) {
+ NPT_CopyMemory(buffer, (void*)(((char*)m_Buffer.UseData())+m_ReadOffset), bytes_to_read);
+ m_ReadOffset += bytes_to_read;
+ }
+ if (bytes_read) *bytes_read = bytes_to_read;
+
+ return bytes_to_read?NPT_SUCCESS:NPT_ERROR_EOS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::InputSeek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MemoryStream::InputSeek(NPT_Position offset)
+{
+ if (offset > m_Buffer.GetDataSize()) {
+ return NPT_ERROR_OUT_OF_RANGE;
+ } else {
+ m_ReadOffset = (NPT_Size)offset;
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MemoryStream::Write(const void* data,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ NPT_CHECK(m_Buffer.Reserve(m_WriteOffset+bytes_to_write));
+
+ NPT_CopyMemory(m_Buffer.UseData()+m_WriteOffset, data, bytes_to_write);
+ m_WriteOffset += bytes_to_write;
+ if (m_WriteOffset > m_Buffer.GetDataSize()) {
+ m_Buffer.SetDataSize(m_WriteOffset);
+ }
+ if (bytes_written) *bytes_written = bytes_to_write;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::OutputSeek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MemoryStream::OutputSeek(NPT_Position offset)
+{
+ if (offset <= m_Buffer.GetDataSize()) {
+ m_WriteOffset = (NPT_Size)offset;
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_OUT_OF_RANGE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream::SetDataSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_MemoryStream::SetDataSize(NPT_Size size)
+{
+ // update data amount in buffer
+ NPT_CHECK(m_Buffer.SetDataSize(size));
+
+ // adjust the read and write offsets
+ if (m_ReadOffset > size) m_ReadOffset = size;
+ if (m_WriteOffset > size) m_WriteOffset = size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StreamToStreamCopy
++---------------------------------------------------------------------*/
+const unsigned int NPT_STREAM_COPY_BUFFER_SIZE = 16384; // copy 4k at a time
+NPT_Result
+NPT_StreamToStreamCopy(NPT_InputStream& from,
+ NPT_OutputStream& to,
+ NPT_Position offset /* = 0 */,
+ NPT_LargeSize size /* = 0, 0 means the entire stream */,
+ NPT_LargeSize* bytes_written /* = NULL */)
+{
+ // default values
+ if (bytes_written) *bytes_written = 0;
+
+ // seek into the input if required
+ if (offset) {
+ NPT_CHECK(from.Seek(offset));
+ }
+
+ // allocate a buffer for the transfer
+ NPT_LargeSize bytes_transfered = 0;
+ NPT_Byte* buffer = new NPT_Byte[NPT_STREAM_COPY_BUFFER_SIZE];
+ NPT_Result result = NPT_SUCCESS;
+ if (buffer == NULL) return NPT_ERROR_OUT_OF_MEMORY;
+
+ // copy until an error occurs or the end of stream is reached
+ for (;;) {
+ // read some data
+ NPT_Size bytes_to_read = NPT_STREAM_COPY_BUFFER_SIZE;
+ NPT_Size bytes_read = 0;
+ if (size) {
+ // a max size was specified
+ if (size-bytes_transfered < NPT_STREAM_COPY_BUFFER_SIZE) {
+ bytes_to_read = (NPT_Size)(size-bytes_transfered);
+ }
+ }
+ result = from.Read(buffer, bytes_to_read, &bytes_read);
+ if (NPT_FAILED(result)) {
+ if (result == NPT_ERROR_EOS) result = NPT_SUCCESS;
+ break;
+ }
+ if (bytes_read == 0) continue;
+
+ NPT_Size buffer_bytes_to_write = bytes_read;
+ NPT_Byte* buffer_bytes = (NPT_Byte*)buffer;
+ while (buffer_bytes_to_write) {
+ NPT_Size buffer_bytes_written = 0;
+ result = to.Write(buffer_bytes, buffer_bytes_to_write, &buffer_bytes_written);
+ if (NPT_FAILED(result)) goto end;
+ NPT_ASSERT(buffer_bytes_written <= buffer_bytes_to_write);
+ buffer_bytes_to_write -= buffer_bytes_written;
+ if (bytes_written) *bytes_written += buffer_bytes_written;
+ buffer_bytes += buffer_bytes_written;
+ }
+
+ // update the counts
+ if (size) {
+ bytes_transfered += bytes_read;
+ if (bytes_transfered >= size) break;
+ }
+ }
+
+end:
+ // free the buffer and return
+ delete[] buffer;
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StringOutputStream::NPT_StringOutputStream
++---------------------------------------------------------------------*/
+NPT_StringOutputStream::NPT_StringOutputStream(NPT_Size size) :
+ m_String(new NPT_String),
+ m_StringIsOwned(true)
+{
+ m_String->Reserve(size);
+}
+
+
+/*----------------------------------------------------------------------
+| NPT_StringOutputStream::NPT_StringOutputStream
++---------------------------------------------------------------------*/
+NPT_StringOutputStream::NPT_StringOutputStream(NPT_String* storage) :
+ m_String(storage),
+ m_StringIsOwned(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_StringOutputStream::~NPT_StringOutputStream
++---------------------------------------------------------------------*/
+NPT_StringOutputStream::~NPT_StringOutputStream()
+{
+ if (m_StringIsOwned) delete m_String;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StringOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StringOutputStream::Write(const void* buffer, NPT_Size bytes_to_write, NPT_Size* bytes_written /* = NULL */)
+{
+ m_String->Append((const char*)buffer, bytes_to_write);
+ if (bytes_written) *bytes_written = bytes_to_write;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::NPT_SubInputStream
++---------------------------------------------------------------------*/
+NPT_SubInputStream::NPT_SubInputStream(NPT_InputStreamReference& source,
+ NPT_Position start,
+ NPT_LargeSize size) :
+ m_Source(source),
+ m_Position(0),
+ m_Start(start),
+ m_Size(size)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SubInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // default values
+ if (bytes_read) *bytes_read = 0;
+
+ // shortcut
+ if (bytes_to_read == 0) {
+ return NPT_SUCCESS;
+ }
+
+ // clamp to range
+ if (m_Position+bytes_to_read > m_Size) {
+ bytes_to_read = (NPT_Size)(m_Size - m_Position);
+ }
+
+ // check for end of substream
+ if (bytes_to_read == 0) {
+ return NPT_ERROR_EOS;
+ }
+
+ // seek inside the source
+ NPT_Result result;
+ result = m_Source->Seek(m_Start+m_Position);
+ if (NPT_FAILED(result)) {
+ return result;
+ }
+
+ // read from the source
+ NPT_Size source_bytes_read = 0;
+ result = m_Source->Read(buffer, bytes_to_read, &source_bytes_read);
+ if (NPT_SUCCEEDED(result)) {
+ m_Position += source_bytes_read;
+ if (bytes_read) *bytes_read = source_bytes_read;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SubInputStream::Seek(NPT_Position position)
+{
+ if (position == m_Position) return NPT_SUCCESS;
+ if (position > m_Size) return NPT_ERROR_OUT_OF_RANGE;
+ m_Position = position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SubInputStream::Tell(NPT_Position& position)
+{
+ position = m_Position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SubInputStream::GetSize(NPT_LargeSize& size)
+{
+ size = m_Size;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SubInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ available = m_Size-m_Position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_NullOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NullOutputStream::Write(const void* /*buffer*/,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written /* = NULL */)
+{
+ if (bytes_written) *bytes_written = bytes_to_write;
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptStreams.h b/lib/libUPnP/Neptune/Source/Core/NptStreams.h
new file mode 100644
index 0000000000..7e49f253c9
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptStreams.h
@@ -0,0 +1,322 @@
+/*****************************************************************
+|
+| Neptune - Byte Streams
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_STREAMS_H_
+#define _NPT_STREAMS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptReferences.h"
+#include "NptConstants.h"
+#include "NptResults.h"
+#include "NptDataBuffer.h"
+#include "NptStrings.h"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_String;
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_READ_FAILED = NPT_ERROR_BASE_IO - 0;
+const int NPT_ERROR_WRITE_FAILED = NPT_ERROR_BASE_IO - 1;
+const int NPT_ERROR_EOS = NPT_ERROR_BASE_IO - 2;
+
+/*----------------------------------------------------------------------
+| NPT_InputStream
++---------------------------------------------------------------------*/
+class NPT_InputStream
+{
+ public:
+ // constructor and destructor
+ virtual ~NPT_InputStream() {};
+
+ // methods
+ virtual NPT_Result Load(NPT_DataBuffer& buffer, NPT_Size max_read = 0);
+ virtual NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL) = 0;
+ virtual NPT_Result ReadFully(void* buffer,
+ NPT_Size bytes_to_read);
+ virtual NPT_Result Seek(NPT_Position offset) = 0;
+ virtual NPT_Result Skip(NPT_Size offset);
+ virtual NPT_Result Tell(NPT_Position& offset) = 0;
+ virtual NPT_Result GetSize(NPT_LargeSize& size) = 0;
+ virtual NPT_Result GetAvailable(NPT_LargeSize& available) = 0;
+ virtual NPT_Result Close() { return NPT_SUCCESS; }
+
+ // data access methods
+ NPT_Result ReadUI64(NPT_UInt64& value);
+ NPT_Result ReadUI32(NPT_UInt32& value);
+ NPT_Result ReadUI24(NPT_UInt32& value);
+ NPT_Result ReadUI16(NPT_UInt16& value);
+ NPT_Result ReadUI08(NPT_UInt8& value);
+};
+
+typedef NPT_Reference<NPT_InputStream> NPT_InputStreamReference;
+
+/*----------------------------------------------------------------------
+| NPT_OutputStream
++---------------------------------------------------------------------*/
+class NPT_OutputStream
+{
+public:
+ // constructor and destructor
+ virtual ~NPT_OutputStream() {};
+
+ // methods
+ virtual NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written = NULL) = 0;
+ virtual NPT_Result WriteFully(const void* buffer,
+ NPT_Size bytes_to_write);
+ virtual NPT_Result WriteString(const char* string_buffer);
+ virtual NPT_Result WriteLine(const char* line_buffer);
+ virtual NPT_Result Seek(NPT_Position offset) = 0;
+ virtual NPT_Result Tell(NPT_Position& offset) = 0;
+ virtual NPT_Result Flush() { return NPT_SUCCESS; }
+
+ // data access methods
+ NPT_Result WriteUI64(NPT_UInt64 value);
+ NPT_Result WriteUI32(NPT_UInt32 value);
+ NPT_Result WriteUI24(NPT_UInt32 value);
+ NPT_Result WriteUI16(NPT_UInt16 value);
+ NPT_Result WriteUI08(NPT_UInt8 value);
+};
+
+typedef NPT_Reference<NPT_OutputStream> NPT_OutputStreamReference;
+
+/*----------------------------------------------------------------------
+| NPT_StreamToStreamCopy
++---------------------------------------------------------------------*/
+NPT_Result NPT_StreamToStreamCopy(NPT_InputStream& from,
+ NPT_OutputStream& to,
+ NPT_Position offset = 0,
+ NPT_LargeSize size = 0, /* 0 means the entire stream */
+ NPT_LargeSize* bytes_written = NULL);
+
+/*----------------------------------------------------------------------
+| NPT_DelegatingInputStream
+|
+| Use this class as a base class if you need to inherit both from
+| NPT_InputStream and NPT_OutputStream which share the Seek and Tell
+| method. In this case, you override the base-specific version of
+| those methods, InputSeek, InputTell, instead of the Seek and Tell
+| methods.
++---------------------------------------------------------------------*/
+class NPT_DelegatingInputStream : public NPT_InputStream
+{
+public:
+ // NPT_InputStream methods
+ NPT_Result Seek(NPT_Position offset) {
+ return InputSeek(offset);
+ }
+ NPT_Result Tell(NPT_Position& offset) {
+ return InputTell(offset);
+ }
+
+private:
+ // methods
+ virtual NPT_Result InputSeek(NPT_Position offset) = 0;
+ virtual NPT_Result InputTell(NPT_Position& offset) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_DelegatingOutputStream
+|
+| Use this class as a base class if you need to inherit both from
+| NPT_InputStream and NPT_OutputStream which share the Seek and Tell
+| method. In this case, you override the base-specific version of
+| those methods, OutputSeek and OutputTell, instead of the Seek and
+| Tell methods.
++---------------------------------------------------------------------*/
+class NPT_DelegatingOutputStream : public NPT_OutputStream
+{
+public:
+ // NPT_OutputStream methods
+ NPT_Result Seek(NPT_Position offset) {
+ return OutputSeek(offset);
+ }
+ NPT_Result Tell(NPT_Position& offset) {
+ return OutputTell(offset);
+ }
+
+private:
+ // methods
+ virtual NPT_Result OutputSeek(NPT_Position offset) = 0;
+ virtual NPT_Result OutputTell(NPT_Position& offset) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_MemoryStream
++---------------------------------------------------------------------*/
+class NPT_MemoryStream :
+ public NPT_DelegatingInputStream,
+ public NPT_DelegatingOutputStream
+{
+public:
+ // constructor and destructor
+ NPT_MemoryStream(NPT_Size initial_capacity = 0);
+ NPT_MemoryStream(const void* data, NPT_Size size);
+ virtual ~NPT_MemoryStream() {}
+
+ // accessors
+ const NPT_DataBuffer& GetBuffer() const { return m_Buffer; }
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ NPT_Result GetSize(NPT_LargeSize& size) {
+ size = m_Buffer.GetDataSize();
+ return NPT_SUCCESS;
+ }
+ NPT_Result GetAvailable(NPT_LargeSize& available) {
+ available = (NPT_LargeSize)m_Buffer.GetDataSize()-m_ReadOffset;
+ return NPT_SUCCESS;
+ }
+
+ // NPT_OutputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written = NULL);
+
+ // methods delegated to m_Buffer
+ const NPT_Byte* GetData() const { return m_Buffer.GetData(); }
+ NPT_Byte* UseData() { return m_Buffer.UseData(); }
+ NPT_Size GetDataSize() const { return m_Buffer.GetDataSize(); }
+ NPT_Size GetBufferSize() const { return m_Buffer.GetBufferSize();}
+
+ // methods
+ NPT_Result SetDataSize(NPT_Size size);
+
+private:
+ // NPT_DelegatingInputStream methods
+ NPT_Result InputSeek(NPT_Position offset);
+ NPT_Result InputTell(NPT_Position& offset) {
+ offset = m_ReadOffset;
+ return NPT_SUCCESS;
+ }
+
+ // NPT_DelegatingOutputStream methods
+ NPT_Result OutputSeek(NPT_Position offset);
+ NPT_Result OutputTell(NPT_Position& offset) {
+ offset = m_WriteOffset;
+ return NPT_SUCCESS;
+ }
+
+protected:
+ // members
+ NPT_DataBuffer m_Buffer;
+ NPT_Size m_ReadOffset;
+ NPT_Size m_WriteOffset;
+};
+
+typedef NPT_Reference<NPT_MemoryStream> NPT_MemoryStreamReference;
+
+/*----------------------------------------------------------------------
+| NPT_StringOutputStream
++---------------------------------------------------------------------*/
+class NPT_StringOutputStream : public NPT_OutputStream
+{
+public:
+ // methods
+ NPT_StringOutputStream(NPT_Size size = 4096);
+ NPT_StringOutputStream(NPT_String* storage);
+ virtual ~NPT_StringOutputStream() ;
+
+ const NPT_String& GetString() const { return *m_String; }
+ NPT_Result Reset() { if (m_String) m_String->SetLength(0); return NPT_SUCCESS; }
+
+ // NPT_OutputStream methods
+ NPT_Result Write(const void* buffer, NPT_Size bytes_to_write, NPT_Size* bytes_written = NULL);
+
+ NPT_Result Seek(NPT_Position /*offset*/) { return NPT_ERROR_NOT_SUPPORTED; }
+ NPT_Result Tell(NPT_Position& offset) { offset = m_String->GetLength(); return NPT_SUCCESS; }
+
+protected:
+ NPT_String* m_String;
+ bool m_StringIsOwned;
+};
+
+typedef NPT_Reference<NPT_StringOutputStream> NPT_StringOutputStreamReference;
+
+/*----------------------------------------------------------------------
+| NPT_SubInputStream
++---------------------------------------------------------------------*/
+class NPT_SubInputStream : public NPT_InputStream
+{
+public:
+ // constructor and destructor
+ NPT_SubInputStream(NPT_InputStreamReference& source,
+ NPT_Position start,
+ NPT_LargeSize size);
+
+ // methods
+ virtual NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL) = 0;
+ virtual NPT_Result Seek(NPT_Position offset) = 0;
+ virtual NPT_Result Tell(NPT_Position& offset) = 0;
+ virtual NPT_Result GetSize(NPT_LargeSize& size) = 0;
+ virtual NPT_Result GetAvailable(NPT_LargeSize& available) = 0;
+
+private:
+ NPT_InputStreamReference m_Source;
+ NPT_Position m_Position;
+ NPT_Position m_Start;
+ NPT_LargeSize m_Size;
+};
+
+/*----------------------------------------------------------------------
+| NPT_NullOutputStream
++---------------------------------------------------------------------*/
+class NPT_NullOutputStream : public NPT_OutputStream
+{
+public:
+ // methods
+ NPT_NullOutputStream() {}
+ virtual ~NPT_NullOutputStream() {}
+
+ // NPT_OutputStream methods
+ NPT_Result Write(const void* buffer, NPT_Size bytes_to_write, NPT_Size* bytes_written = NULL);
+
+ NPT_Result Seek(NPT_Position /*offset*/) { return NPT_ERROR_NOT_SUPPORTED; }
+ NPT_Result Tell(NPT_Position& /*offset*/) { return NPT_ERROR_NOT_SUPPORTED; }
+};
+
+typedef NPT_Reference<NPT_NullOutputStream> NPT_NullOutputStreamReference;
+
+#endif // _NPT_STREAMS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptStrings.cpp b/lib/libUPnP/Neptune/Source/Core/NptStrings.cpp
new file mode 100644
index 0000000000..c6e4b07141
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptStrings.cpp
@@ -0,0 +1,1108 @@
+/*****************************************************************
+|
+| Neptune - String Objects
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptStrings.h"
+#include "NptResults.h"
+#include "NptUtils.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_STRINGS_WHITESPACE_CHARS "\r\n\t "
+
+const unsigned int NPT_STRING_FORMAT_BUFFER_DEFAULT_SIZE = 256;
+const unsigned int NPT_STRING_FORMAT_BUFFER_MAX_SIZE = 0x80000; // 512k
+
+/*----------------------------------------------------------------------
+| helpers
++---------------------------------------------------------------------*/
+inline char NPT_Uppercase(char x) {
+ return (x >= 'a' && x <= 'z') ? x&0xdf : x;
+}
+
+inline char NPT_Lowercase(char x) {
+ return (x >= 'A' && x <= 'Z') ? x^32 : x;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::EmptyString
++---------------------------------------------------------------------*/
+char NPT_String::EmptyString = '\0';
+
+/*----------------------------------------------------------------------
+| NPT_String::FromInteger
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::FromInteger(NPT_Int64 value)
+{
+ char str[32];
+ char* c = &str[31];
+ *c-- = '\0';
+
+ // handle the sign
+ bool negative = false;
+ if (value < 0) {
+ negative = true;
+ value = -value;
+ }
+
+ // process the digits
+ do {
+ int digit = (int)(value%10);
+ *c-- = '0'+digit;
+ value /= 10;
+ } while(value);
+
+ if (negative) {
+ *c = '-';
+ } else {
+ ++c;
+ }
+
+ return NPT_String(c);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::FromIntegerU
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::FromIntegerU(NPT_UInt64 value)
+{
+ char str[32];
+ char* c = &str[31];
+ *c = '\0';
+
+ // process the digits
+ do {
+ int digit = (int)(value%10);
+ *--c = '0'+digit;
+ value /= 10;
+ } while(value);
+
+ return NPT_String(c);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Format
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::Format(const char* format, ...)
+{
+ NPT_String result;
+ NPT_Size buffer_size = NPT_STRING_FORMAT_BUFFER_DEFAULT_SIZE; // default value
+
+ va_list args;
+ va_start(args, format);
+
+ for(;;) {
+ /* try to format (it might not fit) */
+ result.Reserve(buffer_size);
+ char* buffer = result.UseChars();
+ int f_result = NPT_FormatStringVN(buffer, buffer_size, format, args);
+ if (f_result >= (int)(buffer_size)) f_result = -1;
+ if (f_result >= 0) {
+ result.SetLength(f_result);
+ break;
+ }
+
+ /* the buffer was too small, try something bigger */
+ /* (we don't trust the return value of NPT_FormatStringVN */
+ /* for the actual size needed) */
+ buffer_size *= 2;
+ if (buffer_size > NPT_STRING_FORMAT_BUFFER_MAX_SIZE) break;
+ }
+
+ va_end(args);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::NPT_String
++---------------------------------------------------------------------*/
+NPT_String::NPT_String(const char* str)
+{
+ if (str == NULL) {
+ m_Chars = NULL;
+ } else {
+ m_Chars = Buffer::Create(str);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::NPT_String
++---------------------------------------------------------------------*/
+NPT_String::NPT_String(const char* str, NPT_Size length)
+{
+ if (str == NULL || length == 0) {
+ m_Chars = NULL;
+ } else {
+ m_Chars = Buffer::Create(str, length);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::NPT_String
++---------------------------------------------------------------------*/
+NPT_String::NPT_String(const NPT_String& str)
+{
+ if (str.GetLength() == 0) {
+ m_Chars = NULL;
+ } else {
+ m_Chars = Buffer::Create(str.GetChars(), str.GetLength());
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::NPT_String
++---------------------------------------------------------------------*/
+NPT_String::NPT_String(const char* str,
+ NPT_Ordinal first,
+ NPT_Size length)
+{
+ // shortcut
+ if (str != NULL && length != 0) {
+ // truncate length
+ NPT_Size str_length = StringLength(str);
+ if (first < str_length) {
+ if (first+length > str_length) {
+ length = str_length-first;
+ }
+ if (length != 0) {
+ m_Chars = Buffer::Create(str+first, length);
+ return;
+ }
+ }
+ }
+ m_Chars = NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::NPT_String
++---------------------------------------------------------------------*/
+NPT_String::NPT_String(char c, NPT_Cardinal repeat)
+{
+ if (repeat != 0) {
+ m_Chars = Buffer::Create(c, repeat);
+ } else {
+ m_Chars = NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::SetLength
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::SetLength(NPT_Size length, bool pad)
+{
+ // special case for 0
+ if (length == 0) {
+ Reset();
+ return NPT_SUCCESS;
+ }
+
+ // reserve the space
+ Reserve(length);
+
+ // pad with spaces if necessary
+ char* chars = UseChars();
+ if (pad) {
+ unsigned int current_length = GetLength();
+ if (length > current_length) {
+ unsigned int pad_length = length-current_length;
+ NPT_SetMemory(chars+current_length, ' ', pad_length);
+ }
+ }
+
+ // update the length and terminate the buffer
+ GetBuffer()->SetLength(length);
+ chars[length] = '\0';
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::PrepareToWrite
++---------------------------------------------------------------------*/
+inline char*
+NPT_String::PrepareToWrite(NPT_Size length)
+{
+ NPT_ASSERT(length != 0);
+ if (m_Chars == NULL || GetBuffer()->GetAllocated() < length) {
+ // the buffer is too small, we need to allocate a new one.
+ NPT_Size needed = length;
+ if (m_Chars != NULL) {
+ NPT_Size grow = GetBuffer()->GetAllocated()*2;
+ if (grow > length) needed = grow;
+ delete GetBuffer();
+ }
+ m_Chars = Buffer::Create(needed);
+ }
+ GetBuffer()->SetLength(length);
+ return m_Chars;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Reserve
++---------------------------------------------------------------------*/
+void
+NPT_String::Reserve(NPT_Size allocate)
+{
+ if (m_Chars == NULL || GetBuffer()->GetAllocated() < allocate) {
+ // the buffer is too small, we need to allocate a new one.
+ NPT_Size needed = allocate;
+ if (m_Chars != NULL) {
+ NPT_Size grow = GetBuffer()->GetAllocated()*2;
+ if (grow > allocate) needed = grow;
+ }
+ NPT_Size length = GetLength();
+ char* copy = Buffer::Create(needed, length);
+ if (m_Chars != NULL) {
+ CopyString(copy, m_Chars);
+ delete GetBuffer();
+ } else {
+ copy[0] = '\0';
+ }
+ m_Chars = copy;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Assign
++---------------------------------------------------------------------*/
+void
+NPT_String::Assign(const char* str, NPT_Size length)
+{
+ if (str == NULL || length == 0) {
+ Reset();
+ } else {
+ PrepareToWrite(length);
+ CopyBuffer(m_Chars, str, length);
+ m_Chars[length] = '\0';
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::operator=
++---------------------------------------------------------------------*/
+NPT_String&
+NPT_String::operator=(const char* str)
+{
+ if (str == NULL) {
+ Reset();
+ } else {
+ NPT_Size length = StringLength(str);
+ if (length == 0) {
+ Reset();
+ } else {
+ CopyString(PrepareToWrite(length), str);
+ }
+ }
+
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::operator=
++---------------------------------------------------------------------*/
+NPT_String&
+NPT_String::operator=(const NPT_String& str)
+{
+ // do nothing if we're assigning to ourselves
+ if (this != &str) {
+ Assign(str.GetChars(), str.GetLength());
+ }
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Append
++---------------------------------------------------------------------*/
+void
+NPT_String::Append(const char* str, NPT_Size length)
+{
+ // shortcut
+ if (str == NULL || length == 0) return;
+
+ // compute the new length
+ NPT_Size old_length = GetLength();
+ NPT_Size new_length = old_length + length;
+
+ // allocate enough space
+ Reserve(new_length);
+
+ // append the new string at the end of the current one
+ CopyBuffer(m_Chars+old_length, str, length);
+ m_Chars[new_length] = '\0';
+
+ // update the length
+ GetBuffer()->SetLength(new_length);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Compare
++---------------------------------------------------------------------*/
+int
+NPT_String::Compare(const char *s, bool ignore_case) const
+{
+ return NPT_String::Compare(GetChars(), s, ignore_case);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Compare
++---------------------------------------------------------------------*/
+int
+NPT_String::Compare(const char *s1, const char *s2, bool ignore_case)
+{
+ const char *r1 = s1;
+ const char *r2 = s2;
+
+ if (ignore_case) {
+ while (NPT_Uppercase(*r1) == NPT_Uppercase(*r2)) {
+ if (*r1++ == '\0') {
+ return 0;
+ }
+ r2++;
+ }
+ return NPT_Uppercase(*r1) - NPT_Uppercase(*r2);
+ } else {
+ while (*r1 == *r2) {
+ if (*r1++ == '\0') {
+ return 0;
+ }
+ r2++;
+ }
+ return (*r1 - *r2);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::CompareN
++---------------------------------------------------------------------*/
+int
+NPT_String::CompareN(const char *s, NPT_Size count, bool ignore_case) const
+{
+ return NPT_String::CompareN(GetChars(), s, count, ignore_case);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::CompareN
++---------------------------------------------------------------------*/
+int
+NPT_String::CompareN(const char* s1, const char *s2, NPT_Size count, bool ignore_case)
+{
+ const char* me = s1;
+
+ if (ignore_case) {
+ for (unsigned int i=0; i<count; i++) {
+ if (NPT_Uppercase(me[i]) != NPT_Uppercase(s2[i])) {
+ return NPT_Uppercase(me[i]) - NPT_Uppercase(s2[i]);
+ }
+ }
+ return 0;
+ } else {
+ for (unsigned int i=0; i<count; i++) {
+ if (me[i] != s2[i]) {
+ return (me[i] - s2[i]);
+ }
+ }
+ return 0;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Split
++---------------------------------------------------------------------*/
+NPT_List<NPT_String>
+NPT_String::Split(const char* separator) const
+{
+ NPT_List<NPT_String> result;
+ NPT_Size separator_length = NPT_StringLength(separator);
+
+ // sepcial case for empty separators
+ if (separator_length == 0) {
+ result.Add(*this);
+ return result;
+ }
+
+ int current = 0;
+ int next;
+ do {
+ next = Find(separator, current);
+ unsigned int end = (next>=0?next:GetLength());
+ result.Add(SubString(current, end-current));
+ current = next+separator_length;
+ } while (next >= 0);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Join
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::Join(NPT_List<NPT_String>& args, const char* separator)
+{
+ NPT_String output;
+ NPT_List<NPT_String>::Iterator arg = args.GetFirstItem();
+ while (arg) {
+ output += *arg;
+ if (++arg) output += separator;
+ }
+
+ return output;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::SubString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::SubString(NPT_Ordinal first, NPT_Size length) const
+{
+ if (first >= GetLength()) {
+ first = GetLength();
+ length = 0;
+ } else if (first+length >= GetLength()) {
+ length = GetLength()-first;
+ }
+ return NPT_String(GetChars()+first, length);
+}
+
+/*----------------------------------------------------------------------
+| NPT_StringStartsWith
+|
+| returns:
+| 1 if str starts with sub,
+| 0 if str is large enough but does not start with sub
+| -1 if str is too short to start with sub
++---------------------------------------------------------------------*/
+static inline int
+NPT_StringStartsWith(const char* str, const char* sub, bool ignore_case)
+{
+ if (ignore_case) {
+ while (NPT_Uppercase(*str) == NPT_Uppercase(*sub)) {
+ if (*str++ == '\0') {
+ return 1;
+ }
+ sub++;
+ }
+ } else {
+ while (*str == *sub) {
+ if (*str++ == '\0') {
+ return 1;
+ }
+ sub++;
+ }
+ }
+ return (*sub == '\0') ? 1 : (*str == '\0' ? -1 : 0);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::StartsWith
++---------------------------------------------------------------------*/
+bool
+NPT_String::StartsWith(const char *s, bool ignore_case) const
+{
+ if (s == NULL) return false;
+ return NPT_StringStartsWith(GetChars(), s, ignore_case) == 1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::EndsWith
++---------------------------------------------------------------------*/
+bool
+NPT_String::EndsWith(const char *s, bool ignore_case) const
+{
+ if (s == NULL) return false;
+ NPT_Size str_length = NPT_StringLength(s);
+ if (str_length > GetLength()) return false;
+ return NPT_StringStartsWith(GetChars()+GetLength()-str_length, s, ignore_case) == 1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Find
++---------------------------------------------------------------------*/
+int
+NPT_String::Find(const char* str, NPT_Ordinal start, bool ignore_case) const
+{
+ // check args
+ if (str == NULL || start >= GetLength()) return -1;
+
+ // skip to start position
+ const char* src = m_Chars + start;
+
+ // look for a substring
+ while (*src) {
+ int cmp = NPT_StringStartsWith(src, str, ignore_case);
+ switch (cmp) {
+ case -1:
+ // ref is too short, abort
+ return -1;
+ case 1:
+ // match
+ return (int)(src-m_Chars);
+ }
+ src++;
+ }
+
+ return -1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Find
++---------------------------------------------------------------------*/
+int
+NPT_String::Find(char c, NPT_Ordinal start, bool ignore_case) const
+{
+ // check args
+ if (start >= GetLength()) return -1;
+
+ // skip to start position
+ const char* src = m_Chars + start;
+
+ // look for the character
+ if (ignore_case) {
+ while (*src) {
+ if (NPT_Uppercase(*src) == NPT_Uppercase(c)) {
+ return (int)(src-m_Chars);
+ }
+ src++;
+ }
+ } else {
+ while (*src) {
+ if (*src == c) return (int)(src-m_Chars);
+ src++;
+ }
+ }
+
+ return -1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ReverseFind
++---------------------------------------------------------------------*/
+int
+NPT_String::ReverseFind(const char* str, NPT_Ordinal start, bool ignore_case) const
+{
+ // check args
+ if (str == NULL || *str == '\0') return -1;
+
+ // look for a substring
+ NPT_Size my_length = GetLength();
+ NPT_Size str_length = NPT_StringLength(str);
+ int i=my_length-start-str_length;
+ const char* src = GetChars();
+ if (i<0) return -1;
+ for (;i>=0; i--) {
+ int cmp = NPT_StringStartsWith(src+i, str, ignore_case);
+ if (cmp == 1) {
+ // match
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ReverseFind
++---------------------------------------------------------------------*/
+int
+NPT_String::ReverseFind(char c, NPT_Ordinal start, bool ignore_case) const
+{
+ // check args
+ NPT_Size length = GetLength();
+ int i = length-start-1;
+ if (i < 0) return -1;
+
+ // look for the character
+ const char* src = GetChars();
+ if (ignore_case) {
+ for (;i>=0;i--) {
+ if (NPT_Uppercase(src[i]) == NPT_Uppercase(c)) {
+ return i;
+ }
+ }
+ } else {
+ for (;i>=0;i--) {
+ if (src[i] == c) return i;
+ }
+ }
+
+ return -1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::MakeLowercase
++---------------------------------------------------------------------*/
+void
+NPT_String::MakeLowercase()
+{
+ // the source is the current buffer
+ const char* src = GetChars();
+
+ // convert all the characters of the existing buffer
+ char* dst = const_cast<char*>(src);
+ while (*dst != '\0') {
+ *dst = NPT_Lowercase(*dst);
+ dst++;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::MakeUppercase
++---------------------------------------------------------------------*/
+void
+NPT_String::MakeUppercase()
+{
+ // the source is the current buffer
+ const char* src = GetChars();
+
+ // convert all the characters of the existing buffer
+ char* dst = const_cast<char*>(src);
+ while (*dst != '\0') {
+ *dst = NPT_Uppercase(*dst);
+ dst++;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToLowercase
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::ToLowercase() const
+{
+ NPT_String result(*this);
+ result.MakeLowercase();
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToUppercase
++---------------------------------------------------------------------*/
+NPT_String
+NPT_String::ToUppercase() const
+{
+ NPT_String result(*this);
+ result.MakeUppercase();
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Replace
++---------------------------------------------------------------------*/
+void
+NPT_String::Replace(char a, char b)
+{
+ // check args
+ if (m_Chars == NULL || a == '\0' || b == '\0') return;
+
+ // we are going to modify the characters
+ char* src = m_Chars;
+
+ // process the buffer in place
+ while (*src) {
+ if (*src == a) *src = b;
+ src++;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Replace
++---------------------------------------------------------------------*/
+void
+NPT_String::Replace(char a, const char* str)
+{
+ // check args
+ if (m_Chars == NULL || a == '\0' || str == NULL || str[0] == '\0') return;
+
+ // optimization
+ if (NPT_StringLength(str) == 1) return Replace(a, str[0]);
+
+ // we are going to create a new string
+ NPT_String dst;
+ char* src = m_Chars;
+
+ // reserve at least as much as input
+ dst.Reserve(GetLength());
+
+ // process the buffer
+ while (*src) {
+ if (*src == a) {
+ dst += str;
+ } else {
+ dst += *src;
+ }
+ src++;
+ }
+
+ Assign(dst.GetChars(), dst.GetLength());
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Insert
++---------------------------------------------------------------------*/
+void
+NPT_String::Insert(const char* str, NPT_Ordinal where)
+{
+ // check args
+ if (str == NULL || where > GetLength()) return;
+
+ // measure the string to insert
+ NPT_Size str_length = StringLength(str);
+ if (str_length == 0) return;
+
+ // compute the size of the new string
+ NPT_Size old_length = GetLength();
+ NPT_Size new_length = str_length + GetLength();
+
+ // prepare to write the new string
+ char* src = m_Chars;
+ char* nst = Buffer::Create(new_length, new_length);
+ char* dst = nst;
+
+ // copy the beginning of the old string
+ if (where > 0) {
+ CopyBuffer(dst, src, where);
+ src += where;
+ dst += where;
+ }
+
+ // copy the inserted string
+ CopyString(dst, str);
+ dst += str_length;
+
+ // copy the end of the old string
+ if (old_length > where) {
+ CopyString(dst, src);
+ }
+
+ // use the new string
+ if (m_Chars) delete GetBuffer();
+ m_Chars = nst;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Erase
++---------------------------------------------------------------------*/
+void
+NPT_String::Erase(NPT_Ordinal start, NPT_Cardinal count /* = 1 */)
+{
+ // check bounds
+ NPT_Size length = GetLength();
+ if (start+count > length) {
+ if (start >= length) return;
+ count = length-start;
+ }
+ if (count == 0) return;
+
+ CopyString(m_Chars+start, m_Chars+start+count);
+ GetBuffer()->SetLength(length-count);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger(int& value, bool relaxed) const
+{
+ return NPT_ParseInteger(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger(unsigned int& value, bool relaxed) const
+{
+ return NPT_ParseInteger(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger(long& value, bool relaxed) const
+{
+ return NPT_ParseInteger(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger(unsigned long& value, bool relaxed) const
+{
+ return NPT_ParseInteger(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger32(NPT_Int32& value, bool relaxed) const
+{
+ return NPT_ParseInteger32(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger32(NPT_UInt32& value, bool relaxed) const
+{
+ return NPT_ParseInteger32(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger64(NPT_Int64& value, bool relaxed) const
+{
+ return NPT_ParseInteger64(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToInteger64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToInteger64(NPT_UInt64& value, bool relaxed) const
+{
+ return NPT_ParseInteger64(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::ToFloat
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_String::ToFloat(float& value, bool relaxed) const
+{
+ return NPT_ParseFloat(GetChars(), value, relaxed);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimLeft
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimLeft()
+{
+ TrimLeft(NPT_STRINGS_WHITESPACE_CHARS);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimLeft
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimLeft(char c)
+{
+ char s[2] = {c, 0};
+ TrimLeft((const char*)s);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimLeft
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimLeft(const char* chars)
+{
+ if (m_Chars == NULL) return;
+ const char* s = m_Chars;
+ while (char c = *s) {
+ const char* x = chars;
+ while (*x) {
+ if (*x == c) break;
+ x++;
+ }
+ if (*x == 0) break; // not found
+ s++;
+ }
+ if (s == m_Chars) {
+ // nothing was trimmed
+ return;
+ }
+
+ // shift chars to the left
+ char* d = m_Chars;
+ GetBuffer()->SetLength(GetLength()-(s-d));
+ while ((*d++ = *s++)) {};
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimRight
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimRight()
+{
+ TrimRight(NPT_STRINGS_WHITESPACE_CHARS);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimRight
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimRight(char c)
+{
+ char s[2] = {c, 0};
+ TrimRight((const char*)s);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::TrimRight
++---------------------------------------------------------------------*/
+void
+NPT_String::TrimRight(const char* chars)
+{
+ if (m_Chars == NULL || m_Chars[0] == '\0') return;
+ char* tail = m_Chars+GetLength()-1;
+ char* s = tail;
+ while (s != m_Chars-1) {
+ const char* x = chars;
+ while (*x) {
+ if (*x == *s) {
+ *s = '\0';
+ break;
+ }
+ x++;
+ }
+ if (*x == 0) break; // not found
+ s--;
+ }
+ if (s == tail) {
+ // nothing was trimmed
+ return;
+ }
+ GetBuffer()->SetLength(1+(int)(s-m_Chars));
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Trim
++---------------------------------------------------------------------*/
+void
+NPT_String::Trim()
+{
+ TrimLeft();
+ TrimRight();
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Trim
++---------------------------------------------------------------------*/
+void
+NPT_String::Trim(char c)
+{
+ char s[2] = {c, 0};
+ TrimLeft((const char*)s);
+ TrimRight((const char*)s);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::Trim
++---------------------------------------------------------------------*/
+void
+NPT_String::Trim(const char* chars)
+{
+ TrimLeft(chars);
+ TrimRight(chars);
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::operator+(const NPT_String&, const char*)
++---------------------------------------------------------------------*/
+NPT_String
+operator+(const NPT_String& s1, const char* s2)
+{
+ // shortcut
+ if (s2 == NULL) return NPT_String(s1);
+
+ // measure strings
+ NPT_Size s1_length = s1.GetLength();
+ NPT_Size s2_length = NPT_String::StringLength(s2);
+
+ // allocate space for the new string
+ NPT_String result;
+ char* start = result.PrepareToWrite(s1_length+s2_length);
+
+ // concatenate the two strings into the result
+ NPT_String::CopyBuffer(start, s1, s1_length);
+ NPT_String::CopyString(start+s1_length, s2);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::operator+(const NPT_String& , const char*)
++---------------------------------------------------------------------*/
+NPT_String
+operator+(const char* s1, const NPT_String& s2)
+{
+ // shortcut
+ if (s1 == NULL) return NPT_String(s2);
+
+ // measure strings
+ NPT_Size s1_length = NPT_String::StringLength(s1);
+ NPT_Size s2_length = s2.GetLength();
+
+ // allocate space for the new string
+ NPT_String result;
+ char* start = result.PrepareToWrite(s1_length+s2_length);
+
+ // concatenate the two strings into the result
+ NPT_String::CopyBuffer(start, s1, s1_length);
+ NPT_String::CopyString(start+s1_length, s2.GetChars());
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_String::operator+(const NPT_String& , char)
++---------------------------------------------------------------------*/
+NPT_String
+operator+(const NPT_String& s1, char c)
+{
+ // allocate space for the new string
+ NPT_String result;
+ result.Reserve(s1.GetLength()+1);
+
+ // append
+ result = s1;
+ result += c;
+
+ return result;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptStrings.h b/lib/libUPnP/Neptune/Source/Core/NptStrings.h
new file mode 100644
index 0000000000..cbf2522eaa
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptStrings.h
@@ -0,0 +1,339 @@
+/*****************************************************************
+|
+| Neptune - String Objects
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_STRINGS_H_
+#define _NPT_STRINGS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#if defined(NPT_CONFIG_HAVE_NEW_H)
+#include <new>
+#endif
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptList.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_STRING_SEARCH_FAILED = -1;
+
+/*----------------------------------------------------------------------
+| NPT_String
++---------------------------------------------------------------------*/
+class NPT_String
+{
+public:
+ // factories
+ static NPT_String FromInteger(NPT_Int64 value);
+ static NPT_String FromIntegerU(NPT_UInt64 value);
+ static NPT_String Format(const char* format, ...);
+
+ // constructors
+ NPT_String(const NPT_String& str);
+ NPT_String(const char* str);
+ NPT_String(const char* str, NPT_Size length);
+ NPT_String(const char* str, NPT_Ordinal first, NPT_Size length);
+ NPT_String(char c, NPT_Cardinal repeat = 1);
+ NPT_String() : m_Chars(NULL) {}
+ ~NPT_String() { if (m_Chars) delete GetBuffer(); }
+
+ // string info and manipulations
+ bool IsEmpty() const { return m_Chars == NULL || GetBuffer()->GetLength() == 0; }
+ NPT_Size GetLength() const { return m_Chars ? GetBuffer()->GetLength() : 0; }
+ NPT_Size GetCapacity() const { return m_Chars ? GetBuffer()->GetAllocated() : 0; }
+ NPT_Result SetLength(NPT_Size length, bool pad = false);
+ void Assign(const char* chars, NPT_Size size);
+ void Append(const char* chars, NPT_Size size);
+ void Append(const char* s) { Append(s, StringLength(s)); }
+ int Compare(const char* s, bool ignore_case = false) const;
+ static int Compare(const char* s1, const char* s2, bool ignore_case = false);
+ int CompareN(const char* s, NPT_Size count, bool ignore_case = false) const;
+ static int CompareN(const char* s1, const char* s2, NPT_Size count, bool ignore_case = false);
+
+ // substrings
+ NPT_String SubString(NPT_Ordinal first, NPT_Size length) const;
+ NPT_String SubString(NPT_Ordinal first) const {
+ return SubString(first, GetLength());
+ }
+ NPT_String Left(NPT_Size length) const {
+ return SubString(0, length);
+ }
+ NPT_String Right(NPT_Size length) const {
+ return length >= GetLength() ?
+ *this :
+ SubString(GetLength()-length, length);
+ }
+ NPT_List<NPT_String> Split(const char* separator) const;
+ static NPT_String Join(NPT_List<NPT_String>& args, const char* separator);
+
+ // buffer management
+ void Reserve(NPT_Size length);
+
+ // conversions
+ NPT_String ToLowercase() const;
+ NPT_String ToUppercase() const;
+ NPT_Result ToInteger(int& value, bool relaxed = true) const;
+ NPT_Result ToInteger(unsigned int& value, bool relaxed = true) const;
+ NPT_Result ToInteger(long& value, bool relaxed = true) const;
+ NPT_Result ToInteger(unsigned long& value, bool relaxed = true) const;
+ NPT_Result ToInteger32(NPT_Int32& value, bool relaxed = true) const;
+ NPT_Result ToInteger32(NPT_UInt32& value, bool relaxed = true) const;
+ NPT_Result ToInteger64(NPT_Int64& value, bool relaxed = true) const;
+ NPT_Result ToInteger64(NPT_UInt64& value, bool relaxed = true) const;
+ NPT_Result ToFloat(float& value, bool relaxed = true) const;
+
+ // processing
+ void MakeLowercase();
+ void MakeUppercase();
+ void Replace(char a, char b);
+ void Replace(char a, const char* b);
+
+ // search
+ int Find(char c, NPT_Ordinal start = 0, bool ignore_case = false) const;
+ int Find(const char* s, NPT_Ordinal start = 0, bool ignore_case = false) const;
+ int ReverseFind(char c, NPT_Ordinal start = 0, bool ignore_case = false) const;
+ int ReverseFind(const char* s, NPT_Ordinal start = 0, bool ignore_case = false) const;
+ bool StartsWith(const char* s, bool ignore_case = false) const;
+ bool EndsWith(const char* s, bool ignore_case = false) const;
+
+ // editing
+ void Insert(const char* s, NPT_Ordinal where = 0);
+ void Erase(NPT_Ordinal start, NPT_Cardinal count = 1);
+ void Replace(NPT_Ordinal start, NPT_Cardinal count, const char* s);
+ void TrimLeft();
+ void TrimLeft(char c);
+ void TrimLeft(const char* chars);
+ void TrimRight();
+ void TrimRight(char c);
+ void TrimRight(const char* chars);
+ void Trim();
+ void Trim(char c);
+ void Trim(const char* chars);
+
+ // type casting
+ operator char*() const { return m_Chars ? m_Chars: &EmptyString; }
+ operator const char* () const { return m_Chars ? m_Chars: &EmptyString; }
+ const char* GetChars() const { return m_Chars ? m_Chars: &EmptyString; }
+ char* UseChars() { return m_Chars ? m_Chars: &EmptyString; }
+
+ // operator overloading
+ NPT_String& operator=(const char* str);
+ NPT_String& operator=(const NPT_String& str);
+ NPT_String& operator=(char c);
+ const NPT_String& operator+=(const NPT_String& s) {
+ Append(s.GetChars(), s.GetLength());
+ return *this;
+ }
+ const NPT_String& operator+=(const char* s) {
+ Append(s);
+ return *this;
+ }
+ const NPT_String& operator+=(char c) {
+ Append(&c, 1);
+ return *this;
+ }
+ char operator[](int index) const {
+ NPT_ASSERT((unsigned int)index < GetLength());
+ return GetChars()[index];
+ }
+ char& operator[](int index) {
+ NPT_ASSERT((unsigned int)index < GetLength());
+ return UseChars()[index];
+ }
+
+ // friend operators
+ friend NPT_String operator+(const NPT_String& s1, const NPT_String& s2) {
+ return s1+s2.GetChars();
+ }
+ friend NPT_String operator+(const NPT_String& s1, const char* s2);
+ friend NPT_String operator+(const char* s1, const NPT_String& s2);
+ friend NPT_String operator+(const NPT_String& s, char c);
+ friend NPT_String operator+(char c, const NPT_String& s);
+
+protected:
+ // inner classes
+ class Buffer {
+ public:
+ // class methods
+ static Buffer* Allocate(NPT_Size allocated, NPT_Size length) {
+ void* mem = ::operator new(sizeof(Buffer)+allocated+1);
+ return new(mem) Buffer(allocated, length);
+ }
+ static char* Create(NPT_Size allocated, NPT_Size length=0) {
+ Buffer* shared = Allocate(allocated, length);
+ return shared->GetChars();
+ }
+ static char* Create(const char* copy) {
+ NPT_Size length = StringLength(copy);
+ Buffer* shared = Allocate(length, length);
+ CopyString(shared->GetChars(), copy);
+ return shared->GetChars();
+ }
+ static char* Create(const char* copy, NPT_Size length) {
+ Buffer* shared = Allocate(length, length);
+ CopyBuffer(shared->GetChars(), copy, length);
+ shared->GetChars()[length] = '\0';
+ return shared->GetChars();
+ }
+ static char* Create(char c, NPT_Cardinal repeat) {
+ Buffer* shared = Allocate(repeat, repeat);
+ char* s = shared->GetChars();
+ while (repeat--) {
+ *s++ = c;
+ }
+ *s = '\0';
+ return shared->GetChars();
+ }
+
+ // methods
+ char* GetChars() {
+ // return a pointer to the first char
+ return reinterpret_cast<char*>(this+1);
+ }
+ NPT_Size GetLength() const { return m_Length; }
+ void SetLength(NPT_Size length) { m_Length = length; }
+ NPT_Size GetAllocated() const { return m_Allocated; }
+
+ private:
+ // methods
+ Buffer(NPT_Size allocated, NPT_Size length = 0) :
+ m_Length(length),
+ m_Allocated(allocated) {}
+
+ // members
+ NPT_Cardinal m_Length;
+ NPT_Cardinal m_Allocated;
+ // the actual string data follows
+
+ };
+
+ // members
+ char* m_Chars;
+
+private:
+ // friends
+ friend class Buffer;
+
+ // static members
+ static char EmptyString;
+
+ // methods
+ Buffer* GetBuffer() const {
+ return reinterpret_cast<Buffer*>(m_Chars)-1;
+ }
+ void Reset() {
+ if (m_Chars != NULL) {
+ delete GetBuffer();
+ m_Chars = NULL;
+ }
+ }
+ char* PrepareToWrite(NPT_Size length);
+ void PrepareToAppend(NPT_Size length, NPT_Size allocate);
+
+ // static methods
+ static void CopyString(char* dst, const char* src) {
+ while ((*dst++ = *src++)){}
+ }
+
+ static void CopyBuffer(char* dst, const char* src, NPT_Size size) {
+ while (size--) *dst++ = *src++;
+ }
+
+ static NPT_Size StringLength(const char* str) {
+ NPT_Size length = 0;
+ while (*str++) length++;
+ return length;
+ }
+};
+
+/*----------------------------------------------------------------------
+| external operators
++---------------------------------------------------------------------*/
+inline bool operator==(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) == 0;
+}
+inline bool operator==(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) == 0;
+}
+inline bool operator==(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) == 0;
+}
+inline bool operator!=(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) != 0;
+}
+inline bool operator!=(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) != 0;
+}
+inline bool operator!=(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) != 0;
+}
+inline bool operator<(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) < 0;
+}
+inline bool operator<(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) < 0;
+}
+inline bool operator<(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) > 0;
+}
+inline bool operator>(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) > 0;
+}
+inline bool operator>(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) > 0;
+}
+inline bool operator>(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) < 0;
+}
+inline bool operator<=(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) <= 0;
+}
+inline bool operator<=(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) <= 0;
+}
+inline bool operator<=(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) >= 0;
+}
+inline bool operator>=(const NPT_String& s1, const NPT_String& s2) {
+ return s1.Compare(s2) >= 0;
+}
+inline bool operator>=(const NPT_String& s1, const char* s2) {
+ return s1.Compare(s2) >= 0;
+}
+inline bool operator>=(const char* s1, const NPT_String& s2) {
+ return s2.Compare(s1) <= 0;
+}
+
+#endif // _NPT_STRINGS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSystem.cpp b/lib/libUPnP/Neptune/Source/Core/NptSystem.cpp
new file mode 100644
index 0000000000..0d4e9b23f4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSystem.cpp
@@ -0,0 +1,37 @@
+/*****************************************************************
+|
+| Neptune - System
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptSystem.h"
+
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptSystem.h b/lib/libUPnP/Neptune/Source/Core/NptSystem.h
new file mode 100644
index 0000000000..c79d590ac4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptSystem.h
@@ -0,0 +1,60 @@
+/*****************************************************************
+|
+| Neptune - System
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_SYSTEM_H_
+#define _NPT_SYSTEM_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptTime.h"
+
+/*----------------------------------------------------------------------
+| NPT_System
++---------------------------------------------------------------------*/
+class NPT_System
+{
+public:
+ // methods
+ static NPT_Result GetProcessId(NPT_UInt32& id);
+ static NPT_Result GetCurrentTimeStamp(NPT_TimeStamp& now);
+ static NPT_Result Sleep(const NPT_TimeInterval& duration);
+ static NPT_Result SleepUntil(const NPT_TimeStamp& when);
+ static NPT_Result SetRandomSeed(unsigned int seed);
+ static NPT_UInt32 GetRandomInteger();
+
+protected:
+ // constructor
+ NPT_System() {}
+};
+
+#endif // _NPT_SYSTEM_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptThreads.cpp b/lib/libUPnP/Neptune/Source/Core/NptThreads.cpp
new file mode 100644
index 0000000000..dcc59d0768
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptThreads.cpp
@@ -0,0 +1,156 @@
+/*****************************************************************
+|
+| Neptune - Threads
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptThreads.h"
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot::NPT_ThreadCallbackSlot
++---------------------------------------------------------------------*/
+NPT_ThreadCallbackSlot::NPT_ThreadCallbackSlot() :
+ m_CallbackArgs(NULL),
+ m_Shutdown(false),
+ m_NotificationHelper(NULL)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot::Shutdown
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ThreadCallbackSlot::Shutdown()
+{
+ // protect against concurrent access
+ //FIXME: This will not work if another Thread has called ReceiveCallback with a timeout
+ NPT_AutoLock lock(m_ReadLock);
+
+ // signal we are shut down
+ m_Shutdown = true;
+
+ // clear up any pending callbacks
+ m_Pending.SetValue(0);
+ m_Ack.SetValue(1);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot::SetNotificationHelper
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ThreadCallbackSlot::SetNotificationHelper(NotificationHelper* helper)
+{
+ m_NotificationHelper = helper;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot::ReceiveCallback
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ThreadCallbackSlot::ReceiveCallback(NPT_ThreadCallbackReceiver& receiver,
+ NPT_Timeout timeout)
+{
+ // protect against concurrent access
+ //NPT_Debug("NPT_ThreadCallbackSlot::ReceiveCallback - read locking, timeout=%d\n", timeout);
+ NPT_AutoLock lock(m_ReadLock);
+
+ if (timeout) {
+ // wait until there is a pending callback
+ //NPT_Debug("NPT_ThreadCallbackSlot::ReceiveCallback - waiting...\n");
+ NPT_Result result = m_Pending.WaitUntilEquals(1, timeout);
+ if (NPT_FAILED(result)) return result; // don't log here because the result
+ // could be NPT_ERROR_TIMEOUT which
+ // is an expected normal case.
+ //NPT_Debug("NPT_ThreadCallbackSlot::ReceiveCallback - got it\n");
+ } else {
+ // see if something is pending
+ if (m_Pending.GetValue() == 0) {
+ //NPT_Debug("NPT_ThreadCallbackSlot::ReceiveCallback - nothing pending\n");
+ return NPT_ERROR_CALLBACK_NOTHING_PENDING;
+ }
+ }
+
+ // check if we have been shutdown
+ if (m_Shutdown) return NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN;
+
+ // process the callback
+ //NPT_Debug("NPT_ThreadCallbackSlot::ReceiveCallback - calling back\n");
+ receiver.OnCallback(const_cast<void*>(m_CallbackArgs));
+
+ // signal that we've processed the callback
+ m_Pending.SetValue(0);
+ m_Ack.SetValue(1);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot::SendCallback
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ThreadCallbackSlot::SendCallback(void* args)
+{
+ // protect against concurrent access
+ //NPT_Debug("NPT_ThreadCallbackSlot::SendCallback - write locking\n");
+ NPT_AutoLock lock(m_WriteLock);
+
+ // there should be nothing pending
+#if defined(NPT_DEBUG)
+ NPT_ASSERT(m_Pending.GetValue() == 0);
+#endif
+
+ // check if we have been shutdown
+ if (m_Shutdown) return NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN;
+
+ // put the callback args
+ m_CallbackArgs = args;
+ //NPT_Debug("NPT_ThreadCallbackSlot::SendCallback - signalling\n");
+ m_Pending.SetValue(1);
+
+ // call the helper before we wait
+ if (m_NotificationHelper) {
+ m_NotificationHelper->Notify();
+ }
+
+ // wait until the callback has been process, or we've been shutdown
+ //NPT_Debug("NPT_ThreadCallbackSlot::SendCallback - waiting...\n");
+ m_Ack.WaitUntilEquals(1);
+ //NPT_Debug("NPT_ThreadCallbackSlot::SendCallback - got it\n");
+
+ // done
+ m_Ack.SetValue(0);
+ m_CallbackArgs = NULL;
+
+ return m_Shutdown?NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN:NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptThreads.h b/lib/libUPnP/Neptune/Source/Core/NptThreads.h
new file mode 100644
index 0000000000..d79b9ea7ea
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptThreads.h
@@ -0,0 +1,283 @@
+/*****************************************************************
+|
+| Neptune - Threads
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_THREADS_H_
+#define _NPT_THREADS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptInterfaces.h"
+
+/*----------------------------------------------------------------------
+| error codes
++---------------------------------------------------------------------*/
+const int NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN = NPT_ERROR_BASE_THREADS-0;
+const int NPT_ERROR_CALLBACK_NOTHING_PENDING = NPT_ERROR_BASE_THREADS-1;
+
+/*----------------------------------------------------------------------
+| NPT_MutexInterface
++---------------------------------------------------------------------*/
+class NPT_MutexInterface
+{
+ public:
+ // methods
+ virtual ~NPT_MutexInterface() {}
+ virtual NPT_Result Lock() = 0;
+ virtual NPT_Result Unlock() = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Mutex
++---------------------------------------------------------------------*/
+class NPT_Mutex : public NPT_MutexInterface
+{
+ public:
+ // methods
+ NPT_Mutex();
+ ~NPT_Mutex() { delete m_Delegate; }
+ NPT_Result Lock() { return m_Delegate->Lock(); }
+ NPT_Result Unlock() { return m_Delegate->Unlock(); }
+
+ private:
+ // members
+ NPT_MutexInterface* m_Delegate;
+};
+
+/*----------------------------------------------------------------------
+| NPT_AutoLock
++---------------------------------------------------------------------*/
+class NPT_AutoLock
+{
+ public:
+ // methods
+ NPT_AutoLock(NPT_Mutex &mutex) : m_Mutex(mutex) {
+ m_Mutex.Lock();
+ }
+ ~NPT_AutoLock() {
+ m_Mutex.Unlock();
+ }
+
+ private:
+ // members
+ NPT_Mutex& m_Mutex;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Lock
++---------------------------------------------------------------------*/
+template <typename T>
+class NPT_Lock : public T,
+ public NPT_Mutex
+{
+};
+
+/*----------------------------------------------------------------------
+| NPT_SharedVariableInterface
++---------------------------------------------------------------------*/
+class NPT_SharedVariableInterface
+{
+ public:
+ // methods
+ virtual ~NPT_SharedVariableInterface() {}
+ virtual void SetValue(int value)= 0;
+ virtual int GetValue() = 0;
+ virtual NPT_Result WaitUntilEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+ virtual NPT_Result WaitWhileEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_SharedVariable
++---------------------------------------------------------------------*/
+class NPT_SharedVariable : public NPT_SharedVariableInterface
+{
+ public:
+ // methods
+ NPT_SharedVariable(int value = 0);
+ ~NPT_SharedVariable() { delete m_Delegate; }
+ void SetValue(int value) {
+ m_Delegate->SetValue(value);
+ }
+ int GetValue() {
+ return m_Delegate->GetValue();
+ }
+ NPT_Result WaitUntilEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->WaitUntilEquals(value, timeout);
+ }
+ NPT_Result WaitWhileEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->WaitWhileEquals(value, timeout);
+ }
+
+ private:
+ // members
+ NPT_SharedVariableInterface* m_Delegate;
+};
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariableInterface
++---------------------------------------------------------------------*/
+class NPT_AtomicVariableInterface
+{
+ public:
+ // methods
+ virtual ~NPT_AtomicVariableInterface() {}
+ virtual int Increment() = 0;
+ virtual int Decrement() = 0;
+ virtual int GetValue() = 0;
+ virtual void SetValue(int value) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariable
++---------------------------------------------------------------------*/
+class NPT_AtomicVariable : public NPT_AtomicVariableInterface
+{
+ public:
+ // methods
+ NPT_AtomicVariable(int value = 0);
+ ~NPT_AtomicVariable() { delete m_Delegate; }
+ int Increment() { return m_Delegate->Increment();}
+ int Decrement() { return m_Delegate->Decrement();}
+ void SetValue(int value) { m_Delegate->SetValue(value); }
+ int GetValue() { return m_Delegate->GetValue(); }
+
+ private:
+ // members
+ NPT_AtomicVariableInterface* m_Delegate;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Runnable
++---------------------------------------------------------------------*/
+class NPT_Runnable
+{
+public:
+ virtual ~NPT_Runnable() {}
+ virtual void Run() = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ThreadInterface
++---------------------------------------------------------------------*/
+class NPT_ThreadInterface: public NPT_Runnable, public NPT_Interruptible
+{
+ public:
+ // methods
+ virtual ~NPT_ThreadInterface() {}
+ virtual NPT_Result Start() = 0;
+ virtual NPT_Result Wait(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Thread
++---------------------------------------------------------------------*/
+class NPT_Thread : public NPT_ThreadInterface
+{
+ public:
+ // types
+ typedef unsigned long ThreadId;
+
+ // class methods
+ static ThreadId GetCurrentThreadId();
+
+ // methods
+ explicit NPT_Thread(bool detached = false);
+ explicit NPT_Thread(NPT_Runnable& target, bool detached = false);
+ ~NPT_Thread() { delete m_Delegate; }
+
+ // NPT_ThreadInterface methods
+ NPT_Result Start() {
+ return m_Delegate->Start();
+ }
+ NPT_Result Wait(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) {
+ return m_Delegate->Wait(timeout);
+ }
+
+ // NPT_Runnable methods
+ virtual void Run() {}
+
+ // NPT_Interruptible methods
+ virtual NPT_Result Interrupt() {
+ return m_Delegate->Interrupt();
+ }
+
+ private:
+ // members
+ NPT_ThreadInterface* m_Delegate;
+};
+
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackReceiver
++---------------------------------------------------------------------*/
+class NPT_ThreadCallbackReceiver
+{
+public:
+ virtual ~NPT_ThreadCallbackReceiver() {}
+ virtual void OnCallback(void* args) = 0;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ThreadCallbackSlot
++---------------------------------------------------------------------*/
+class NPT_ThreadCallbackSlot
+{
+public:
+ // types
+ class NotificationHelper {
+ public:
+ virtual ~NotificationHelper() {};
+ virtual void Notify(void) = 0;
+ };
+
+ // constructor
+ NPT_ThreadCallbackSlot();
+
+ // methods
+ NPT_Result ReceiveCallback(NPT_ThreadCallbackReceiver& receiver, NPT_Timeout timeout = 0);
+ NPT_Result SendCallback(void* args);
+ NPT_Result SetNotificationHelper(NotificationHelper* helper);
+ NPT_Result Shutdown();
+
+protected:
+ // members
+ volatile void* m_CallbackArgs;
+ volatile bool m_Shutdown;
+ NPT_SharedVariable m_Pending;
+ NPT_SharedVariable m_Ack;
+ NPT_Mutex m_ReadLock;
+ NPT_Mutex m_WriteLock;
+ NotificationHelper* m_NotificationHelper;
+};
+
+#endif // _NPT_THREADS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptTime.cpp b/lib/libUPnP/Neptune/Source/Core/NptTime.cpp
new file mode 100644
index 0000000000..656b33a746
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptTime.cpp
@@ -0,0 +1,524 @@
+/*****************************************************************
+|
+| Neptune - Time
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptTime.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.core.time")
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const char* NPT_TIME_MONTHS[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define NPT_TIME_IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::NPT_TimeStamp
++---------------------------------------------------------------------*/
+NPT_TimeStamp::NPT_TimeStamp(float seconds)
+{
+ m_Seconds = (long)seconds;
+ m_NanoSeconds = (long)(1E9f*(seconds - (float)m_Seconds));
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator float
++---------------------------------------------------------------------*/
+NPT_TimeStamp::operator float() const
+{
+ return ((float)m_Seconds) + ((float)m_NanoSeconds)/1E9f;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator+=
++---------------------------------------------------------------------*/
+NPT_TimeStamp&
+NPT_TimeStamp::operator+=(const NPT_TimeStamp& t)
+{
+ m_Seconds += t.m_Seconds;
+ m_NanoSeconds += t.m_NanoSeconds;
+ if (m_NanoSeconds <= -1000000000) {
+ m_Seconds--;
+ m_NanoSeconds += 1000000000;
+ } else if (m_NanoSeconds >= 1000000000) {
+ m_Seconds++;
+ m_NanoSeconds -= 1000000000;
+ }
+ if (m_NanoSeconds < 0 && m_Seconds > 0) {
+ m_Seconds--;
+ m_NanoSeconds += 1000000000;
+ }
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator-=
++---------------------------------------------------------------------*/
+NPT_TimeStamp&
+NPT_TimeStamp::operator-=(const NPT_TimeStamp& t)
+{
+ m_Seconds -= t.m_Seconds;
+ m_NanoSeconds -= t.m_NanoSeconds;
+ if (m_NanoSeconds <= -1000000000) {
+ m_Seconds--;
+ m_NanoSeconds += 1000000000;
+ } else if (m_NanoSeconds >= 1000000000) {
+ m_Seconds++;
+ m_NanoSeconds -= 1000000000;
+ }
+ if (m_NanoSeconds < 0 && m_Seconds > 0) {
+ m_Seconds--;
+ m_NanoSeconds += 1000000000;
+ }
+ return *this;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator==
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator==(const NPT_TimeStamp& t) const
+{
+ return
+ m_Seconds == t.m_Seconds &&
+ m_NanoSeconds == t.m_NanoSeconds;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator!=
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator!=(const NPT_TimeStamp& t) const
+{
+ return
+ m_Seconds != t.m_Seconds ||
+ m_NanoSeconds != t.m_NanoSeconds;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator>
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator>(const NPT_TimeStamp& t) const
+{
+ return
+ m_Seconds > t.m_Seconds ||
+ (m_Seconds == t.m_Seconds && m_NanoSeconds > t.m_NanoSeconds);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator<
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator<(const NPT_TimeStamp& t) const
+{
+ return
+ m_Seconds < t.m_Seconds ||
+ (m_Seconds == t.m_Seconds && m_NanoSeconds < t.m_NanoSeconds);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator>=
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator>=(const NPT_TimeStamp& t) const
+{
+ return *this > t || *this == t;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator<=
++---------------------------------------------------------------------*/
+bool
+NPT_TimeStamp::operator<=(const NPT_TimeStamp& t) const
+{
+ return *this < t || *this == t;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator+
++---------------------------------------------------------------------*/
+NPT_TimeStamp
+operator+(const NPT_TimeStamp& timestamp, long seconds)
+{
+ // shortcut
+ if (seconds == 0) return NPT_TimeStamp(timestamp);
+
+ NPT_TimeStamp result = timestamp;
+ result.m_Seconds += seconds;
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp::operator-
++---------------------------------------------------------------------*/
+NPT_TimeStamp
+operator-(const NPT_TimeStamp& timestamp, long seconds)
+{
+ // shortcut
+ if (seconds == 0) return NPT_TimeStamp(timestamp);
+
+ NPT_TimeStamp result = timestamp;
+ result.m_Seconds -= seconds;
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| FormatDigits
++---------------------------------------------------------------------*/
+static NPT_Result
+FormatDigits(char* out, NPT_Int32 number, NPT_Int32 num_digits)
+{
+ if (num_digits == 0) {
+ return number?NPT_SUCCESS:NPT_ERROR_OVERFLOW;
+ }
+
+ *(out+num_digits-1) = '0' + (char)(number % 10);
+ return FormatDigits(out, number/10, num_digits-1);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Time::FormatDate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Time::FormatDate(const NPT_Date& date, char* output, NPT_Size size)
+{
+ NPT_Int32 timezone;
+
+ /* make sure we have enough space */
+ if (size < 30) return NPT_FAILURE;
+
+ /* append year */
+ FormatDigits(output, date.local.year, 4);
+ output += 4;
+
+ /* append separator */
+ *(output++) = '-';
+
+ /* append month */
+ FormatDigits(output, date.local.month, 2);
+ output += 2;
+
+ /* append separator */
+ *(output++) = '-';
+
+ /* append day */
+ FormatDigits(output, date.local.day, 2);
+ output += 2;
+
+ /* append separator */
+ *(output++) = 'T';
+
+ /* append hours */
+ FormatDigits(output, date.local.hours, 2);
+ output += 2;
+
+ /* append separator */
+ *(output++) = ':';
+
+ /* append minutes */
+ FormatDigits(output, date.local.minutes, 2);
+ output += 2;
+
+ /* append separator */
+ *(output++) = ':';
+
+ /* append seconds */
+ FormatDigits(output, date.local.seconds, 2);
+ output += 2;
+
+ /* append milliseconds only if non zero */
+ if (date.local.milliseconds) {
+ /* append separator */
+ *(output++) = '.';
+
+ /* append milliseconds */
+ FormatDigits(output, date.local.milliseconds, 3);
+ output += 3;
+ }
+
+ /* append timezone */
+ if (date.timezone) {
+ if (date.timezone > 0) {
+ *(output++) = '-';
+ timezone = date.timezone;
+ } else {
+ *(output++) = '+';
+ timezone = -date.timezone;
+ }
+ FormatDigits(output, timezone / 60, 2);
+ output += 2;
+
+ /* append separator */
+ *(output++) = ':';
+ FormatDigits(output, timezone - ((timezone / 60) * 60), 2);
+ output += 2;
+ } else {
+ *(output++) = 'Z';
+ }
+
+ *output = '\0';
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+ | NPT_Time::GetDateFromString
+ +--------------------------------------------------------------------*/
+NPT_Result
+NPT_Time::GetDateFromString(const char* input, NPT_Date& date)
+{
+ NPT_Cardinal length = NPT_StringLength(input);
+ NPT_Date temp_date;
+ int tz_sign = 0;
+ NPT_Int32 tz_hours = 0;
+ NPT_Cardinal chars_used;
+ NPT_Cardinal offset = 0;
+
+ if (length > 35) return NPT_FAILURE; /* max length up to the nanosecond */
+
+ /* Year */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.year, true, &chars_used));
+ if (chars_used != 4) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Separator */
+ if (input[offset++] != '-') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Month */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.month, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Validate */
+ if (temp_date.local.month > 12) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Separator */
+ if (input[offset++] != '-') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Day */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.day, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Validate */
+ if (temp_date.local.day > 31) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Separator */
+ if (input[offset++] != 'T') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Hour */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.hours, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Validate */
+ if (temp_date.local.hours >= 24) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Separator */
+ if (input[offset++] != ':') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Minute */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.minutes, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Validate */
+ if (temp_date.local.minutes >= 60) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Separator */
+ if (input[offset++] != ':') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Second */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.seconds, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* validate */
+ if (temp_date.local.seconds >= 60) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* fractions of seconds? */
+ if (input[offset] == '.') {
+ /* Separator */
+ ++offset;
+
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.local.milliseconds, true, &chars_used));
+ /* if more than 3 chars, update */
+ for (int i=chars_used-3;i>0;i--) {
+ temp_date.local.milliseconds /= 10;
+ }
+ /* if more than 3 chars, update */
+ for (int i=3-chars_used;i>0;i--) {
+ temp_date.local.milliseconds *= 10;
+ }
+
+ offset += chars_used;
+ } else {
+ temp_date.local.milliseconds = 0;
+ }
+
+ /* Timezone */
+ if (offset < length) {
+ /* 'Z' if present should be the last character. */
+ if (input[offset] == 'Z') {
+ ++offset;
+ temp_date.timezone = 0; /* Z means GMT */
+ } else if (input[offset] == '+') {
+ tz_sign = +1;
+ ++offset;
+ } else if (input[offset] == '-') {
+ tz_sign = -1;
+ ++offset;
+ } else {
+ return NPT_FAILURE;
+ }
+
+ if (tz_sign != 0) {
+ /* Timezone hours */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], tz_hours, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* Separator */
+ if (input[offset++] != ':') NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* Timezone minutes */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(&input[offset], temp_date.timezone, true, &chars_used));
+ if (chars_used != 2) NPT_CHECK_SEVERE(NPT_FAILURE);
+ offset += chars_used;
+
+ /* validate */
+ if (tz_hours > 14) NPT_CHECK_SEVERE(NPT_FAILURE);
+ if (temp_date.timezone >= 60) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ /* no timezone can be greater than 14 hours */
+ if (tz_hours == 14 && temp_date.timezone != 0) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ temp_date.timezone += tz_hours*60;
+ temp_date.timezone *= tz_sign;
+ }
+ } else {
+ temp_date.timezone = 0;
+ }
+
+ /* verify there's nothing else to parse */
+ if (offset != length) NPT_CHECK_SEVERE(NPT_FAILURE);
+
+ date = temp_date;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Time::ParseANSIDate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Time::ParseANSIDate(const char* ansi_date,
+ NPT_Date& date,
+ bool relaxed /* = true */)
+{
+ /*
+ * ANSI Date string in the __DATE__ macro is 11 characters
+ * in the following format: Mmm dd yyyy
+ */
+
+ NPT_Date temp_date;
+
+ /* Reset output param first */
+ NPT_SetMemory(&date, 0, sizeof(date));
+
+ if (NPT_StringLength(ansi_date) != 11) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ NPT_String month = NPT_String(ansi_date, 0, 3);
+ NPT_String day = NPT_String(ansi_date, 4, 2);
+ NPT_String year = NPT_String(ansi_date, 7, 4);
+
+ /* Parse month */
+ for (int i = 0; i < 12; ++i) {
+ if (month.Compare(NPT_TIME_MONTHS[i], relaxed) == 0) {
+ temp_date.local.month = i + 1;
+ break;
+ }
+ }
+
+ if (temp_date.local.month == 0) {
+ NPT_LOG_SEVERE_1("Unable to parse build date month='%s'", month.GetChars());
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ /* Parse day */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(day, temp_date.local.day, relaxed));
+ if (temp_date.local.day <= 0 || temp_date.local.day > 31) {
+ NPT_LOG_SEVERE_1("Unable to parse build date day='%s'", day.GetChars());
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ /* Parse year */
+ NPT_CHECK_SEVERE(NPT_ParseInteger32(year, temp_date.local.year, relaxed));
+ if (temp_date.local.year < NPT_TIME_MIN_YEAR || temp_date.local.year > NPT_TIME_MAX_YEAR) {
+ NPT_LOG_SEVERE_1("Unable to parse build date year='%s'", year.GetChars());
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ date = temp_date;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Time::ParseRFC850Date
++---------------------------------------------------------------------*/
+#ifdef TODO
+NPT_Result
+NPT_Time::ParseRFC850Date(const char* rfc850_date, NPT_Date& date)
+{
+ /* RFC850 in the following format:
+ Weekday, DD-Mon-YY HH:MM:SS TIMEZONE
+ */
+ NPT_Result res;
+ NPT_String rfc850 = rfc850_date;
+ NPT_List<NPT_String> fragments = rfc850.Split(" ");
+
+ return NPT_SUCCESS;
+}
+#endif
diff --git a/lib/libUPnP/Neptune/Source/Core/NptTime.h b/lib/libUPnP/Neptune/Source/Core/NptTime.h
new file mode 100644
index 0000000000..38e27ae4a0
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptTime.h
@@ -0,0 +1,150 @@
+/*****************************************************************
+|
+| Neptune - Time
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_TIME_H_
+#define _NPT_TIME_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+
+/*----------------------------------------------------------------------
+| NPT_TimeStamp
++---------------------------------------------------------------------*/
+class NPT_TimeStamp
+{
+ public:
+ // methods
+ NPT_TimeStamp(unsigned long seconds = 0, unsigned long nano_seconds = 0) :
+ m_Seconds(seconds), m_NanoSeconds(nano_seconds) {}
+ NPT_TimeStamp(float seconds);
+ operator float() const;
+ NPT_TimeStamp& operator+=(const NPT_TimeStamp& time_stamp);
+ NPT_TimeStamp& operator-=(const NPT_TimeStamp& time_stamp);
+ bool operator==(const NPT_TimeStamp& time_stamp) const;
+ bool operator!=(const NPT_TimeStamp& time_stamp) const;
+ bool operator>(const NPT_TimeStamp& time_stamp) const;
+ bool operator<(const NPT_TimeStamp& time_stamp) const;
+ bool operator>=(const NPT_TimeStamp& time_stamp) const;
+ bool operator<=(const NPT_TimeStamp& time_stamp) const;
+
+ // friend operators
+ friend NPT_TimeStamp operator+(const NPT_TimeStamp& timestamp, long seconds);
+ friend NPT_TimeStamp operator-(const NPT_TimeStamp& timestamp, long seconds);
+
+ // members
+ long m_Seconds;
+ long m_NanoSeconds;
+};
+
+/*----------------------------------------------------------------------
+| operator+
++---------------------------------------------------------------------*/
+inline
+NPT_TimeStamp
+operator+(const NPT_TimeStamp& t1, const NPT_TimeStamp& t2)
+{
+ NPT_TimeStamp t = t1;
+ return t += t2;
+}
+
+/*----------------------------------------------------------------------
+| operator-
++---------------------------------------------------------------------*/
+inline
+NPT_TimeStamp
+operator-(const NPT_TimeStamp& t1, const NPT_TimeStamp& t2)
+{
+ NPT_TimeStamp t = t1;
+ return t -= t2;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TimeInterval
++---------------------------------------------------------------------*/
+typedef NPT_TimeStamp NPT_TimeInterval;
+
+/*----------------------------------------------------------------------
+| NPT_DateTime
++---------------------------------------------------------------------*/
+typedef struct {
+ NPT_Int32 year;
+ NPT_Int32 month;
+ NPT_Int32 day;
+ NPT_Int32 hours;
+ NPT_Int32 minutes;
+ NPT_Int32 seconds;
+ NPT_Int32 milliseconds;
+} NPT_DateTime;
+
+typedef NPT_Int32 NPT_TimeZone; /* minutes westward of GMT */
+typedef NPT_DateTime NPT_LocalDate;
+
+/*----------------------------------------------------------------------
+| NPT_Date
++---------------------------------------------------------------------*/
+typedef struct {
+ NPT_LocalDate local;
+ NPT_TimeZone timezone;
+} NPT_Date;
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+#define NPT_TIME_MIN_YEAR 1970
+#define NPT_TIME_MAX_YEAR 2106
+
+/*----------------------------------------------------------------------
+| NPT_Time
++---------------------------------------------------------------------*/
+class NPT_Time
+{
+public:
+ // methods
+ static NPT_Result GetGMTDateFromTimeStamp(const NPT_TimeStamp& timestamp,
+ NPT_Date& date);
+ static NPT_Result GetLocalDate(NPT_LocalDate& today, NPT_TimeStamp& now);
+
+ // helper functions
+ static NPT_Result FormatDate(const NPT_Date& date,
+ char* output,
+ NPT_Size size);
+ static NPT_Result GetDateFromString(const char* input,
+ NPT_Date& date);
+ static NPT_Result ParseANSIDate(const char* ansi_date,
+ NPT_Date& date,
+ bool relaxed = true);
+ static NPT_Result ParseRFC850Date(const char* rfc850_date,
+ NPT_Date& date);
+};
+
+#endif // _NPT_TIME_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptTls.cpp b/lib/libUPnP/Neptune/Source/Core/NptTls.cpp
new file mode 100644
index 0000000000..abe5339ccf
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptTls.cpp
@@ -0,0 +1,492 @@
+/*****************************************************************
+|
+| Neptune - TLS/SSL Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#if defined(NPT_CONFIG_ENABLE_TLS)
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTls.h"
+#include "NptLogging.h"
+#include "NptUtils.h"
+#include "NptSockets.h"
+
+#include "ssl.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+//NPT_SET_LOCAL_LOGGER("neptune.tls")
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_TLS_CONTEXT_DEFAULT_SESSION_CACHE = 16;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef NPT_Reference<NPT_TlsSessionImpl> NPT_TlsSessionImplReference;
+
+/*----------------------------------------------------------------------
+| NPT_Tls_MapResult
++---------------------------------------------------------------------*/
+static NPT_Result
+NPT_Tls_MapResult(int err)
+{
+ switch (err) {
+ case SSL_ERROR_CONN_LOST: return NPT_ERROR_CONNECTION_ABORTED;
+ case SSL_ERROR_TIMEOUT: return NPT_ERROR_TIMEOUT;
+ case SSL_ERROR_EOS: return NPT_ERROR_EOS;
+ case SSL_ERROR_NOT_SUPPORTED: return NPT_ERROR_NOT_SUPPORTED;
+ case SSL_ERROR_INVALID_HANDSHAKE: return NPT_ERROR_TLS_INVALID_HANDSHAKE;
+ case SSL_ERROR_INVALID_PROT_MSG: return NPT_ERROR_TLS_INVALID_PROTOCOL_MESSAGE;
+ case SSL_ERROR_INVALID_HMAC: return NPT_ERROR_TLS_INVALID_HMAC;
+ case SSL_ERROR_INVALID_VERSION: return NPT_ERROR_TLS_INVALID_VERSION;
+ case SSL_ERROR_INVALID_SESSION: return NPT_ERROR_TLS_INVALID_SESSION;
+ case SSL_ERROR_NO_CIPHER: return NPT_ERROR_TLS_NO_CIPHER;
+ case SSL_ERROR_BAD_CERTIFICATE: return NPT_ERROR_TLS_BAD_CERTIFICATE;
+ case SSL_ERROR_INVALID_KEY: return NPT_ERROR_INVALID_KEY;
+ case 0: return NPT_SUCCESS;
+ default: return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsContextImpl
++---------------------------------------------------------------------*/
+class NPT_TlsContextImpl {
+public:
+ NPT_TlsContextImpl() :
+ m_SSL_CTX(ssl_ctx_new(SSL_SERVER_VERIFY_LATER, NPT_TLS_CONTEXT_DEFAULT_SESSION_CACHE)) {};
+ ~NPT_TlsContextImpl() { ssl_ctx_free(m_SSL_CTX); }
+
+ NPT_Result LoadKey(NPT_TlsKeyFormat key_format,
+ const unsigned char* key_data,
+ NPT_Size key_data_size,
+ const char* password);
+
+ SSL_CTX* m_SSL_CTX;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsContextImpl::LoadKey
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsContextImpl::LoadKey(NPT_TlsKeyFormat key_format,
+ const unsigned char* key_data,
+ NPT_Size key_data_size,
+ const char* password)
+{
+ int object_type;
+ switch (key_format) {
+ case NPT_TLS_KEY_FORMAT_RSA_PRIVATE: object_type = SSL_OBJ_RSA_KEY; break;
+ case NPT_TLS_KEY_FORMAT_PKCS8: object_type = SSL_OBJ_PKCS8; break;
+ case NPT_TLS_KEY_FORMAT_PKCS12: object_type = SSL_OBJ_PKCS12; break;
+ default: return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ int result = ssl_obj_memory_load(m_SSL_CTX, object_type, key_data, key_data_size, password);
+ return NPT_Tls_MapResult(result);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsStreamAdapter
++---------------------------------------------------------------------*/
+struct NPT_TlsStreamAdapter
+{
+ static int Read(SSL_SOCKET* _self, void* buffer, unsigned int size) {
+ NPT_TlsStreamAdapter* self = (NPT_TlsStreamAdapter*)_self;
+ NPT_Size bytes_read = 0;
+ NPT_Result result = self->m_Input->Read(buffer, size, &bytes_read);
+ if (NPT_FAILED(result)) {
+ switch (result) {
+ case NPT_ERROR_EOS: return SSL_ERROR_EOS;
+ case NPT_ERROR_TIMEOUT: return SSL_ERROR_TIMEOUT;
+ default: return SSL_ERROR_CONN_LOST;
+ }
+ }
+ return bytes_read;
+ }
+
+ static int Write(SSL_SOCKET* _self, const void* buffer, unsigned int size) {
+ NPT_TlsStreamAdapter* self = (NPT_TlsStreamAdapter*)_self;
+ NPT_Size bytes_written = 0;
+ NPT_Result result = self->m_Output->Write(buffer, size, &bytes_written);
+ if (NPT_FAILED(result)) {
+ switch (result) {
+ case NPT_ERROR_EOS: return SSL_ERROR_EOS;
+ case NPT_ERROR_TIMEOUT: return SSL_ERROR_TIMEOUT;
+ default: return SSL_ERROR_CONN_LOST;
+ }
+ }
+ return bytes_written;
+ }
+
+ NPT_TlsStreamAdapter(NPT_InputStreamReference input,
+ NPT_OutputStreamReference output) :
+ m_Input(input), m_Output(output) {
+ m_Base.Read = Read;
+ m_Base.Write = Write;
+ }
+
+ SSL_SOCKET m_Base;
+ NPT_InputStreamReference m_Input;
+ NPT_OutputStreamReference m_Output;
+};
+
+
+/*----------------------------------------------------------------------
+| NPT_TlsSessionImpl
++---------------------------------------------------------------------*/
+class NPT_TlsSessionImpl {
+public:
+ NPT_TlsSessionImpl(SSL_CTX* context,
+ NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output) :
+ m_SSL_CTX(context),
+ m_SSL(NULL),
+ m_StreamAdapter(input, output) {}
+ ~NPT_TlsSessionImpl() { ssl_free(m_SSL); }
+
+ // methods
+ NPT_Result Handshake();
+ NPT_Result GetSessionId(NPT_DataBuffer& session_id);
+ NPT_UInt32 GetCipherSuiteId();
+ NPT_Result GetPeerCertificateInfo(NPT_TlsCertificateInfo& cert_info);
+
+ // members
+ SSL_CTX* m_SSL_CTX;
+ SSL* m_SSL;
+ NPT_TlsStreamAdapter m_StreamAdapter;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsSessionImpl::Handshake
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsSessionImpl::Handshake()
+{
+ if (m_SSL == NULL) {
+ // we have not performed the handshake yet
+ m_SSL = ssl_client_new(m_SSL_CTX, &m_StreamAdapter.m_Base, NULL, 0);
+ }
+
+ int result = ssl_handshake_status(m_SSL);
+ return NPT_Tls_MapResult(result);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsSessionImpl::GetSessionId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsSessionImpl::GetSessionId(NPT_DataBuffer& session_id)
+{
+ if (m_SSL == NULL) {
+ // no handshake done
+ session_id.SetDataSize(0);
+ return NPT_ERROR_INVALID_STATE;
+ }
+
+ // return the session id
+ session_id.SetData(ssl_get_session_id(m_SSL),
+ ssl_get_session_id_size(m_SSL));
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsSessionImpl::GetCipherSuiteId
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_TlsSessionImpl::GetCipherSuiteId()
+{
+ if (m_SSL == NULL) {
+ // no handshake done
+ return 0;
+ }
+
+ return ssl_get_cipher_id(m_SSL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsSessionImpl::GetPeerCertificateInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsSessionImpl::GetPeerCertificateInfo(NPT_TlsCertificateInfo& cert_info)
+{
+ cert_info.subject.common_name = ssl_get_cert_dn(m_SSL, SSL_X509_CERT_COMMON_NAME);
+ cert_info.subject.organization = ssl_get_cert_dn(m_SSL, SSL_X509_CERT_ORGANIZATION);
+ cert_info.subject.organizational_name = ssl_get_cert_dn(m_SSL, SSL_X509_CERT_ORGANIZATIONAL_NAME);
+ cert_info.issuer.common_name = ssl_get_cert_dn(m_SSL, SSL_X509_CA_CERT_COMMON_NAME);
+ cert_info.issuer.organization = ssl_get_cert_dn(m_SSL, SSL_X509_CA_CERT_ORGANIZATION);
+ cert_info.issuer.organizational_name = ssl_get_cert_dn(m_SSL, SSL_X509_CA_CERT_ORGANIZATIONAL_NAME);
+
+ ssl_get_cert_fingerprints(m_SSL, cert_info.fingerprint.md5, cert_info.fingerprint.sha1);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsInputStream
++---------------------------------------------------------------------*/
+class NPT_TlsInputStream : public NPT_InputStream {
+public:
+ NPT_TlsInputStream(NPT_TlsSessionImplReference& session) :
+ m_Session(session),
+ m_Position(0),
+ m_RecordCacheData(NULL),
+ m_RecordCacheSize(0) {}
+
+ // NPT_InputStream methods
+ virtual NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ virtual NPT_Result Seek(NPT_Position) { return NPT_ERROR_NOT_SUPPORTED; }
+ virtual NPT_Result Tell(NPT_Position& offset) { offset = m_Position; return NPT_SUCCESS; }
+ virtual NPT_Result GetSize(NPT_LargeSize& size) { size=0; return NPT_ERROR_NOT_SUPPORTED; }
+ virtual NPT_Result GetAvailable(NPT_LargeSize& available);
+
+private:
+ NPT_TlsSessionImplReference m_Session;
+ NPT_Position m_Position;
+ uint8_t* m_RecordCacheData;
+ NPT_Size m_RecordCacheSize;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // setup default values
+ if (bytes_read) *bytes_read = 0;
+
+ // quick check for edge case
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // read a new record if we don't have one cached
+ if (m_RecordCacheData == NULL) {
+ int ssl_result;
+ do {
+ ssl_result = ssl_read(m_Session->m_SSL, &m_RecordCacheData);
+ } while (ssl_result == 0);
+ if (ssl_result < 0) {
+ return NPT_Tls_MapResult(ssl_result);
+ }
+ m_RecordCacheSize = ssl_result;
+ }
+
+ // we now have data in cache
+ if (bytes_to_read > m_RecordCacheSize) {
+ // read at most what's in the cache
+ bytes_to_read = m_RecordCacheSize;
+ }
+ NPT_CopyMemory(buffer, m_RecordCacheData, bytes_to_read);
+ if (bytes_read) *bytes_read = bytes_to_read;
+
+ // update the record cache
+ m_RecordCacheSize -= bytes_to_read;
+ if (m_RecordCacheSize == 0) {
+ // nothing left in the cache
+ m_RecordCacheData = NULL;
+ } else {
+ // move the cache pointer
+ m_RecordCacheData += bytes_to_read;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsInputStream::GetAvailable(NPT_LargeSize& /*available*/)
+{
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsOutputStream
++---------------------------------------------------------------------*/
+class NPT_TlsOutputStream : public NPT_OutputStream {
+public:
+ NPT_TlsOutputStream(NPT_TlsSessionImplReference& session) :
+ m_Session(session),
+ m_Position(0) {}
+
+ // NPT_OutputStream methods
+ virtual NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written = NULL);
+ virtual NPT_Result Seek(NPT_Position) { return NPT_ERROR_NOT_SUPPORTED; }
+ virtual NPT_Result Tell(NPT_Position& offset) { offset = m_Position; return NPT_SUCCESS; }
+
+private:
+ NPT_TlsSessionImplReference m_Session;
+ NPT_Position m_Position;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ // setup default values
+ if (bytes_written) *bytes_written = 0;
+
+ // quick check for edge case
+ if (bytes_to_write == 0) return NPT_SUCCESS;
+
+ // write some data
+ int ssl_result;
+ do {
+ ssl_result = ssl_write(m_Session->m_SSL, (const uint8_t*)buffer, bytes_to_write);
+ } while (ssl_result == 0);
+ if (ssl_result < 0) {
+ return NPT_Tls_MapResult(ssl_result);
+ }
+ m_Position += ssl_result;
+ if (bytes_written) *bytes_written = (NPT_Size)ssl_result;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsContext::NPT_TlsContext
++---------------------------------------------------------------------*/
+NPT_TlsContext::NPT_TlsContext() :
+ m_Impl(new NPT_TlsContextImpl())
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsContext::~NPT_TlsContext
++---------------------------------------------------------------------*/
+NPT_TlsContext::~NPT_TlsContext()
+{
+ delete m_Impl;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsContext::LoadKey
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsContext::LoadKey(NPT_TlsKeyFormat key_format,
+ const unsigned char* key_data,
+ NPT_Size key_data_size,
+ const char* password)
+{
+ return m_Impl->LoadKey(key_format, key_data, key_data_size, password);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::NPT_TlsClientSession
++---------------------------------------------------------------------*/
+NPT_TlsClientSession::NPT_TlsClientSession(NPT_TlsContextReference& context,
+ NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output) :
+ m_Context(context),
+ m_Impl(new NPT_TlsSessionImpl(context->m_Impl->m_SSL_CTX, input, output))
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::~NPT_TlsClientSession
++---------------------------------------------------------------------*/
+NPT_TlsClientSession::~NPT_TlsClientSession()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::Handshake
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsClientSession::Handshake()
+{
+ return m_Impl->Handshake();
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::GetSessionId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsClientSession::GetSessionId(NPT_DataBuffer& session_id)
+{
+ return m_Impl->GetSessionId(session_id);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::GetCipherSuiteId
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_TlsClientSession::GetCipherSuiteId()
+{
+ return m_Impl->GetCipherSuiteId();
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsSession::GetPeerCertificateInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsClientSession::GetPeerCertificateInfo(NPT_TlsCertificateInfo& cert_info)
+{
+ return m_Impl->GetPeerCertificateInfo(cert_info);
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsClientSession::GetInputStream(NPT_InputStreamReference& stream)
+{
+ stream = new NPT_TlsInputStream(m_Impl);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_TlsClientSession::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ stream = new NPT_TlsOutputStream(m_Impl);
+ return NPT_SUCCESS;
+}
+
+#endif // NPT_CONFIG_ENABLE_TLS
diff --git a/lib/libUPnP/Neptune/Source/Core/NptTls.h b/lib/libUPnP/Neptune/Source/Core/NptTls.h
new file mode 100644
index 0000000000..26dabb9004
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptTls.h
@@ -0,0 +1,161 @@
+/*****************************************************************
+|
+| Neptune - TLS/SSL Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_TLS_H_
+#define _NPT_TLS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptStreams.h"
+
+/*----------------------------------------------------------------------
+| error codes
++---------------------------------------------------------------------*/
+const NPT_Result NPT_ERROR_INVALID_PASSWORD = (NPT_ERROR_BASE_TLS-1);
+const NPT_Result NPT_ERROR_TLS_INVALID_HANDSHAKE = (NPT_ERROR_BASE_TLS-2);
+const NPT_Result NPT_ERROR_TLS_INVALID_PROTOCOL_MESSAGE = (NPT_ERROR_BASE_TLS-3);
+const NPT_Result NPT_ERROR_TLS_INVALID_HMAC = (NPT_ERROR_BASE_TLS-4);
+const NPT_Result NPT_ERROR_TLS_INVALID_VERSION = (NPT_ERROR_BASE_TLS-5);
+const NPT_Result NPT_ERROR_TLS_INVALID_SESSION = (NPT_ERROR_BASE_TLS-6);
+const NPT_Result NPT_ERROR_TLS_NO_CIPHER = (NPT_ERROR_BASE_TLS-7);
+const NPT_Result NPT_ERROR_TLS_BAD_CERTIFICATE = (NPT_ERROR_BASE_TLS-8);
+const NPT_Result NPT_ERROR_INVALID_KEY = (NPT_ERROR_BASE_TLS-9);
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_TLS_NULL_WITH_NULL_NULL = 0x00;
+const unsigned int NPT_TLS_RSA_WITH_RC4_128_MD5 = 0x04;
+const unsigned int NPT_TLS_RSA_WITH_RC4_128_SHA = 0x05;
+const unsigned int NPT_TLS_RSA_WITH_AES_128_CBC_SHA = 0x2F;
+const unsigned int NPT_TLS_RSA_WITH_AES_256_CBC_SHA = 0x35;
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_TlsContextImpl;
+class NPT_TlsSessionImpl;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ NPT_TLS_KEY_FORMAT_RSA_PRIVATE,
+ NPT_TLS_KEY_FORMAT_PKCS8,
+ NPT_TLS_KEY_FORMAT_PKCS12
+} NPT_TlsKeyFormat;
+
+/*----------------------------------------------------------------------
+| NPT_TlsContext
++---------------------------------------------------------------------*/
+class NPT_TlsContext
+{
+public:
+ NPT_TlsContext();
+ ~NPT_TlsContext();
+
+ // methods
+ NPT_Result LoadKey(NPT_TlsKeyFormat key_format,
+ const unsigned char* key_data,
+ NPT_Size key_data_size,
+ const char* password);
+
+
+protected:
+ NPT_TlsContextImpl* m_Impl;
+
+ // friends
+ friend class NPT_TlsClientSession;
+ friend class NPT_TlsServerSession;
+};
+
+typedef NPT_Reference<NPT_TlsContext> NPT_TlsContextReference;
+
+/*----------------------------------------------------------------------
+| NPT_TlsCertificateInfo
++---------------------------------------------------------------------*/
+struct NPT_TlsCertificateInfo
+{
+ struct {
+ NPT_String common_name;
+ NPT_String organization;
+ NPT_String organizational_name;
+ } subject;
+ struct {
+ NPT_String common_name;
+ NPT_String organization;
+ NPT_String organizational_name;
+ } issuer;
+ struct {
+ unsigned char sha1[20];
+ unsigned char md5[16];
+ } fingerprint;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsClientSession
++---------------------------------------------------------------------*/
+class NPT_TlsClientSession
+{
+public:
+ NPT_TlsClientSession(NPT_TlsContextReference& context,
+ NPT_InputStreamReference& input,
+ NPT_OutputStreamReference& output);
+ ~NPT_TlsClientSession();
+ NPT_Result Handshake();
+ NPT_Result GetSessionId(NPT_DataBuffer& session_id);
+ NPT_UInt32 GetCipherSuiteId();
+ NPT_Result GetPeerCertificateInfo(NPT_TlsCertificateInfo& info);
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+
+protected:
+ NPT_TlsContextReference m_Context;
+ NPT_Reference<NPT_TlsSessionImpl> m_Impl;
+};
+
+/*----------------------------------------------------------------------
+| NPT_TlsServerSession
++---------------------------------------------------------------------*/
+class NPT_TlsServerSession
+{
+public:
+ NPT_TlsServerSession(NPT_TlsContext& context,
+ NPT_InputStreamReference input,
+ NPT_OutputStreamReference output);
+
+protected:
+ NPT_TlsSessionImpl* m_Impl;
+};
+
+#endif // _NPT_TLS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptTypes.h b/lib/libUPnP/Neptune/Source/Core/NptTypes.h
new file mode 100644
index 0000000000..743b80537e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptTypes.h
@@ -0,0 +1,149 @@
+/*****************************************************************
+|
+| Neptune - Types
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_TYPES_H_
+#define _NPT_TYPES_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+
+/*----------------------------------------------------------------------
+| sized types (this assumes that ints are 32 bits)
++---------------------------------------------------------------------*/
+typedef NPT_CONFIG_INT64_TYPE NPT_Int64;
+typedef unsigned NPT_CONFIG_INT64_TYPE NPT_UInt64;
+typedef unsigned int NPT_UInt32;
+typedef int NPT_Int32;
+typedef unsigned short NPT_UInt16;
+typedef short NPT_Int16;
+typedef unsigned char NPT_UInt8;
+typedef char NPT_Int8;
+typedef float NPT_Float;
+
+/*----------------------------------------------------------------------
+| named types
++---------------------------------------------------------------------*/
+typedef int NPT_Result;
+typedef unsigned int NPT_Cardinal;
+typedef unsigned int NPT_Ordinal;
+typedef unsigned long NPT_Size;
+typedef NPT_UInt64 NPT_LargeSize;
+typedef signed long NPT_Offset;
+typedef NPT_UInt64 NPT_Position;
+typedef long NPT_Timeout;
+typedef void NPT_Interface;
+typedef unsigned char NPT_Byte;
+typedef unsigned int NPT_Flags;
+typedef void* NPT_Any;
+typedef const void* NPT_AnyConst;
+
+/*----------------------------------------------------------------------
+| limits
++---------------------------------------------------------------------*/
+#if defined(NPT_CONFIG_HAVE_LIMITS_H)
+#include <limits.h>
+#endif
+
+#if !defined(NPT_INT_MIN)
+#if defined(NPT_CONFIG_HAVE_INT_MIN)
+#define NPT_INT_MIN INT_MIN
+#endif
+#endif
+
+#if !defined(NPT_INT_MAX)
+#if defined(NPT_CONFIG_HAVE_INT_MAX)
+#define NPT_INT_MAX INT_MAX
+#endif
+#endif
+
+#if !defined(NPT_UINT_MAX)
+#if defined(NPT_CONFIG_HAVE_UINT_MAX)
+#define NPT_UINT_MAX UINT_MAX
+#endif
+#endif
+
+#if !defined(NPT_LONG_MIN)
+#if defined(NPT_CONFIG_HAVE_LONG_MIN)
+#define NPT_LONG_MIN LONG_MIN
+#endif
+#endif
+
+#if !defined(NPT_LONG_MAX)
+#if defined(NPT_CONFIG_HAVE_LONG_MAX)
+#define NPT_LONG_MAX LONG_MAX
+#endif
+#endif
+
+#if !defined(NPT_ULONG_MAX)
+#if defined(NPT_CONFIG_HAVE_ULONG_MAX)
+#define NPT_ULONG_MAX ULONG_MAX
+#endif
+#endif
+
+#if !defined(NPT_INT32_MAX)
+#define NPT_INT32_MAX 0x7FFFFFFF
+#endif
+
+#if !defined(NPT_INT32_MIN)
+#define NPT_INT32_MIN (-NPT_INT32_MAX - 1)
+#endif
+
+#if !defined(NPT_UINT32_MAX)
+#define NPT_UINT32_MAX 0xFFFFFFFF
+#endif
+
+#if !defined(NPT_INT64_MAX)
+#if defined(NPT_CONFIG_HAVE_LLONG_MAX)
+#define NPT_INT64_MAX LLONG_MAX
+#else
+#define NPT_INT64_MAX 0x7FFFFFFFFFFFFFFFLL
+#endif
+#endif
+
+#if !defined(NPT_INT64_MIN)
+#if defined(NPT_CONFIG_HAVE_LLONG_MIN)
+#define NPT_INT64_MIN LLONG_MIN
+#else
+#define NPT_INT64_MIN (-NPT_INT64_MAX - 1LL)
+#endif
+#endif
+
+#if !defined(NPT_UINT64_MAX)
+#if defined(NPT_CONFIG_HAVE_ULLONG_MAX)
+#define NPT_UINT64_MAX ULLONG_MAX
+#else
+#define NPT_UINT64_MAX 0xFFFFFFFFFFFFFFFFULL
+#endif
+#endif
+
+#endif // _NPT_TYPES_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptUri.cpp b/lib/libUPnP/Neptune/Source/Core/NptUri.cpp
new file mode 100644
index 0000000000..4e03ba8308
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptUri.cpp
@@ -0,0 +1,756 @@
+/*****************************************************************
+|
+| Neptune - URI
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ***************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptUri.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_Uri::ParseScheme
++---------------------------------------------------------------------*/
+NPT_Uri::SchemeId
+NPT_Uri::ParseScheme(const NPT_String& scheme)
+{
+ if (scheme == "http") {
+ return SCHEME_ID_HTTP;
+ } else {
+ return SCHEME_ID_UNKNOWN;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Uri::SetScheme
++---------------------------------------------------------------------*/
+void
+NPT_Uri::SetScheme(const char* scheme)
+{
+ m_Scheme = scheme;
+ m_Scheme.MakeLowercase();
+ m_SchemeId = ParseScheme(m_Scheme);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Uri::SetSchemeFromUri
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Uri::SetSchemeFromUri(const char* uri)
+{
+ const char* start = uri;
+ char c;
+ while ((c =*uri++)) {
+ if (c == ':') {
+ m_Scheme.Assign(start, (NPT_Size)(uri-start-1));
+ m_Scheme.MakeLowercase();
+ m_SchemeId = ParseScheme(m_Scheme);
+ return NPT_SUCCESS;
+ } else if ((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ (c == '+') ||
+ (c == '.') ||
+ (c == '-')) {
+ continue;
+ } else {
+ break;
+ }
+ }
+ return NPT_ERROR_INVALID_SYNTAX;
+}
+
+/*----------------------------------------------------------------------
+Appendix A. Collected ABNF for URI
+
+ URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
+
+ hier-part = "//" authority path-abempty
+ / path-absolute
+ / path-rootless
+ / path-empty
+
+ URI-reference = URI / relative-ref
+
+ absolute-URI = scheme ":" hier-part [ "?" query ]
+
+ relative-ref = relative-part [ "?" query ] [ "#" fragment ]
+
+ relative-part = "//" authority path-abempty
+ / path-absolute
+ / path-noscheme
+ / path-empty
+
+ scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+
+ authority = [ userinfo "@" ] host [ ":" port ]
+ userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
+ host = IP-literal / IPv4address / reg-name
+ port = *DIGIT
+
+ IP-literal = "[" ( IPv6address / IPvFuture ) "]"
+
+ IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
+
+ IPv6address = 6( h16 ":" ) ls32
+ / "::" 5( h16 ":" ) ls32
+ / [ h16 ] "::" 4( h16 ":" ) ls32
+ / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
+ / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
+ / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
+ / [ *4( h16 ":" ) h16 ] "::" ls32
+ / [ *5( h16 ":" ) h16 ] "::" h16
+ / [ *6( h16 ":" ) h16 ] "::"
+
+ h16 = 1*4HEXDIG
+ ls32 = ( h16 ":" h16 ) / IPv4address
+ IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
+ dec-octet = DIGIT ; 0-9
+ / %x31-39 DIGIT ; 10-99
+ / "1" 2DIGIT ; 100-199
+ / "2" %x30-34 DIGIT ; 200-249
+ / "25" %x30-35 ; 250-255
+
+ reg-name = *( unreserved / pct-encoded / sub-delims )
+
+ path = path-abempty ; begins with "/" or is empty
+ / path-absolute ; begins with "/" but not "//"
+ / path-noscheme ; begins with a non-colon segment
+ / path-rootless ; begins with a segment
+ / path-empty ; zero characters
+
+ path-abempty = *( "/" segment )
+ path-absolute = "/" [ segment-nz *( "/" segment ) ]
+ path-noscheme = segment-nz-nc *( "/" segment )
+ path-rootless = segment-nz *( "/" segment )
+ path-empty = 0<pchar>
+
+ segment = *pchar
+ segment-nz = 1*pchar
+ segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
+ ; non-zero-length segment without any colon ":"
+
+ pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+
+ query = *( pchar / "/" / "?" )
+
+ fragment = *( pchar / "/" / "?" )
+
+ pct-encoded = "%" HEXDIG HEXDIG
+
+ unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ reserved = gen-delims / sub-delims
+ gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+ sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ / "*" / "+" / "," / ";" / "="
+
+---------------------------------------------------------------------*/
+
+#define NPT_URI_ALWAYS_ENCODE " !\"<>\\^`{|}"
+
+/*----------------------------------------------------------------------
+| NPT_Uri::PathCharsToEncode
++---------------------------------------------------------------------*/
+const char* const
+NPT_Uri::PathCharsToEncode = NPT_URI_ALWAYS_ENCODE "?#[]";
+
+/*----------------------------------------------------------------------
+| NPT_Uri::QueryCharsToEncode
++---------------------------------------------------------------------*/
+const char* const
+NPT_Uri::QueryCharsToEncode = NPT_URI_ALWAYS_ENCODE "#[]";
+
+/*----------------------------------------------------------------------
+| NPT_Uri::FragmentCharsToEncode
++---------------------------------------------------------------------*/
+const char* const
+NPT_Uri::FragmentCharsToEncode = NPT_URI_ALWAYS_ENCODE "[]";
+
+/*----------------------------------------------------------------------
+| NPT_Uri::UnsafeCharsToEncode
++---------------------------------------------------------------------*/
+const char* const
+NPT_Uri::UnsafeCharsToEncode = NPT_URI_ALWAYS_ENCODE; // and ' ?
+
+/*----------------------------------------------------------------------
+| NPT_Uri::PercentEncode
++---------------------------------------------------------------------*/
+NPT_String
+NPT_Uri::PercentEncode(const char* str, const char* chars, bool encode_percents)
+{
+ NPT_String encoded;
+
+ // check args
+ if (str == NULL) return encoded;
+
+ // reserve at least the size of the current uri
+ encoded.Reserve(NPT_StringLength(str));
+
+ // process each character
+ char escaped[3];
+ escaped[0] = '%';
+ while (unsigned char c = *str++) {
+ bool encode = false;
+ if (encode_percents && c == '%') {
+ encode = true;
+ } else if (c < ' ' || c > '~') {
+ encode = true;
+ } else {
+ const char* match = chars;
+ while (*match) {
+ if (c == *match) {
+ encode = true;
+ break;
+ }
+ ++match;
+ }
+ }
+ if (encode) {
+ // encode
+ NPT_ByteToHex(c, &escaped[1], true);
+ encoded.Append(escaped, 3);
+ } else {
+ // no encoding required
+ encoded += c;
+ }
+ }
+
+ return encoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Uri::PercentDecode
++---------------------------------------------------------------------*/
+NPT_String
+NPT_Uri::PercentDecode(const char* str)
+{
+ NPT_String decoded;
+
+ // check args
+ if (str == NULL) return decoded;
+
+ // reserve at least the size of the current uri
+ decoded.Reserve(NPT_StringLength(str));
+
+ // process each character
+ while (unsigned char c = *str++) {
+ if (c == '%') {
+ // needs to be unescaped
+ unsigned char unescaped;
+ if (NPT_SUCCEEDED(NPT_HexToByte(str, unescaped))) {
+ decoded += unescaped;
+ str += 2;
+ } else {
+ // not a valid escape sequence, just keep the %
+ decoded += c;
+ }
+ } else {
+ // no unescaping required
+ decoded += c;
+ }
+ }
+
+ return decoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::NPT_UrlQuery
++---------------------------------------------------------------------*/
+NPT_UrlQuery::NPT_UrlQuery(const char* query)
+{
+ Parse(query);
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::UrlEncode
++---------------------------------------------------------------------*/
+NPT_String
+NPT_UrlQuery::UrlEncode(const char* str, bool encode_percents)
+{
+ NPT_String encoded = NPT_Uri::PercentEncode(
+ str,
+ ";/?:@&=+$," /* reserved as defined in RFC 2396 */
+ "\"#<>\\^`{|}", /* other unsafe chars */
+ encode_percents);
+ encoded.Replace(' ','+');
+
+ return encoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::UrlDecode
++---------------------------------------------------------------------*/
+NPT_String
+NPT_UrlQuery::UrlDecode(const char* str)
+{
+ NPT_String decoded = NPT_Uri::PercentDecode(str);
+ decoded.Replace('+', ' ');
+ return decoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_UrlQuery::ToString()
+{
+ NPT_String encoded;
+ bool separator = false;
+ for (NPT_List<Field>::Iterator it = m_Fields.GetFirstItem();
+ it;
+ ++it) {
+ Field& field = *it;
+ if (separator) encoded += "&";
+ separator = true;
+ encoded += UrlEncode(field.m_Name, false);
+ encoded += "=";
+ encoded += UrlEncode(field.m_Value, false);
+ }
+
+ return encoded;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_UrlQuery::Parse(const char* query)
+{
+ const char* cursor = query;
+ NPT_String name;
+ NPT_String value;
+ bool in_name = true;
+ do {
+ if (*cursor == '\0' || *cursor == '&') {
+ if (!name.IsEmpty() && !value.IsEmpty()) {
+ AddField(UrlDecode(name), UrlDecode(value));
+ }
+ name.SetLength(0);
+ value.SetLength(0);
+ in_name = true;
+ } else if (*cursor == '=' && in_name) {
+ in_name = false;
+ } else {
+ if (in_name) {
+ name += *cursor;
+ } else {
+ value += *cursor;
+ }
+ }
+ } while (*cursor++);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::AddField
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_UrlQuery::AddField(const char* name, const char* value)
+{
+ return m_Fields.Add(Field(name, value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::SetField
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_UrlQuery::SetField(const char* name, const char* value)
+{
+ for (NPT_List<Field>::Iterator it = m_Fields.GetFirstItem();
+ it;
+ ++it) {
+ Field& field = *it;
+ if (field.m_Name == name) {
+ field.m_Value = value;
+ return NPT_SUCCESS;
+ }
+ }
+
+ // field not found, add it
+ return AddField(name, value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery::GetField
++---------------------------------------------------------------------*/
+const char*
+NPT_UrlQuery::GetField(const char* name)
+{
+ for (NPT_List<Field>::Iterator it = m_Fields.GetFirstItem();
+ it;
+ ++it) {
+ Field& field = *it;
+ if (field.m_Name == name) return field.m_Value;
+ }
+
+ // field not found
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ NPT_URL_PARSER_STATE_START,
+ NPT_URL_PARSER_STATE_SCHEME,
+ NPT_URL_PARSER_STATE_LEADING_SLASH,
+ NPT_URL_PARSER_STATE_HOST,
+ NPT_URL_PARSER_STATE_PORT,
+ NPT_URL_PARSER_STATE_PATH,
+ NPT_URL_PARSER_STATE_QUERY
+} NPT_UrlParserState;
+
+/*----------------------------------------------------------------------
+| NPT_Url::NPT_Url
++---------------------------------------------------------------------*/
+NPT_Url::NPT_Url() :
+ m_Port(NPT_URL_INVALID_PORT),
+ m_Path("/"),
+ m_HasQuery(false),
+ m_HasFragment(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::NPT_Url
++---------------------------------------------------------------------*/
+NPT_Url::NPT_Url(const char* url, SchemeId expected_scheme, NPT_UInt16 default_port) :
+ m_Port(NPT_URL_INVALID_PORT),
+ m_HasQuery(false),
+ m_HasFragment(false)
+{
+ // check parameters
+ if (url == NULL) return;
+
+ // set the uri scheme
+ if (NPT_FAILED(SetSchemeFromUri(url))) {
+ return;
+ }
+ if (expected_scheme != SCHEME_ID_UNKNOWN) {
+ // check that we got the expected scheme
+ if (m_SchemeId != expected_scheme) return;
+ }
+ url += m_Scheme.GetLength()+1;
+
+ // intialize the parser
+ NPT_UrlParserState state = NPT_URL_PARSER_STATE_START;
+ const char* mark = url;
+
+ // parse the URL
+ char c;
+ do {
+ c = *url++;
+ switch (state) {
+ case NPT_URL_PARSER_STATE_START:
+ if (c == '/') {
+ state = NPT_URL_PARSER_STATE_LEADING_SLASH;
+ } else {
+ return;
+ }
+ break;
+
+ case NPT_URL_PARSER_STATE_LEADING_SLASH:
+ if (c == '/') {
+ state = NPT_URL_PARSER_STATE_HOST;
+ mark = url;
+ } else {
+ return;
+ }
+ break;
+
+ case NPT_URL_PARSER_STATE_HOST:
+ if (c == ':' || c == '/' || c == '\0') {
+ m_Host.Assign(mark, (NPT_Size)(url-1-mark));
+ if (c == ':') {
+ mark = url;
+ state = NPT_URL_PARSER_STATE_PORT;
+ } else {
+ mark = url-1;
+ m_Port = default_port;
+ state = NPT_URL_PARSER_STATE_PATH;
+ }
+ }
+ break;
+
+ case NPT_URL_PARSER_STATE_PORT:
+ if (c >= '0' && c <= '9') {
+ unsigned int val = m_Port*10+(c-'0');
+ if (val > 65535) {
+ m_Port = NPT_URL_INVALID_PORT;
+ return;
+ }
+ m_Port = val;
+ } else if (c == '/' || c == '\0') {
+ mark = url-1;
+ state = NPT_URL_PARSER_STATE_PATH;
+ } else {
+ // invalid character
+ m_Port = NPT_URL_INVALID_PORT;
+ return;
+ }
+ break;
+
+ case NPT_URL_PARSER_STATE_PATH:
+ if (*mark) {
+ SetPathPlus(mark);
+ return;
+ }
+ break;
+
+ default:
+ break;
+ }
+ } while (c);
+
+ // if we get here, the path is implicit
+ m_Path = "/";
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::NPT_Url
++---------------------------------------------------------------------*/
+NPT_Url::NPT_Url(const char* scheme,
+ const char* host,
+ NPT_UInt16 port,
+ const char* path,
+ const char* query,
+ const char* fragment) :
+ m_Host(host),
+ m_Port(port),
+ m_Path(path),
+ m_HasQuery(query != NULL),
+ m_Query(query),
+ m_HasFragment(fragment != NULL),
+ m_Fragment(fragment)
+{
+ SetScheme(scheme);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::IsValid
++---------------------------------------------------------------------*/
+bool
+NPT_Url::IsValid() const
+{
+ return m_Port != NPT_URL_INVALID_PORT && !m_Host.IsEmpty();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetHost
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetHost(const char* host)
+{
+ const char* port = host;
+ while (*port && *port != ':') port++;
+ if (*port) {
+ m_Host.Assign(host, (NPT_Size)(port-host));
+ unsigned int port_number;
+ if (NPT_SUCCEEDED(NPT_ParseInteger(port+1, port_number, false))) {
+ m_Port = (short)port_number;
+ }
+ } else {
+ m_Host = host;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetHost
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetPort(NPT_UInt16 port)
+{
+ m_Port = port;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetPath
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetPath(const char* path)
+{
+ m_Path = path;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetPathPlus
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetPathPlus(const char* path_plus)
+{
+ // check parameters
+ if (path_plus == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // reset any existing values
+ m_Path.SetLength(0);
+ m_Query.SetLength(0);
+ m_Fragment.SetLength(0);
+ m_HasQuery = false;
+ m_HasFragment = false;
+
+ // intialize the parser
+ NPT_UrlParserState state = NPT_URL_PARSER_STATE_PATH;
+ const char* mark = path_plus;
+
+ // parse the path+
+ char c;
+ do {
+ c = *path_plus++;
+ switch (state) {
+ case NPT_URL_PARSER_STATE_PATH:
+ if (c == '\0' || c == '?' || c == '#') {
+ if (path_plus-1 > mark) {
+ m_Path.Append(mark, (NPT_Size)(path_plus-1-mark));
+ m_Path = PercentDecode(m_Path);
+ }
+ if (c == '?') {
+ m_HasQuery = true;
+ state = NPT_URL_PARSER_STATE_QUERY;
+ mark = path_plus;
+ } else if (c == '#') {
+ m_HasFragment = true;
+ m_Fragment = path_plus;
+ m_Fragment = PercentDecode(m_Fragment);
+ return NPT_SUCCESS;
+ }
+ }
+ break;
+
+ case NPT_URL_PARSER_STATE_QUERY:
+ if (c == '\0' || c == '#') {
+ m_Query.Assign(mark, (NPT_Size)(path_plus-1-mark));
+ // do not decode query so it can be parsed properly by NPT_UrlQuery
+ if (c == '#') {
+ m_HasFragment = true;
+ m_Fragment = path_plus;
+ m_Fragment = PercentDecode(m_Fragment);
+ }
+ return NPT_SUCCESS;
+ }
+ break;
+
+ default:
+ break;
+ }
+ } while (c);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetQuery
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetQuery(const char* query)
+{
+ m_Query = query;
+ m_HasQuery = query!=NULL && NPT_StringLength(query)>0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::SetFragment
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Url::SetFragment(const char* fragment)
+{
+ m_Fragment = fragment;
+ m_HasFragment = fragment!=NULL;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::ToRequestString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_Url::ToRequestString(bool with_fragment) const
+{
+ NPT_String result;
+ NPT_Size length = m_Path.GetLength()+1;
+ if (m_HasQuery) length += 1+m_Query.GetLength();
+ if (with_fragment) length += 1+m_Fragment.GetLength();
+ result.Reserve(length);
+
+ if (m_Path.IsEmpty()) {
+ result += "/";
+ } else {
+ result += PercentEncode(m_Path, PathCharsToEncode);
+ }
+ if (m_HasQuery) {
+ result += "?";
+ result += PercentEncode(m_Query, QueryCharsToEncode);
+ }
+ if (with_fragment && m_HasFragment) {
+ result += "#";
+ result += PercentEncode(m_Fragment, FragmentCharsToEncode);
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::ToStringWithDefaultPort
++---------------------------------------------------------------------*/
+NPT_String
+NPT_Url::ToStringWithDefaultPort(NPT_UInt16 default_port, bool with_fragment) const
+{
+ NPT_String result;
+ NPT_String request = ToRequestString(with_fragment);
+ NPT_Size length = m_Scheme.GetLength()+3+m_Host.GetLength()+6+request.GetLength();
+
+ result.Reserve(length);
+ result += m_Scheme;
+ result += "://";
+ result += m_Host;
+ if (m_Port != default_port) {
+ NPT_String port = NPT_String::FromInteger(m_Port);
+ result += ":";
+ result += port;
+ }
+ result += request;
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Url::ToString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_Url::ToString(bool with_fragment) const
+{
+ return ToStringWithDefaultPort(0, with_fragment);
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptUri.h b/lib/libUPnP/Neptune/Source/Core/NptUri.h
new file mode 100644
index 0000000000..58ce423dcc
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptUri.h
@@ -0,0 +1,170 @@
+/*****************************************************************
+|
+| Neptune - URI
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_URI_H_
+#define _NPT_URI_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptStrings.h"
+#include "NptList.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const NPT_UInt16 NPT_URL_INVALID_PORT = 0;
+
+/*----------------------------------------------------------------------
+| NPT_Uri
++---------------------------------------------------------------------*/
+class NPT_Uri {
+public:
+ // types
+ typedef enum {
+ SCHEME_ID_UNKNOWN,
+ SCHEME_ID_HTTP
+ } SchemeId;
+
+ // constants. use as a parameter to Encode()
+ static const char* const PathCharsToEncode;
+ static const char* const QueryCharsToEncode;
+ static const char* const FragmentCharsToEncode;
+ static const char* const UnsafeCharsToEncode;
+
+ // class methods
+ static NPT_String PercentEncode(const char* str, const char* chars, bool encode_percents=true);
+ static NPT_String PercentDecode(const char* str);
+ static SchemeId ParseScheme(const NPT_String& scheme);
+
+ // methods
+ NPT_Uri() : m_SchemeId(SCHEME_ID_UNKNOWN) {}
+ virtual ~NPT_Uri() {}
+ const NPT_String& GetScheme() const {
+ return m_Scheme;
+ }
+ void SetScheme(const char* scheme);
+ NPT_Result SetSchemeFromUri(const char* uri);
+ SchemeId GetSchemeId() const {
+ return m_SchemeId;
+ }
+
+protected:
+ // members
+ NPT_String m_Scheme;
+ SchemeId m_SchemeId;
+};
+
+/*----------------------------------------------------------------------
+| NPT_UrlQuery
++---------------------------------------------------------------------*/
+class NPT_UrlQuery
+{
+public:
+ // class methods
+ static NPT_String UrlEncode(const char* str, bool encode_percents=true);
+ static NPT_String UrlDecode(const char* str);
+
+ // types
+ struct Field {
+ Field(const char* name, const char* value) :
+ m_Name(name), m_Value(value) {}
+ NPT_String m_Name;
+ NPT_String m_Value;
+ };
+
+ // constructor
+ NPT_UrlQuery() {}
+ NPT_UrlQuery(const char* query);
+
+ // accessors
+ NPT_List<Field>& GetFields() { return m_Fields; }
+
+ // methods
+ NPT_Result Parse(const char* query);
+ NPT_Result SetField(const char* name, const char* value);
+ NPT_Result AddField(const char* name, const char* value);
+ const char* GetField(const char* name);
+ NPT_String ToString();
+
+private:
+ // members
+ NPT_List<Field> m_Fields;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Url
++---------------------------------------------------------------------*/
+class NPT_Url : public NPT_Uri {
+public:
+ // constructors and destructor
+ NPT_Url();
+ NPT_Url(const char* url,
+ SchemeId expected_scheme = SCHEME_ID_UNKNOWN,
+ NPT_UInt16 default_port = NPT_URL_INVALID_PORT);
+ NPT_Url(const char* scheme,
+ const char* host,
+ NPT_UInt16 port,
+ const char* path,
+ const char* query = NULL,
+ const char* fragment = NULL);
+
+ // methods
+ const NPT_String& GetHost() const { return m_Host; }
+ NPT_UInt16 GetPort() const { return m_Port; }
+ const NPT_String& GetPath() const { return m_Path; }
+ const NPT_String& GetQuery() const { return m_Query; }
+ const NPT_String& GetFragment() const { return m_Fragment; }
+ virtual bool IsValid() const;
+ bool HasQuery() const { return m_HasQuery; }
+ bool HasFragment() const { return m_HasFragment; }
+ NPT_Result SetHost(const char* host);
+ NPT_Result SetPort(NPT_UInt16 port);
+ NPT_Result SetPath(const char* path);
+ NPT_Result SetPathPlus(const char* path_plus);
+ NPT_Result SetQuery(const char* query);
+ NPT_Result SetFragment(const char* fragment);
+ virtual NPT_String ToRequestString(bool with_fragment = false) const;
+ virtual NPT_String ToStringWithDefaultPort(NPT_UInt16 default_port, bool with_fragment = true) const;
+ virtual NPT_String ToString(bool with_fragment = true) const;
+
+protected:
+ // members
+ NPT_String m_Host;
+ NPT_UInt16 m_Port;
+ NPT_String m_Path;
+ bool m_HasQuery;
+ NPT_String m_Query;
+ bool m_HasFragment;
+ NPT_String m_Fragment;
+};
+
+#endif // _NPT_URI_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp b/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp
new file mode 100644
index 0000000000..9c61b8adbe
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptUtils.cpp
@@ -0,0 +1,800 @@
+/*****************************************************************
+|
+| Neptune - Utils
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <math.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptDebug.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+#if defined(NPT_CONFIG_HAVE_LIMITS_H)
+#include <limits.h>
+#endif
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_FORMAT_LOCAL_BUFFER_SIZE = 1024;
+const unsigned int NPT_FORMAT_BUFFER_INCREMENT = 4096;
+const unsigned int NPT_FORMAT_BUFFER_MAX_SIZE = 65536;
+
+/*----------------------------------------------------------------------
+| NPT_BytesToInt64Be
++---------------------------------------------------------------------*/
+NPT_UInt64
+NPT_BytesToInt64Be(const unsigned char* bytes)
+{
+ return
+ ( ((NPT_UInt64)bytes[0])<<56 ) |
+ ( ((NPT_UInt64)bytes[1])<<48 ) |
+ ( ((NPT_UInt64)bytes[2])<<40 ) |
+ ( ((NPT_UInt64)bytes[3])<<32 ) |
+ ( ((NPT_UInt64)bytes[4])<<24 ) |
+ ( ((NPT_UInt64)bytes[5])<<16 ) |
+ ( ((NPT_UInt64)bytes[6])<<8 ) |
+ ( ((NPT_UInt64)bytes[7]) );
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesToInt32Be
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_BytesToInt32Be(const unsigned char* bytes)
+{
+ return
+ ( ((NPT_UInt32)bytes[0])<<24 ) |
+ ( ((NPT_UInt32)bytes[1])<<16 ) |
+ ( ((NPT_UInt32)bytes[2])<<8 ) |
+ ( ((NPT_UInt32)bytes[3]) );
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesToInt24Be
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_BytesToInt24Be(const unsigned char* bytes)
+{
+ return
+ ( ((NPT_UInt32)bytes[0])<<16 ) |
+ ( ((NPT_UInt32)bytes[1])<<8 ) |
+ ( ((NPT_UInt32)bytes[2]) );
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesToInt16Be
++---------------------------------------------------------------------*/
+NPT_UInt16
+NPT_BytesToInt16Be(const unsigned char* bytes)
+{
+ return
+ ( ((NPT_UInt16)bytes[0])<<8 ) |
+ ( ((NPT_UInt16)bytes[1]) );
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesFromInt64Be
++---------------------------------------------------------------------*/
+void
+NPT_BytesFromInt64Be(unsigned char* buffer, NPT_UInt64 value)
+{
+ buffer[0] = (unsigned char)(value>>56) & 0xFF;
+ buffer[1] = (unsigned char)(value>>48) & 0xFF;
+ buffer[2] = (unsigned char)(value>>40) & 0xFF;
+ buffer[3] = (unsigned char)(value>>32) & 0xFF;
+ buffer[4] = (unsigned char)(value>>24) & 0xFF;
+ buffer[5] = (unsigned char)(value>>16) & 0xFF;
+ buffer[6] = (unsigned char)(value>> 8) & 0xFF;
+ buffer[7] = (unsigned char)(value ) & 0xFF;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesFromInt32Be
++---------------------------------------------------------------------*/
+void
+NPT_BytesFromInt32Be(unsigned char* buffer, NPT_UInt32 value)
+{
+ buffer[0] = (unsigned char)(value>>24) & 0xFF;
+ buffer[1] = (unsigned char)(value>>16) & 0xFF;
+ buffer[2] = (unsigned char)(value>> 8) & 0xFF;
+ buffer[3] = (unsigned char)(value ) & 0xFF;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesFromInt24Be
++---------------------------------------------------------------------*/
+void
+NPT_BytesFromInt24Be(unsigned char* buffer, NPT_UInt32 value)
+{
+ buffer[0] = (unsigned char)(value>>16) & 0xFF;
+ buffer[1] = (unsigned char)(value>> 8) & 0xFF;
+ buffer[2] = (unsigned char)(value ) & 0xFF;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BytesFromInt16Be
++---------------------------------------------------------------------*/
+void
+NPT_BytesFromInt16Be(unsigned char* buffer, NPT_UInt16 value)
+{
+ buffer[0] = (unsigned char)((value>> 8) & 0xFF);
+ buffer[1] = (unsigned char)((value ) & 0xFF);
+}
+
+#if !defined(NPT_CONFIG_HAVE_SNPRINTF)
+/*----------------------------------------------------------------------
+| NPT_FormatString
++---------------------------------------------------------------------*/
+int
+NPT_FormatString(char* /*str*/, NPT_Size /*size*/, const char* /*format*/, ...)
+{
+ NPT_ASSERT(0); // not implemented yet
+ return 0;
+}
+#endif // NPT_CONFIG_HAVE_SNPRINTF
+
+/*----------------------------------------------------------------------
+| NPT_NibbleToHex
++---------------------------------------------------------------------*/
+char
+NPT_NibbleToHex(unsigned int nibble, bool uppercase /* = true */)
+{
+ NPT_ASSERT(nibble < 16);
+ if (uppercase) {
+ return (nibble < 10) ? ('0' + nibble) : ('A' + (nibble-10));
+ } else {
+ return (nibble < 10) ? ('0' + nibble) : ('a' + (nibble-10));
+ }
+ return (nibble < 10) ? ('0' + nibble) : ('A' + (nibble-10));
+}
+
+/*----------------------------------------------------------------------
+| NPT_HexToNibble
++---------------------------------------------------------------------*/
+int
+NPT_HexToNibble(char hex)
+{
+ if (hex >= 'a' && hex <= 'f') {
+ return ((hex - 'a') + 10);
+ } else if (hex >= 'A' && hex <= 'F') {
+ return ((hex - 'A') + 10);
+ } else if (hex >= '0' && hex <= '9') {
+ return (hex - '0');
+ } else {
+ return -1;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_ByteToHex
++---------------------------------------------------------------------*/
+void
+NPT_ByteToHex(NPT_Byte b, char* buffer, bool uppercase)
+{
+ buffer[0] = NPT_NibbleToHex((b>>4) & 0x0F, uppercase);
+ buffer[1] = NPT_NibbleToHex(b & 0x0F, uppercase);
+}
+
+/*----------------------------------------------------------------------
+| NPT_HexToByte
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_HexToByte(const char* buffer, NPT_Byte& b)
+{
+ int nibble_0 = NPT_HexToNibble(buffer[0]);
+ if (nibble_0 < 0) return NPT_ERROR_INVALID_SYNTAX;
+
+ int nibble_1 = NPT_HexToNibble(buffer[1]);
+ if (nibble_1 < 0) return NPT_ERROR_INVALID_SYNTAX;
+
+ b = (nibble_0 << 4) | nibble_1;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_HexString
++---------------------------------------------------------------------*/
+NPT_String
+NPT_HexString(const unsigned char* data,
+ NPT_Size data_size,
+ const char* separator,
+ bool uppercase)
+{
+ NPT_String result;
+
+ // quick check
+ if (data == NULL || data_size == 0) return result;
+
+ // set the result size
+ NPT_Size separator_length = separator?NPT_StringLength(separator):0;
+ result.SetLength(data_size*2+(data_size-1)*separator_length);
+
+ // build the string
+ const unsigned char* src = data;
+ char* dst = result.UseChars();
+ while (data_size--) {
+ NPT_ByteToHex(*src++, dst, uppercase);
+ dst += 2;
+ if (data_size) {
+ NPT_CopyMemory(dst, separator, separator_length);
+ dst += separator_length;
+ }
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseFloat
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseFloat(const char* str, float& result, bool relaxed)
+{
+ // safe default value
+ result = 0.0f;
+
+ // check params
+ if (str == NULL || *str == '\0') {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // ignore leading whitespace
+ if (relaxed) {
+ while (*str == ' ' || *str == '\t') {
+ str++;
+ }
+ }
+ if (*str == '\0') {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // check for sign
+ bool negative = false;
+ if (*str == '-') {
+ // negative number
+ negative = true;
+ str++;
+ } else if (*str == '+') {
+ // skip the + sign
+ str++;
+ }
+
+ // parse the digits
+ bool after_radix = false;
+ bool empty = true;
+ float value = 0.0f;
+ float decimal = 10.0f;
+ char c;
+ while ((c = *str++)) {
+ if (c == '.') {
+ if (after_radix || (*str < '0' || *str > '9')) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ } else {
+ after_radix = true;
+ }
+ } else if (c >= '0' && c <= '9') {
+ empty = false;
+ if (after_radix) {
+ value += (float)(c-'0')/decimal;
+ decimal *= 10.0f;
+ } else {
+ value = 10.0f*value + (float)(c-'0');
+ }
+ } else if (c == 'e' || c == 'E') {
+ // exponent
+ if (*str == '+' || *str == '-' || (*str >= '0' && *str <= '9')) {
+ int exponent = 0;
+ if (NPT_SUCCEEDED(NPT_ParseInteger(str, exponent, relaxed))) {
+ value *= (float)pow(10.0f, (float)exponent);
+ break;
+ } else {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+ } else {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+ } else {
+ if (relaxed) {
+ break;
+ } else {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+ }
+ }
+
+ // check that the value was non empty
+ if (empty) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // return the result
+ result = negative ? -value : value;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger64(const char* str, NPT_Int64& result, bool relaxed, NPT_Cardinal* chars_used)
+{
+ // safe default value
+ result = 0;
+ if (chars_used) *chars_used = 0;
+
+ if (str == NULL) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // ignore leading whitespace
+ if (relaxed) {
+ while (*str == ' ' || *str == '\t') {
+ str++;
+ if (chars_used) (*chars_used)++;
+ }
+ }
+ if (*str == '\0') {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // check for sign
+ bool negative = false;
+ if (*str == '-') {
+ // negative number
+ negative = true;
+ str++;
+ if (chars_used) (*chars_used)++;
+ } else if (*str == '+') {
+ // skip the + sign
+ str++;
+ if (chars_used) (*chars_used)++;
+ }
+
+ // check for overflows
+ NPT_Int64 max = NPT_INT64_MAX/10;
+
+ // adjust the max for overflows when the value is negative
+ if (negative && ((NPT_INT64_MAX%10) == 9)) ++max;
+
+ // parse the digits
+ bool empty = true;
+ NPT_Int64 value = 0;
+ char c;
+ while ((c = *str++)) {
+ if (c >= '0' && c <= '9') {
+ if (value < 0 || value > max) return NPT_ERROR_OVERFLOW;
+ value = 10*value + (c-'0');
+ if (value < 0 && (!negative || value != NPT_INT64_MIN)) return NPT_ERROR_OVERFLOW;
+ empty = false;
+ if (chars_used) (*chars_used)++;
+ } else {
+ if (relaxed) {
+ break;
+ } else {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+ }
+ }
+
+ // check that the value was non empty
+ if (empty) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // return the result
+ result = negative ? -value : value;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger64
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger64(const char* str, NPT_UInt64& result, bool relaxed, NPT_Cardinal* chars_used)
+{
+ // safe default value
+ result = 0;
+ if (chars_used) *chars_used = 0;
+
+ if (str == NULL) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // ignore leading whitespace
+ if (relaxed) {
+ while (*str == ' ' || *str == '\t') {
+ str++;
+ if (chars_used) (*chars_used)++;
+ }
+ }
+ if (*str == '\0') {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // parse the digits
+ bool empty = true;
+ NPT_UInt64 value = 0;
+ char c;
+ while ((c = *str++)) {
+ if (c >= '0' && c <= '9') {
+ NPT_UInt64 new_value;
+ if (value > NPT_UINT64_MAX/10) return NPT_ERROR_OVERFLOW;
+ new_value = 10*value + (c-'0');
+ if (new_value < value) return NPT_ERROR_OVERFLOW;
+ value = new_value;
+ empty = false;
+ if (chars_used) (*chars_used)++;
+ } else {
+ if (relaxed) {
+ break;
+ } else {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+ }
+ }
+
+ // check that the value was non empty
+ if (empty) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // return the result
+ result = value;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger32(const char* str, NPT_Int32& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_Int64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 < NPT_INT32_MIN || value_64 > NPT_INT32_MAX) {
+ return NPT_ERROR_OVERFLOW;
+ }
+ value = (NPT_Int32)value_64;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger32
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger32(const char* str, NPT_UInt32& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_UInt64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 > (NPT_UInt64)NPT_UINT32_MAX) return NPT_ERROR_OVERFLOW;
+ value = (NPT_UInt32)value_64;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger(const char* str, long& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_Int64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 < NPT_LONG_MIN || value_64 > NPT_LONG_MAX) {
+ return NPT_ERROR_OVERFLOW;
+ }
+ value = (long)value_64;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger(const char* str, unsigned long& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_UInt64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 > NPT_ULONG_MAX) {
+ return NPT_ERROR_OVERFLOW;
+ }
+ value = (unsigned long)value_64;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger(const char* str, int& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_Int64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 < NPT_INT_MIN || value_64 > NPT_INT_MAX) {
+ return NPT_ERROR_OVERFLOW;
+ }
+ value = (int)value_64;
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ParseInteger
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseInteger(const char* str, unsigned int& value, bool relaxed, NPT_Cardinal* chars_used)
+{
+ NPT_UInt64 value_64;
+ NPT_Result result = NPT_ParseInteger64(str, value_64, relaxed, chars_used);
+ value = 0;
+ if (NPT_SUCCEEDED(result)) {
+ if (value_64 > NPT_UINT_MAX) {
+ return NPT_ERROR_OVERFLOW;
+ }
+ value = (unsigned int)value_64;
+ }
+ return result;
+}
+
+#if !defined(NPT_CONFIG_HAVE_STRCPY)
+/*----------------------------------------------------------------------
+| NPT_CopyString
++---------------------------------------------------------------------*/
+void
+NPT_CopyString(char* dst, const char* src)
+{
+ while(*dst++ = *src++);
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_FormatOutput
++---------------------------------------------------------------------*/
+void
+NPT_FormatOutput(void (*function)(void* parameter, const char* message),
+ void* function_parameter,
+ const char* format,
+ va_list args)
+{
+ char local_buffer[NPT_FORMAT_LOCAL_BUFFER_SIZE];
+ unsigned int buffer_size = NPT_FORMAT_LOCAL_BUFFER_SIZE;
+ char* buffer = local_buffer;
+
+ for(;;) {
+ int result;
+
+ /* try to format the message (it might not fit) */
+ result = NPT_FormatStringVN(buffer, buffer_size-1, format, args);
+ buffer[buffer_size-1] = 0; /* force a NULL termination */
+ if (result >= 0) break;
+
+ /* the buffer was too small, try something bigger */
+ buffer_size = (buffer_size+NPT_FORMAT_BUFFER_INCREMENT)*2;
+ if (buffer_size > NPT_FORMAT_BUFFER_MAX_SIZE) break;
+ if (buffer != local_buffer) delete[] buffer;
+ buffer = new char[buffer_size];
+ if (buffer == NULL) return;
+ }
+
+ (*function)(function_parameter, buffer);
+ if (buffer != local_buffer) delete[] buffer;
+}
+
+/*----------------------------------------------------------------------
+| local types
++---------------------------------------------------------------------*/
+typedef enum {
+ NPT_MIME_PARAMETER_PARSER_STATE_NEED_NAME,
+ NPT_MIME_PARAMETER_PARSER_STATE_IN_NAME,
+ NPT_MIME_PARAMETER_PARSER_STATE_NEED_EQUALS,
+ NPT_MIME_PARAMETER_PARSER_STATE_NEED_VALUE,
+ NPT_MIME_PARAMETER_PARSER_STATE_IN_VALUE,
+ NPT_MIME_PARAMETER_PARSER_STATE_IN_QUOTED_VALUE,
+ NPT_MIME_PARAMETER_PARSER_STATE_NEED_SEPARATOR
+} NPT_MimeParameterParserState;
+
+/*----------------------------------------------------------------------
+| NPT_ParseMimeParameters
+|
+| From RFC 822 and RFC 2045
+|
+| ; ( Octal, Decimal.)
+| CHAR = <any ASCII character> ; ( 0-177, 0.-127.)
+| ALPHA = <any ASCII alphabetic character>
+| ; (101-132, 65.- 90.)
+| ; (141-172, 97.-122.)
+| DIGIT = <any ASCII decimal digit> ; ( 60- 71, 48.- 57.)
+| CTL = <any ASCII control ; ( 0- 37, 0.- 31.)
+| character and DEL> ; ( 177, 127.)
+| CR = <ASCII CR, carriage return> ; ( 15, 13.)
+| LF = <ASCII LF, linefeed> ; ( 12, 10.)
+| SPACE = <ASCII SP, space> ; ( 40, 32.)
+| HTAB = <ASCII HT, horizontal-tab> ; ( 11, 9.)
+| <"> = <ASCII quote mark> ; ( 42, 34.)
+| CRLF = CR LF
+|
+| LWSP-char = SPACE / HTAB ; semantics = SPACE
+|
+| linear-white-space = 1*([CRLF] LWSP-char) ; semantics = SPACE
+| ; CRLF => folding
+|
+| parameter := attribute "=" value
+|
+| attribute := token
+| ; Matching of attributes
+| ; is ALWAYS case-insensitive.
+|
+| value := token / quoted-string
+|
+| token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, or tspecials>
+|
+| tspecials := "(" / ")" / "<" / ">" / "@" /
+| "," / ";" / ":" / "\" / <">
+| "/" / "[" / "]" / "?" / "="
+|
+| quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
+| ; quoted chars.
+|
+| qtext = <any CHAR excepting <">, ; => may be folded
+| "\" & CR, and including
+| linear-white-space>
+|
+| quoted-pair = "\" CHAR ; may quote any char
+|
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseMimeParameters(const char* encoded,
+ NPT_Map<NPT_String, NPT_String>& parameters)
+{
+ // check parameters
+ if (encoded == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // reserve some space
+ NPT_String param_name;
+ NPT_String param_value;
+ param_name.Reserve(64);
+ param_value.Reserve(64);
+
+ NPT_MimeParameterParserState state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_NAME;
+ bool quoted_char = false;
+ for (;;) {
+ char c = *encoded++;
+ if (!quoted_char && (c == 0x0A || c == 0x0D)) continue; // ignore EOL chars
+ switch (state) {
+ case NPT_MIME_PARAMETER_PARSER_STATE_NEED_NAME:
+ if (c == '\0') break; // END
+ if (c == ' ' || c == '\t') continue; // ignore leading whitespace
+ if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // CTLs are invalid
+ param_name += c; // we're not strict: accept all other chars
+ state = NPT_MIME_PARAMETER_PARSER_STATE_IN_NAME;
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_IN_NAME:
+ if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // END or CTLs are invalid
+ if (c == ' ') {
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_EQUALS;
+ } else if (c == '=') {
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_VALUE;
+ } else {
+ param_name += c; // we're not strict: accept all other chars
+ }
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_NEED_EQUALS:
+ if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // END or CTLs are invalid
+ if (c == ' ' || c == '\t') continue; // ignore leading whitespace
+ if (c != '=') return NPT_ERROR_INVALID_SYNTAX;
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_VALUE;
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_NEED_VALUE:
+ if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // END or CTLs are invalid
+ if (c == ' ' || c == '\t') continue; // ignore leading whitespace
+ if (c == '"') {
+ state = NPT_MIME_PARAMETER_PARSER_STATE_IN_QUOTED_VALUE;
+ } else {
+ param_value += c; // we're not strict: accept all other chars
+ state = NPT_MIME_PARAMETER_PARSER_STATE_IN_VALUE;
+ }
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_IN_QUOTED_VALUE:
+ if (quoted_char) {
+ quoted_char = false;
+ if (c == '\0') return NPT_ERROR_INVALID_SYNTAX;
+ param_value += c; // accept all chars
+ break;
+ } else if (c == '\\') {
+ quoted_char = true;
+ break;
+ } else if (c == '"') {
+ // add the parameter to the map
+ param_name.TrimRight();
+ param_value.TrimRight();
+ parameters[param_name] = param_value;
+ param_name.SetLength(0);
+ param_value.SetLength(0);
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_SEPARATOR;
+ } else if (c < ' ') {
+ return NPT_ERROR_INVALID_SYNTAX; // END or CTLs are invalid
+ } else {
+ param_value += c; // we're not strict: accept all other chars
+ }
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_IN_VALUE:
+ if (c == '\0' || c == ';') {
+ // add the parameter to the map
+ param_name.TrimRight();
+ param_value.TrimRight();
+ parameters[param_name] = param_value;
+ param_name.SetLength(0);
+ param_value.SetLength(0);
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_NAME;
+ } else if (c < ' ') {
+ // CTLs are invalid
+ return NPT_ERROR_INVALID_SYNTAX;
+ } else {
+ param_value += c; // we're not strict: accept all other chars
+ }
+ break;
+
+ case NPT_MIME_PARAMETER_PARSER_STATE_NEED_SEPARATOR:
+ if (c == '\0') break;
+ if (c < ' ') return NPT_ERROR_INVALID_SYNTAX; // CTLs are invalid
+ if (c == ' ' || c == '\t') continue; // ignore whitespace
+ if (c != ';') return NPT_ERROR_INVALID_SYNTAX;
+ state = NPT_MIME_PARAMETER_PARSER_STATE_NEED_NAME;
+ break;
+ }
+ if (c == '\0') break; // end of buffer
+ }
+
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Core/NptUtils.h b/lib/libUPnP/Neptune/Source/Core/NptUtils.h
new file mode 100644
index 0000000000..05a38a0e59
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptUtils.h
@@ -0,0 +1,219 @@
+/*****************************************************************
+|
+| Neptune Utils
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_UTILS_H_
+#define _NPT_UTILS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptStrings.h"
+#include "NptMap.h"
+
+#if defined (NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+#if defined (NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDARG_H)
+#include <stdarg.h>
+#endif
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define NPT_ARRAY_SIZE(_a) (sizeof(_a)/sizeof((_a)[0]))
+
+/*----------------------------------------------------------------------
+| byte I/O
++---------------------------------------------------------------------*/
+extern void NPT_BytesFromInt64Be(unsigned char* buffer, NPT_UInt64 value);
+extern void NPT_BytesFromInt32Be(unsigned char* buffer, NPT_UInt32 value);
+extern void NPT_BytesFromInt24Be(unsigned char* buffer, NPT_UInt32 value);
+extern void NPT_BytesFromInt16Be(unsigned char* buffer, NPT_UInt16 value);
+extern NPT_UInt64 NPT_BytesToInt64Be(const unsigned char* buffer);
+extern NPT_UInt32 NPT_BytesToInt32Be(const unsigned char* buffer);
+extern NPT_UInt32 NPT_BytesToInt24Be(const unsigned char* buffer);
+extern NPT_UInt16 NPT_BytesToInt16Be(const unsigned char* buffer);
+
+extern void NPT_BytesFromInt64Le(unsigned char* buffer, NPT_UInt64 value);
+extern void NPT_BytesFromInt32Le(unsigned char* buffer, NPT_UInt32 value);
+extern void NPT_BytesFromInt24Le(unsigned char* buffer, NPT_UInt32 value);
+extern void NPT_BytesFromInt16Le(unsigned char* buffer, NPT_UInt16 value);
+extern NPT_UInt64 NPT_BytesToInt64Le(const unsigned char* buffer);
+extern NPT_UInt32 NPT_BytesToInt32Le(const unsigned char* buffer);
+extern NPT_UInt32 NPT_BytesToInt24Le(const unsigned char* buffer);
+extern NPT_UInt16 NPT_BytesToInt16Le(const unsigned char* buffer);
+
+/*----------------------------------------------------------------------
+| conversion utilities
++---------------------------------------------------------------------*/
+extern NPT_Result
+NPT_ParseFloat(const char* str, float& result, bool relaxed = true);
+
+extern NPT_Result
+NPT_ParseInteger(const char* str, long& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger(const char* str, unsigned long& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger(const char* str, int& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger(const char* str, unsigned int& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger32(const char* str, NPT_Int32& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger32(const char* str, NPT_UInt32& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger64(const char* str, NPT_Int64& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+extern NPT_Result
+NPT_ParseInteger64(const char* str, NPT_UInt64& result, bool relaxed = true, NPT_Cardinal* chars_used = 0);
+
+/*----------------------------------------------------------------------
+| formatting
++---------------------------------------------------------------------*/
+void
+NPT_FormatOutput(void (*function)(void* parameter, const char* message),
+ void* function_parameter,
+ const char* format,
+ va_list args);
+
+void NPT_ByteToHex(NPT_Byte b, char* buffer, bool uppercase=false);
+NPT_Result NPT_HexToByte(const char* buffer, NPT_Byte& b);
+NPT_String NPT_HexString(const unsigned char* data,
+ NPT_Size data_size,
+ const char* separator = NULL,
+ bool uppercase=false);
+char NPT_NibbleToHex(unsigned int nibble, bool uppercase = true);
+int NPT_HexToNibble(char hex);
+
+/*----------------------------------------------------------------------
+| parsing
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ParseMimeParameters(const char* encoded,
+ NPT_Map<NPT_String, NPT_String>& parameters);
+
+/*----------------------------------------------------------------------
+| environment variables
++---------------------------------------------------------------------*/
+NPT_Result NPT_GetEnvironment(const char* name, NPT_String& value);
+
+/*----------------------------------------------------------------------
+| string utils
++---------------------------------------------------------------------*/
+#if defined (NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+#if defined (NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined (NPT_CONFIG_HAVE_SNPRINTF)
+#define NPT_FormatString NPT_snprintf
+#else
+int NPT_FormatString(char* str, NPT_Size size, const char* format, ...);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_VSNPRINTF)
+#define NPT_FormatStringVN(s,c,f,a) NPT_vsnprintf(s,c,f,a)
+#else
+extern int NPT_FormatStringVN(char *buffer, size_t count, const char *format, va_list argptr);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_MEMCPY)
+#define NPT_CopyMemory memcpy
+#else
+extern void NPT_CopyMemory(void* dest, void* src, NPT_Size size);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRCMP)
+#define NPT_StringsEqual(s1, s2) (strcmp((s1), (s2)) == 0)
+#else
+extern int NPT_StringsEqual(const char* s1, const char* s2);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRNCMP)
+#define NPT_StringsEqualN(s1, s2, n) (strncmp((s1), (s2), (n)) == 0)
+#else
+extern int NPT_StringsEqualN(const char* s1, const char* s2, unsigned long size);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRLEN)
+#define NPT_StringLength(s) (NPT_Size)(strlen(s))
+#else
+extern unsigned long NPT_StringLength(const char* s);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRCPY)
+#define NPT_CopyString(dst, src) ((void)NPT_strcpy((dst), (src)))
+#else
+extern void NPT_CopyString(char* dst, const char* src);
+#endif
+
+/**
+ * Copy up to n characters from src to dst.
+ * The destination buffer will be null-terminated, so it must
+ * have enough space for n+1 characters (n from the source plus
+ * the null terminator).
+ */
+#if defined(NPT_CONFIG_HAVE_STRNCPY)
+#define NPT_CopyStringN(dst, src, n) \
+do { ((void)NPT_strncpy((dst), (src), n)); (dst)[(n)] = '\0'; } while(0)
+#else
+extern int NPT_CopyStringN(char* dst, const char* src, unsigned long n);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_MEMSET)
+#define NPT_SetMemory memset
+#else
+extern void NPT_SetMemory(void* dest, int c, NPT_Size size);
+#endif
+
+#if defined(NPT_CONFIG_HAVE_MEMCMP)
+#define NPT_MemoryEqual(s1, s2, n) (memcmp((s1), (s2), (n)) == 0)
+#else
+extern int NPT_MemoryEqual(const void* s1, const void* s2, unsigned long n);
+#endif
+
+#endif // _NPT_UTILS_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptVersion.h b/lib/libUPnP/Neptune/Source/Core/NptVersion.h
new file mode 100644
index 0000000000..ab9aa6ee98
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptVersion.h
@@ -0,0 +1,41 @@
+/*****************************************************************
+|
+| Neptune - Version Info
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_VERSION_H_
+#define _NPT_VERSION_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#define NPT_NEPTUNE_VERSION 0x01000200
+#define NPT_NEPTUNE_VERSION_STRING "1.0.2"
+
+#endif // _NPT_VERSION_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptXml.cpp b/lib/libUPnP/Neptune/Source/Core/NptXml.cpp
new file mode 100644
index 0000000000..170b063069
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptXml.cpp
@@ -0,0 +1,2517 @@
+/*****************************************************************
+|
+| Neptune - Xml Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptXml.h"
+#include "NptUtils.h"
+#include "NptMap.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| local compilation flags
++---------------------------------------------------------------------*/
+//#define NPT_XML_PARSER_DEBUG
+#ifdef NPT_XML_PARSER_DEBUG
+#define NPT_XML_Debug_0(s) NPT_Debug(s)
+#define NPT_XML_Debug_1(s,x0) NPT_Debug(s,x0)
+#define NPT_XML_Debug_2(s,x0,x1) NPT_Debug(s,x0,x1)
+#define NPT_XML_Debug_3(s,x0,x1,x2) NPT_Debug(s,x0,x1,x2)
+#define NPT_XML_Debug_4(s,x0,x1,x2,x3) NPT_Debug(s,x0,x1,x2,x3)
+#else
+#define NPT_XML_Debug_0(s)
+#define NPT_XML_Debug_1(s,x0)
+#define NPT_XML_Debug_2(s,x0,x1)
+#define NPT_XML_Debug_3(s,x0,x1,x2)
+#define NPT_XML_Debug_4(s,x0,x1,x2,x3)
+#endif
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+static const NPT_String
+NPT_XmlNamespaceUri_Xml("http://www.w3.org/XML/1998/namespace");
+
+/*----------------------------------------------------------------------
+| NPT_XmlAttributeFinder
++---------------------------------------------------------------------*/
+class NPT_XmlAttributeFinder
+{
+public:
+ // if 'namespc' is NULL, we're looking for ANY namespace
+ // if 'namespc' is '\0', we're looking for NO namespace
+ // if 'namespc' is non-empty, look for that SPECIFIC namespace
+ NPT_XmlAttributeFinder(const NPT_XmlElementNode& element,
+ const char* name,
+ const char* namespc) :
+ m_Element(element), m_Name(name), m_Namespace(namespc) {}
+
+ bool operator()(const NPT_XmlAttribute* const & attribute) const {
+ if (attribute->m_Name == m_Name) {
+ if (m_Namespace) {
+ const NPT_String& prefix = attribute->GetPrefix();
+ if (m_Namespace[0] == '\0') {
+ // match if the attribute has NO namespace
+ return prefix.IsEmpty();
+ } else {
+ // match if the attribute has the SPECIFIC namespace
+ // we're looking for
+ if (prefix.IsEmpty()) {
+ // attributes without a prefix don't have a namespace
+ return false;
+ } else {
+ const NPT_String* namespc = m_Element.GetNamespaceUri(prefix);
+ return namespc && *namespc == m_Namespace;
+ }
+ }
+ } else {
+ // ANY namespace will match
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+private:
+ const NPT_XmlElementNode& m_Element;
+ const char* m_Name;
+ const char* m_Namespace;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlAttributeFinderWithPrefix
++---------------------------------------------------------------------*/
+class NPT_XmlAttributeFinderWithPrefix
+{
+public:
+ NPT_XmlAttributeFinderWithPrefix(const char* prefix, const char* name) :
+ m_Prefix(prefix?prefix:""), m_Name(name) {}
+
+ bool operator()(const NPT_XmlAttribute* const & attribute) const {
+ return attribute->m_Prefix == m_Prefix && attribute->m_Name == m_Name;
+ }
+
+private:
+ const char* m_Prefix;
+ const char* m_Name;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlTagFinder
++---------------------------------------------------------------------*/
+class NPT_XmlTagFinder
+{
+public:
+ // if 'namespc' is NULL, we're looking for ANY namespace
+ // if 'namespc' is '\0', we're looking for NO namespace
+ // if 'namespc' is non-empty, look for that SPECIFIC namespace
+ NPT_XmlTagFinder(const char* tag, const char* namespc) :
+ m_Tag(tag), m_Namespace(namespc) {}
+
+ bool operator()(const NPT_XmlNode* const & node) const {
+ const NPT_XmlElementNode* element = node->AsElementNode();
+ if (element && element->m_Tag == m_Tag) {
+ if (m_Namespace) {
+ // look for a SPECIFIC namespace or NO namespace
+ const NPT_String* namespc = element->GetNamespace();
+ if (namespc) {
+ // the element has a namespace, match if it is equal to
+ // what we're looking for
+ return *namespc == m_Namespace;
+ } else {
+ // the element does not have a namespace, match if we're
+ // looking for NO namespace
+ return m_Namespace[0] == '\0';
+ }
+ } else {
+ // ANY namespace will match
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+private:
+ const char* m_Tag;
+ const char* m_Namespace;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlTextFinder
++---------------------------------------------------------------------*/
+class NPT_XmlTextFinder
+{
+public:
+ bool operator()(const NPT_XmlNode* const & node) const {
+ return node->AsTextNode() != NULL;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceCollapser
++---------------------------------------------------------------------*/
+class NPT_XmlNamespaceCollapser
+{
+public:
+ NPT_XmlNamespaceCollapser(NPT_XmlElementNode* element) :
+ m_Root(element) {}
+
+ void operator()(NPT_XmlNode*& node) const {
+ NPT_XmlElementNode* element = node->AsElementNode();
+ if (element == NULL) return;
+
+ // collapse the namespace for this element
+ CollapseNamespace(element, element->GetPrefix());
+
+ // collapse the namespaces for the attributes
+ NPT_List<NPT_XmlAttribute*>::Iterator item = element->GetAttributes().GetFirstItem();
+ while (item) {
+ NPT_XmlAttribute* attribute = *item;
+ CollapseNamespace(element, attribute->GetPrefix());
+ ++item;
+ }
+
+ // recurse to the children
+ element->GetChildren().Apply(*this);
+ }
+
+private:
+ // methods
+ void CollapseNamespace(NPT_XmlElementNode* element, const NPT_String& prefix) const;
+
+ // members
+ NPT_XmlElementNode* m_Root;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceCollapser::CollapseNamespace
++---------------------------------------------------------------------*/
+void
+NPT_XmlNamespaceCollapser::CollapseNamespace(NPT_XmlElementNode* element,
+ const NPT_String& prefix) const
+{
+ if (m_Root->m_NamespaceMap == NULL ||
+ (m_Root->m_NamespaceMap->GetNamespaceUri(prefix) == NULL && prefix != "xml")) {
+ // the root element does not have that prefix in the map
+ const NPT_String* uri = element->GetNamespaceUri(prefix);
+ if (uri) m_Root->SetNamespaceUri(prefix, uri->GetChars());
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAttribute::NPT_XmlAttribute
++---------------------------------------------------------------------*/
+NPT_XmlAttribute::NPT_XmlAttribute(const char* name, const char* value) :
+ m_Value(value)
+{
+ const char* cursor = name;
+ while (char c = *cursor++) {
+ if (c == ':') {
+ unsigned int prefix_length = (unsigned int)(cursor-name)-1;
+ m_Prefix.Assign(name, prefix_length);
+ name = cursor;
+ break;
+ }
+ }
+ m_Name = name;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::NPT_XmlElementNode
++---------------------------------------------------------------------*/
+NPT_XmlElementNode::NPT_XmlElementNode(const char* prefix, const char* tag) :
+ NPT_XmlNode(ELEMENT),
+ m_Prefix(prefix),
+ m_Tag(tag),
+ m_NamespaceMap(NULL),
+ m_NamespaceParent(NULL)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::NPT_XmlElementNode
++---------------------------------------------------------------------*/
+NPT_XmlElementNode::NPT_XmlElementNode(const char* tag) :
+ NPT_XmlNode(ELEMENT),
+ m_NamespaceMap(NULL),
+ m_NamespaceParent(NULL)
+{
+ const char* cursor = tag;
+ while (char c = *cursor++) {
+ if (c == ':') {
+ unsigned int prefix_length = (unsigned int)(cursor-tag)-1;
+ m_Prefix.Assign(tag, prefix_length);
+ tag = cursor;
+ break;
+ }
+ }
+ m_Tag = tag;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::~NPT_XmlElementNode
++---------------------------------------------------------------------*/
+NPT_XmlElementNode::~NPT_XmlElementNode()
+{
+ m_Children.Apply(NPT_ObjectDeleter<NPT_XmlNode>());
+ m_Attributes.Apply(NPT_ObjectDeleter<NPT_XmlAttribute>());
+ delete m_NamespaceMap;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::SetParent
++---------------------------------------------------------------------*/
+void
+NPT_XmlElementNode::SetParent(NPT_XmlNode* parent)
+{
+ // update our parent
+ m_Parent = parent;
+
+ // update out namespace linkage
+ NPT_XmlElementNode* parent_element =
+ parent?parent->AsElementNode():NULL;
+ NPT_XmlElementNode* namespace_parent;
+ if (parent_element) {
+ namespace_parent =
+ parent_element->m_NamespaceMap ?
+ parent_element:
+ parent_element->m_NamespaceParent;
+ } else {
+ namespace_parent = NULL;
+ }
+ if (namespace_parent != m_NamespaceParent) {
+ m_NamespaceParent = namespace_parent;
+ RelinkNamespaceMaps();
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::AddChild
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::AddChild(NPT_XmlNode* child)
+{
+ if (child == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ child->SetParent(this);
+ return m_Children.Add(child);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetChild
++---------------------------------------------------------------------*/
+NPT_XmlElementNode*
+NPT_XmlElementNode::GetChild(const char* tag, const char* namespc, NPT_Ordinal n) const
+{
+ // remap the requested namespace to match the semantics of the finder
+ // and allow for "" to also mean NO namespace
+ if (namespc == NULL || namespc[0] == '\0') {
+ namespc = ""; // for the finder, empty string means NO namespace
+ } else if (namespc[0] == '*' && namespc[1] == '\0') {
+ namespc = NULL; // for the finder, NULL means ANY namespace
+ }
+
+ // find the child
+ NPT_List<NPT_XmlNode*>::Iterator item;
+ item = m_Children.Find(NPT_XmlTagFinder(tag, namespc), n);
+ return item?(*item)->AsElementNode():NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::AddAttribute
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::AddAttribute(const char* name,
+ const char* value)
+{
+ if (name == NULL || value == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ return m_Attributes.Add(new NPT_XmlAttribute(name, value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::SetAttribute
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::SetAttribute(const char* prefix,
+ const char* name,
+ const char* value)
+{
+ if (name == NULL || value == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ /* see if this attribute is already set */
+ NPT_List<NPT_XmlAttribute*>::Iterator attribute;
+ attribute = m_Attributes.Find(NPT_XmlAttributeFinderWithPrefix(prefix, name));
+ if (attribute) {
+ // an attribute with this name and prefix already exists,
+ // change its value
+ (*attribute)->SetValue(value);
+ return NPT_SUCCESS;
+ }
+ return m_Attributes.Add(new NPT_XmlAttribute(prefix, name, value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::SetAttribute
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::SetAttribute(const char* name, const char* value)
+{
+ return SetAttribute(NULL, name, value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetAttribute
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlElementNode::GetAttribute(const char* name, const char* namespc) const
+{
+ // remap the requested namespace to match the semantics of the finder
+ // and allow for "" to also mean NO namespace
+ if (namespc == NULL || namespc[0] == '\0') {
+ namespc = ""; // for the finder, empty string means NO namespace
+ } else if (namespc[0] == '*' && namespc[1] == '\0') {
+ namespc = NULL; // for the finder, NULL means ANY namespace
+ }
+
+ // find the attribute
+ NPT_List<NPT_XmlAttribute*>::Iterator attribute;
+ attribute = m_Attributes.Find(NPT_XmlAttributeFinder(*this, name, namespc));
+ if (attribute) {
+ return &(*attribute)->GetValue();
+ } else {
+ return NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::AddText
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::AddText(const char* text)
+{
+ return AddChild(new NPT_XmlTextNode(NPT_XmlTextNode::CHARACTER_DATA, text));
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetText
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlElementNode::GetText(NPT_Ordinal n) const
+{
+ NPT_List<NPT_XmlNode*>::Iterator node;
+ node = m_Children.Find(NPT_XmlTextFinder(), n);
+ return node?&(*node)->AsTextNode()->GetString():NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::MakeStandalone
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::MakeStandalone()
+{
+ NPT_XmlNamespaceCollapser collapser(this);
+ NPT_XmlNode* node_pointer = this;
+ collapser(node_pointer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::RelinkNamespaceMaps
++---------------------------------------------------------------------*/
+void
+NPT_XmlElementNode::RelinkNamespaceMaps()
+{
+ // update our children so that they can inherit the right
+ // namespace map
+ NPT_List<NPT_XmlNode*>::Iterator item = m_Children.GetFirstItem();
+ while (item) {
+ NPT_XmlElementNode* element = (*item)->AsElementNode();
+ if (element) {
+ if (m_NamespaceMap) {
+ // we have a map, so our children point to us
+ element->SetNamespaceParent(this);
+ } else {
+ // we don't have a map, so our children point to
+ // where we also point
+ element->SetNamespaceParent(m_NamespaceParent);
+ }
+ }
+ ++item;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::SetNamespaceParent
++---------------------------------------------------------------------*/
+void
+NPT_XmlElementNode::SetNamespaceParent(NPT_XmlElementNode* parent)
+{
+ m_NamespaceParent = parent;
+ RelinkNamespaceMaps();
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::SetNamespaceUri
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlElementNode::SetNamespaceUri(const char* prefix, const char* uri)
+{
+ // ensure that we have a namespace map
+ if (m_NamespaceMap == NULL) {
+ m_NamespaceMap = new NPT_XmlNamespaceMap();
+ RelinkNamespaceMaps();
+ }
+
+ return m_NamespaceMap->SetNamespaceUri(prefix, uri);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetNamespaceUri
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlElementNode::GetNamespaceUri(const char* prefix) const
+{
+ if (m_NamespaceMap) {
+ // look in our namespace map first
+ const NPT_String* namespc = m_NamespaceMap->GetNamespaceUri(prefix);
+ if (namespc) {
+ if (namespc->IsEmpty()) {
+ return NULL;
+ } else {
+ return namespc;
+ }
+ }
+ }
+
+ // look into our parent's namespace map
+ if (m_NamespaceParent) {
+ return m_NamespaceParent->GetNamespaceUri(prefix);
+ } else {
+ // check if this is a well-known namespace
+ if (prefix[0] == 'x' &&
+ prefix[1] == 'm' &&
+ prefix[2] == 'l' &&
+ prefix[3] == '\0') {
+ return &NPT_XmlNamespaceUri_Xml;
+ }
+
+ // not found
+ return NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetNamespace
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlElementNode::GetNamespace() const
+{
+ return GetNamespaceUri(m_Prefix);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode::GetNamespacePrefix
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlElementNode::GetNamespacePrefix(const char* uri) const
+{
+ NPT_XmlNamespaceMap* namespace_map =
+ m_NamespaceMap?
+ m_NamespaceMap:
+ (m_NamespaceParent?
+ m_NamespaceParent->m_NamespaceMap:
+ NULL);
+
+ if (namespace_map) {
+ return namespace_map->GetNamespacePrefix(uri);
+ } else {
+ return NULL;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlTextNode::NPT_XmlTextNode
++---------------------------------------------------------------------*/
+NPT_XmlTextNode::NPT_XmlTextNode(TokenType token_type, const char* text) :
+ NPT_XmlNode(TEXT),
+ m_TokenType(token_type),
+ m_Text(text)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator
++---------------------------------------------------------------------*/
+class NPT_XmlAccumulator {
+public:
+ NPT_XmlAccumulator();
+ ~NPT_XmlAccumulator();
+ void Append(char c);
+ void Append(const char* s);
+ void AppendUTF8(unsigned int c);
+ void Reset() { m_Valid = 0; }
+ const char* GetString();
+ NPT_Size GetSize() const { return m_Valid; }
+ const unsigned char* GetBuffer() const { return m_Buffer; }
+
+private:
+ // methods
+ void Allocate(NPT_Size size);
+
+ // members
+ unsigned char* m_Buffer;
+ NPT_Size m_Allocated;
+ NPT_Size m_Valid;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::NPT_XmlAccumulator
++---------------------------------------------------------------------*/
+NPT_XmlAccumulator::NPT_XmlAccumulator() :
+ m_Buffer(NULL),
+ m_Allocated(0),
+ m_Valid(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::~NPT_XmlAccumulator
++---------------------------------------------------------------------*/
+NPT_XmlAccumulator::~NPT_XmlAccumulator()
+{
+ delete[] m_Buffer;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::Allocate
++---------------------------------------------------------------------*/
+void
+NPT_XmlAccumulator::Allocate(NPT_Size size)
+{
+ // check if we have enough
+ if (m_Allocated >= size) return;
+
+ // compute new size
+ do {
+ m_Allocated = m_Allocated ? m_Allocated * 2 : 32;
+ } while (m_Allocated < size);
+
+ // reallocate
+ unsigned char* new_buffer = new unsigned char[m_Allocated];
+ NPT_CopyMemory(new_buffer, m_Buffer, m_Valid);
+ delete[] m_Buffer;
+ m_Buffer = new_buffer;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::Append
++---------------------------------------------------------------------*/
+inline void
+NPT_XmlAccumulator::Append(char c)
+{
+ NPT_Size needed = m_Valid+1;
+ if (needed > m_Allocated) Allocate(needed);
+ m_Buffer[m_Valid++] = c;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::Append
++---------------------------------------------------------------------*/
+void
+NPT_XmlAccumulator::Append(const char* s)
+{
+ char c;
+ while ((c = *s++)) Append(c);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::AppendUTF8
++---------------------------------------------------------------------*/
+inline void
+NPT_XmlAccumulator::AppendUTF8(unsigned int c)
+{
+ NPT_Size needed = m_Valid+4; // allocate 4 more chars
+ if (needed > m_Allocated) Allocate(needed);
+
+ if (c <= 0x7F) {
+ // 000000ï¾–00007F -> 1 char = 0xxxxxxx
+ m_Buffer[m_Valid++] = (char)c;
+ } else if (c <= 0x7FF) {
+ // 000080ï¾–0007FF -> 2 chars = 110zzzzx 10xxxxxx
+ m_Buffer[m_Valid++] = 0xC0|(c>>6 );
+ m_Buffer[m_Valid++] = 0x80|(c&0x3F);
+ } else if (c <= 0xFFFF) {
+ // 000800ï¾–00FFFF -> 3 chars = 1110zzzz 10zxxxxx 10xxxxxx
+ m_Buffer[m_Valid++] = 0xE0| (c>>12 );
+ m_Buffer[m_Valid++] = 0x80|((c&0xFC0)>>6);
+ m_Buffer[m_Valid++] = 0x80| (c&0x3F );
+ } else if (c <= 0x10FFFF) {
+ // 010000ï¾–10FFFF -> 4 chars = 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx
+ m_Buffer[m_Valid++] = 0xF0| (c>>18 );
+ m_Buffer[m_Valid++] = 0x80|((c&0x3F000)>>12);
+ m_Buffer[m_Valid++] = 0x80|((c&0xFC0 )>> 6);
+ m_Buffer[m_Valid++] = 0x80| (c&0x3F );
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAccumulator::GetString
++---------------------------------------------------------------------*/
+inline const char*
+NPT_XmlAccumulator::GetString()
+{
+ // ensure that the buffer is NULL terminated
+ Allocate(m_Valid+1);
+ m_Buffer[m_Valid] = '\0';
+ return (const char*)m_Buffer;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceMap::~NPT_XmlNamespaceMap
++---------------------------------------------------------------------*/
+NPT_XmlNamespaceMap::~NPT_XmlNamespaceMap()
+{
+ m_Entries.Apply(NPT_ObjectDeleter<Entry>());
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceMap::SetNamespaceUri
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlNamespaceMap::SetNamespaceUri(const char* prefix, const char* uri)
+{
+ NPT_List<Entry*>::Iterator item = m_Entries.GetFirstItem();
+ while (item) {
+ if ((*item)->m_Prefix == prefix) {
+ // the prefix is already in the map, update the value
+ (*item)->m_Uri = uri;
+ return NPT_SUCCESS;
+ }
+ ++item;
+ }
+
+ // the prefix is not in the map, add it
+ return m_Entries.Add(new Entry(prefix, uri));
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceMap::GetNamespaceUri
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlNamespaceMap::GetNamespaceUri(const char* prefix)
+{
+ NPT_List<Entry*>::Iterator item = m_Entries.GetFirstItem();
+ while (item) {
+ if ((*item)->m_Prefix == prefix) {
+ // match
+ return &(*item)->m_Uri;
+ }
+ ++item;
+ }
+
+ // the prefix is not in the map
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceMap::GetNamespacePrefix
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlNamespaceMap::GetNamespacePrefix(const char* uri)
+{
+ NPT_List<Entry*>::Iterator item = m_Entries.GetFirstItem();
+ while (item) {
+ if ((*item)->m_Uri == uri) {
+ // match
+ return &(*item)->m_Prefix;
+ }
+ ++item;
+ }
+
+ // the uri is not in the map
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| character map
+|
+| flags:
+| 1 --> any char
+| 2 --> whitespace
+| 4 --> name
+| 8 --> content
+| 16 --> value
++---------------------------------------------------------------------*/
+#define NPT_XML_USE_CHAR_MAP
+#if defined(NPT_XML_USE_CHAR_MAP)
+// NOTE: this table is generated by the ruby script 'XmlCharMap.rb'
+static const unsigned char NPT_XmlCharMap[256] = {
+ 0, // 0 0x00
+ 0, // 1 0x01
+ 0, // 2 0x02
+ 0, // 3 0x03
+ 0, // 4 0x04
+ 0, // 5 0x05
+ 0, // 6 0x06
+ 0, // 7 0x07
+ 0, // 8 0x08
+ 1|2|8|16, // 9 0x09
+ 1|2|8|16, // 10 0x0a
+ 0, // 11 0x0b
+ 0, // 12 0x0c
+ 1|2|8|16, // 13 0x0d
+ 0, // 14 0x0e
+ 0, // 15 0x0f
+ 0, // 16 0x10
+ 0, // 17 0x11
+ 0, // 18 0x12
+ 0, // 19 0x13
+ 0, // 20 0x14
+ 0, // 21 0x15
+ 0, // 22 0x16
+ 0, // 23 0x17
+ 0, // 24 0x18
+ 0, // 25 0x19
+ 0, // 26 0x1a
+ 0, // 27 0x1b
+ 0, // 28 0x1c
+ 0, // 29 0x1d
+ 0, // 30 0x1e
+ 0, // 31 0x1f
+ 1|2|8|16, // 32 0x20 ' '
+ 1|8|16, // 33 0x21 '!'
+ 1|8|16, // 34 0x22 '"'
+ 1|8|16, // 35 0x23 '#'
+ 1|8|16, // 36 0x24 '$'
+ 1|8|16, // 37 0x25 '%'
+ 1, // 38 0x26 '&'
+ 1|8|16, // 39 0x27 '''
+ 1|8|16, // 40 0x28 '('
+ 1|8|16, // 41 0x29 ')'
+ 1|8|16, // 42 0x2a '*'
+ 1|8|16, // 43 0x2b '+'
+ 1|8|16, // 44 0x2c ','
+ 1|4|8|16, // 45 0x2d '-'
+ 1|4|8|16, // 46 0x2e '.'
+ 1|8|16, // 47 0x2f '/'
+ 1|4|8|16, // 48 0x30 '0'
+ 1|4|8|16, // 49 0x31 '1'
+ 1|4|8|16, // 50 0x32 '2'
+ 1|4|8|16, // 51 0x33 '3'
+ 1|4|8|16, // 52 0x34 '4'
+ 1|4|8|16, // 53 0x35 '5'
+ 1|4|8|16, // 54 0x36 '6'
+ 1|4|8|16, // 55 0x37 '7'
+ 1|4|8|16, // 56 0x38 '8'
+ 1|4|8|16, // 57 0x39 '9'
+ 1|4|8|16, // 58 0x3a ':'
+ 1|8|16, // 59 0x3b ';'
+ 1, // 60 0x3c '<'
+ 1|8|16, // 61 0x3d '='
+ 1|8|16, // 62 0x3e '>'
+ 1|8|16, // 63 0x3f '?'
+ 1|8|16, // 64 0x40 '@'
+ 1|4|8|16, // 65 0x41 'A'
+ 1|4|8|16, // 66 0x42 'B'
+ 1|4|8|16, // 67 0x43 'C'
+ 1|4|8|16, // 68 0x44 'D'
+ 1|4|8|16, // 69 0x45 'E'
+ 1|4|8|16, // 70 0x46 'F'
+ 1|4|8|16, // 71 0x47 'G'
+ 1|4|8|16, // 72 0x48 'H'
+ 1|4|8|16, // 73 0x49 'I'
+ 1|4|8|16, // 74 0x4a 'J'
+ 1|4|8|16, // 75 0x4b 'K'
+ 1|4|8|16, // 76 0x4c 'L'
+ 1|4|8|16, // 77 0x4d 'M'
+ 1|4|8|16, // 78 0x4e 'N'
+ 1|4|8|16, // 79 0x4f 'O'
+ 1|4|8|16, // 80 0x50 'P'
+ 1|4|8|16, // 81 0x51 'Q'
+ 1|4|8|16, // 82 0x52 'R'
+ 1|4|8|16, // 83 0x53 'S'
+ 1|4|8|16, // 84 0x54 'T'
+ 1|4|8|16, // 85 0x55 'U'
+ 1|4|8|16, // 86 0x56 'V'
+ 1|4|8|16, // 87 0x57 'W'
+ 1|4|8|16, // 88 0x58 'X'
+ 1|4|8|16, // 89 0x59 'Y'
+ 1|4|8|16, // 90 0x5a 'Z'
+ 1|8|16, // 91 0x5b '['
+ 1|8|16, // 92 0x5c '\'
+ 1|8|16, // 93 0x5d ']'
+ 1|8|16, // 94 0x5e '^'
+ 1|4|8|16, // 95 0x5f '_'
+ 1|8|16, // 96 0x60 '`'
+ 1|4|8|16, // 97 0x61 'a'
+ 1|4|8|16, // 98 0x62 'b'
+ 1|4|8|16, // 99 0x63 'c'
+ 1|4|8|16, // 100 0x64 'd'
+ 1|4|8|16, // 101 0x65 'e'
+ 1|4|8|16, // 102 0x66 'f'
+ 1|4|8|16, // 103 0x67 'g'
+ 1|4|8|16, // 104 0x68 'h'
+ 1|4|8|16, // 105 0x69 'i'
+ 1|4|8|16, // 106 0x6a 'j'
+ 1|4|8|16, // 107 0x6b 'k'
+ 1|4|8|16, // 108 0x6c 'l'
+ 1|4|8|16, // 109 0x6d 'm'
+ 1|4|8|16, // 110 0x6e 'n'
+ 1|4|8|16, // 111 0x6f 'o'
+ 1|4|8|16, // 112 0x70 'p'
+ 1|4|8|16, // 113 0x71 'q'
+ 1|4|8|16, // 114 0x72 'r'
+ 1|4|8|16, // 115 0x73 's'
+ 1|4|8|16, // 116 0x74 't'
+ 1|4|8|16, // 117 0x75 'u'
+ 1|4|8|16, // 118 0x76 'v'
+ 1|4|8|16, // 119 0x77 'w'
+ 1|4|8|16, // 120 0x78 'x'
+ 1|4|8|16, // 121 0x79 'y'
+ 1|4|8|16, // 122 0x7a 'z'
+ 1|8|16, // 123 0x7b '{'
+ 1|8|16, // 124 0x7c '|'
+ 1|8|16, // 125 0x7d '}'
+ 1|8|16, // 126 0x7e '~'
+ 1|8|16, // 127 0x7f
+ 1|8|16, // 128 0x80
+ 1|8|16, // 129 0x81
+ 1|8|16, // 130 0x82
+ 1|8|16, // 131 0x83
+ 1|8|16, // 132 0x84
+ 1|8|16, // 133 0x85
+ 1|8|16, // 134 0x86
+ 1|8|16, // 135 0x87
+ 1|8|16, // 136 0x88
+ 1|8|16, // 137 0x89
+ 1|8|16, // 138 0x8a
+ 1|8|16, // 139 0x8b
+ 1|8|16, // 140 0x8c
+ 1|8|16, // 141 0x8d
+ 1|8|16, // 142 0x8e
+ 1|8|16, // 143 0x8f
+ 1|8|16, // 144 0x90
+ 1|8|16, // 145 0x91
+ 1|8|16, // 146 0x92
+ 1|8|16, // 147 0x93
+ 1|8|16, // 148 0x94
+ 1|8|16, // 149 0x95
+ 1|8|16, // 150 0x96
+ 1|8|16, // 151 0x97
+ 1|8|16, // 152 0x98
+ 1|8|16, // 153 0x99
+ 1|8|16, // 154 0x9a
+ 1|8|16, // 155 0x9b
+ 1|8|16, // 156 0x9c
+ 1|8|16, // 157 0x9d
+ 1|8|16, // 158 0x9e
+ 1|8|16, // 159 0x9f
+ 1|8|16, // 160 0xa0
+ 1|8|16, // 161 0xa1
+ 1|8|16, // 162 0xa2
+ 1|8|16, // 163 0xa3
+ 1|8|16, // 164 0xa4
+ 1|8|16, // 165 0xa5
+ 1|8|16, // 166 0xa6
+ 1|8|16, // 167 0xa7
+ 1|8|16, // 168 0xa8
+ 1|8|16, // 169 0xa9
+ 1|8|16, // 170 0xaa
+ 1|8|16, // 171 0xab
+ 1|8|16, // 172 0xac
+ 1|8|16, // 173 0xad
+ 1|8|16, // 174 0xae
+ 1|8|16, // 175 0xaf
+ 1|8|16, // 176 0xb0
+ 1|8|16, // 177 0xb1
+ 1|8|16, // 178 0xb2
+ 1|8|16, // 179 0xb3
+ 1|8|16, // 180 0xb4
+ 1|8|16, // 181 0xb5
+ 1|8|16, // 182 0xb6
+ 1|8|16, // 183 0xb7
+ 1|8|16, // 184 0xb8
+ 1|8|16, // 185 0xb9
+ 1|8|16, // 186 0xba
+ 1|8|16, // 187 0xbb
+ 1|8|16, // 188 0xbc
+ 1|8|16, // 189 0xbd
+ 1|8|16, // 190 0xbe
+ 1|8|16, // 191 0xbf
+ 1|4|8|16, // 192 0xc0
+ 1|4|8|16, // 193 0xc1
+ 1|4|8|16, // 194 0xc2
+ 1|4|8|16, // 195 0xc3
+ 1|4|8|16, // 196 0xc4
+ 1|4|8|16, // 197 0xc5
+ 1|4|8|16, // 198 0xc6
+ 1|4|8|16, // 199 0xc7
+ 1|4|8|16, // 200 0xc8
+ 1|4|8|16, // 201 0xc9
+ 1|4|8|16, // 202 0xca
+ 1|4|8|16, // 203 0xcb
+ 1|4|8|16, // 204 0xcc
+ 1|4|8|16, // 205 0xcd
+ 1|4|8|16, // 206 0xce
+ 1|4|8|16, // 207 0xcf
+ 1|4|8|16, // 208 0xd0
+ 1|4|8|16, // 209 0xd1
+ 1|4|8|16, // 210 0xd2
+ 1|4|8|16, // 211 0xd3
+ 1|4|8|16, // 212 0xd4
+ 1|4|8|16, // 213 0xd5
+ 1|4|8|16, // 214 0xd6
+ 1|8|16, // 215 0xd7
+ 1|4|8|16, // 216 0xd8
+ 1|4|8|16, // 217 0xd9
+ 1|4|8|16, // 218 0xda
+ 1|4|8|16, // 219 0xdb
+ 1|4|8|16, // 220 0xdc
+ 1|4|8|16, // 221 0xdd
+ 1|4|8|16, // 222 0xde
+ 1|4|8|16, // 223 0xdf
+ 1|4|8|16, // 224 0xe0
+ 1|4|8|16, // 225 0xe1
+ 1|4|8|16, // 226 0xe2
+ 1|4|8|16, // 227 0xe3
+ 1|4|8|16, // 228 0xe4
+ 1|4|8|16, // 229 0xe5
+ 1|4|8|16, // 230 0xe6
+ 1|4|8|16, // 231 0xe7
+ 1|4|8|16, // 232 0xe8
+ 1|4|8|16, // 233 0xe9
+ 1|4|8|16, // 234 0xea
+ 1|4|8|16, // 235 0xeb
+ 1|4|8|16, // 236 0xec
+ 1|4|8|16, // 237 0xed
+ 1|4|8|16, // 238 0xee
+ 1|4|8|16, // 239 0xef
+ 1|4|8|16, // 240 0xf0
+ 1|4|8|16, // 241 0xf1
+ 1|4|8|16, // 242 0xf2
+ 1|4|8|16, // 243 0xf3
+ 1|4|8|16, // 244 0xf4
+ 1|4|8|16, // 245 0xf5
+ 1|4|8|16, // 246 0xf6
+ 1|8|16, // 247 0xf7
+ 1|4|8|16, // 248 0xf8
+ 1|4|8|16, // 249 0xf9
+ 1|4|8|16, // 250 0xfa
+ 1|4|8|16, // 251 0xfb
+ 1|4|8|16, // 252 0xfc
+ 1|4|8|16, // 253 0xfd
+ 1|4|8|16, // 254 0xfe
+ 1|4|8|16 // 255 0xff
+};
+#endif // defined(NPT_XML_USE_CHAR_MAP)
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#if defined (NPT_XML_USE_CHAR_MAP)
+#define NPT_XML_CHAR_IS_ANY_CHAR(c) (NPT_XmlCharMap[c] & 1)
+#define NPT_XML_CHAR_IS_WHITESPACE(c) (NPT_XmlCharMap[c] & 2)
+#define NPT_XML_CHAR_IS_NAME_CHAR(c) (NPT_XmlCharMap[c] & 4)
+#define NPT_XML_CHAR_IS_ENTITY_REF_CHAR(c) (NPT_XML_CHAR_IS_NAME_CHAR((c)) || ((c) == '#'))
+#define NPT_XML_CHAR_IS_CONTENT_CHAR(c) (NPT_XmlCharMap[c] & 8)
+#define NPT_XML_CHAR_IS_VALUE_CHAR(c) (NPT_XmlCharMap[c] & 16)
+#else
+#define NPT_XML_CHAR_IS_WHITESPACE(c) \
+((c) == ' ' || (c) == '\t' || (c) == 0x0D || (c) == 0x0A)
+
+#define NPT_XML_CHAR_IS_ANY_CHAR(c) \
+(NPT_XML_CHAR_IS_WHITESPACE((c)) || ((c) >= 0x20))
+
+#define NPT_XML_CHAR_IS_DIGIT(c) \
+((c) >= '0' && (c) <= '9')
+
+#define NPT_XML_CHAR_IS_LETTER(c) \
+(((c) >= 'A' && (c) <= 'Z') || ((c) >= 'a' && (c) <= 'z') || ((c) >= 0xC0 && (c) <= 0xD6) || ((c) >= 0xD8 && (c) <= 0xF6) || ((c) >= 0xF8))
+
+#define NPT_XML_CHAR_IS_NAME_CHAR(c) \
+(NPT_XML_CHAR_IS_DIGIT((c)) || NPT_XML_CHAR_IS_LETTER((c)) || (c) == '.' || (c) == '-' || (c) == '_' || (c) == ':')
+
+#define NPT_XML_CHAR_IS_ENTITY_REF_CHAR(c) \
+(NPT_XML_CHAR_IS_NAME_CHAR((c)) || ((c) == '#'))
+
+#define NPT_XML_CHAR_IS_CONTENT_CHAR(c) \
+(NPT_XML_CHAR_IS_ANY_CHAR((c)) && ((c) != '&') && ((c) != '<'))
+
+#define NPT_XML_CHAR_IS_VALUE_CHAR(c) \
+(NPT_XML_CHAR_IS_ANY_CHAR((c)) && ((c) != '&') && ((c) != '<'))
+
+#endif // defined(NPT_XML_USE_CHAR_MAP)
+
+/*----------------------------------------------------------------------
+| NPT_XmlStringIsWhitespace
++---------------------------------------------------------------------*/
+static bool
+NPT_XmlStringIsWhitespace(const char* s, NPT_Size size)
+{
+ for (NPT_Size x=0; x<size; x++) {
+ if (!NPT_XML_CHAR_IS_WHITESPACE((int)s[x])) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlProcessor class
++---------------------------------------------------------------------*/
+class NPT_XmlProcessor {
+public:
+ // constructor and destructor
+ NPT_XmlProcessor(NPT_XmlParser* parser);
+
+ // methods
+ NPT_Result ProcessBuffer(const char* buffer, NPT_Size size);
+
+private:
+ // types
+ typedef enum {
+ CONTEXT_NONE,
+ CONTEXT_OPEN_TAG,
+ CONTEXT_CLOSE_TAG,
+ CONTEXT_ATTRIBUTE,
+ CONTEXT_VALUE_SINGLE_QUOTE,
+ CONTEXT_VALUE_DOUBLE_QUOTE
+ } Context;
+
+ typedef enum {
+ STATE_IN_WHITESPACE,
+ STATE_IN_NAME,
+ STATE_IN_NAME_SPECIAL,
+ STATE_IN_VALUE_START,
+ STATE_IN_VALUE,
+ STATE_IN_TAG_START,
+ STATE_IN_EMPTY_TAG_END,
+ STATE_IN_CONTENT,
+ STATE_IN_PROCESSING_INSTRUCTION_START,
+ STATE_IN_PROCESSING_INSTRUCTION,
+ STATE_IN_PROCESSING_INSTRUCTION_END,
+ STATE_IN_COMMENT,
+ STATE_IN_COMMENT_END_1,
+ STATE_IN_COMMENT_END_2,
+ STATE_IN_DTD,
+ STATE_IN_DTD_MARKUP_DECL,
+ STATE_IN_DTD_MARKUP_DECL_END,
+ STATE_IN_CDATA,
+ STATE_IN_CDATA_END_1,
+ STATE_IN_CDATA_END_2,
+ STATE_IN_SPECIAL,
+ STATE_IN_ENTITY_REF
+ } State;
+
+ // members
+ NPT_XmlParser* m_Parser;
+ State m_State;
+ Context m_Context;
+ bool m_SkipNewline;
+ NPT_XmlAccumulator m_Name;
+ NPT_XmlAccumulator m_Value;
+ NPT_XmlAccumulator m_Text;
+ NPT_XmlAccumulator m_Entity;
+
+ // methods
+#ifdef NPT_XML_PARSER_DEBUG
+ const char* StateName(State state) {
+ switch (state) {
+ case STATE_IN_WHITESPACE: return "IN_WHITESPACE";
+ case STATE_IN_NAME: return "IN_NAME";
+ case STATE_IN_NAME_SPECIAL: return "IN_NAME_SPECIAL";
+ case STATE_IN_VALUE_START: return "IN_VALUE_START";
+ case STATE_IN_VALUE: return "IN_VALUE";
+ case STATE_IN_TAG_START: return "IN_TAG_START";
+ case STATE_IN_EMPTY_TAG_END: return "IN_EMPTY_TAG_END";
+ case STATE_IN_CONTENT: return "IN_CONTENT";
+ case STATE_IN_PROCESSING_INSTRUCTION_START: return "IN_PROCESSING_INSTRUCTION_START";
+ case STATE_IN_PROCESSING_INSTRUCTION: return "IN_PROCESSING_INSTRUCTION";
+ case STATE_IN_PROCESSING_INSTRUCTION_END: return "IN_PROCESSING_INSTRUCTION_END";
+ case STATE_IN_COMMENT: return "IN_COMMENT";
+ case STATE_IN_COMMENT_END_1: return "IN_COMMENT_END_1";
+ case STATE_IN_COMMENT_END_2: return "IN_COMMENT_END_2";
+ case STATE_IN_DTD: return "IN_DTD";
+ case STATE_IN_DTD_MARKUP_DECL: return "IN_DTD_MARKUP_DECL";
+ case STATE_IN_DTD_MARKUP_DECL_END: return "IN_DTD_MARKUP_DECL_END";
+ case STATE_IN_CDATA: return "IN_CDATA";
+ case STATE_IN_CDATA_END_1: return "IN_CDATA_END_1";
+ case STATE_IN_CDATA_END_2: return "IN_CDATA_END_2";
+ case STATE_IN_SPECIAL: return "IN_SPECIAL";
+ case STATE_IN_ENTITY_REF: return "IN_ENTITY_REF";
+ }
+ return "UNKNOWN";
+ }
+
+ const char* ContextName(Context context) {
+ switch (context) {
+ case CONTEXT_NONE: return "NONE";
+ case CONTEXT_OPEN_TAG: return "OPEN_TAG";
+ case CONTEXT_CLOSE_TAG: return "CLOSE_TAG";
+ case CONTEXT_ATTRIBUTE: return "ATTRIBUTE";
+ case CONTEXT_VALUE_SINGLE_QUOTE: return "VALUE_SINGLE_QUOTE";
+ case CONTEXT_VALUE_DOUBLE_QUOTE: return "VALUE_DOUBLE_QUOTE";
+ }
+ return "UNKNOWN";
+ }
+#endif /* NPT_XML_PARSER_DEBUG */
+
+ inline void SetState(State state) {
+ NPT_XML_Debug_3("\nstate transition: %s to %s [ctx=%s]\n",
+ StateName(m_State),
+ StateName(state),
+ ContextName(m_Context));
+ m_State = state;
+ }
+
+ inline void SetState(State state, Context context) {
+ NPT_XML_Debug_4("\nstate transition: %s [ctx=%s] to %s [ctx=%s]\n",
+ StateName(m_State),
+ ContextName(m_Context),
+ StateName(state),
+ ContextName(context));
+ m_State = state;
+ m_Context = context;
+ }
+
+ NPT_Result ResolveEntity(NPT_XmlAccumulator& source,
+ NPT_XmlAccumulator& destination);
+ NPT_Result FlushPendingText();
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlProcessor::NPT_XmlProcessor
++---------------------------------------------------------------------*/
+NPT_XmlProcessor::NPT_XmlProcessor(NPT_XmlParser* parser) :
+ m_Parser(parser),
+ m_State(STATE_IN_WHITESPACE),
+ m_Context(CONTEXT_NONE),
+ m_SkipNewline(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlProcessor::ResolveEntity
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlProcessor::ResolveEntity(NPT_XmlAccumulator& source,
+ NPT_XmlAccumulator& destination)
+{
+ const char* entity = (const char*)source.GetString();
+
+ if (NPT_StringsEqual(entity, "lt")) {
+ destination.Append('<');
+ } else if (NPT_StringsEqual(entity, "gt")) {
+ destination.Append('>');
+ } else if (NPT_StringsEqual(entity, "amp")) {
+ destination.Append('&');
+ } else if (NPT_StringsEqual(entity, "quot")) {
+ destination.Append('"');
+ } else if (NPT_StringsEqual(entity, "apos")) {
+ destination.Append('\'');
+ } else if (entity[0] == '#') {
+ int i=1;
+ int base = 10;
+ if (entity[1] == 'x') {
+ i++;
+ base = 16;
+ }
+ int parsed = 0;
+ while (char c = entity[i++]) {
+ int digit = -1;
+ if (c>='0' && c<='9') {
+ digit = c-'0';
+ } else if (base == 16) {
+ if (c >= 'a' && c <= 'f') {
+ digit = 10+c-'a';
+ } else if (c >= 'A' && c <= 'F') {
+ digit = 10+c-'A';
+ }
+ }
+ if (digit == -1) {
+ // invalid char, leave the entity unparsed
+ destination.Append(source.GetString());
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ parsed = base*parsed+digit;
+ }
+ destination.AppendUTF8(parsed);
+ } else {
+ // unknown entity, leave as-is
+ destination.Append(source.GetString());
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlProcessor::FlushPendingText
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlProcessor::FlushPendingText()
+{
+ if (m_Text.GetSize() > 0) {
+ NPT_CHECK(m_Parser->OnCharacterData(m_Text.GetString(),
+ m_Text.GetSize()));
+ m_Text.Reset();
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlProcessor::ProcessBuffer
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlProcessor::ProcessBuffer(const char* buffer, NPT_Size size)
+{
+ unsigned char c;
+
+ while (size-- && (c = *buffer++)) {
+ NPT_XML_Debug_1("[%c]", (c == '\n' || c == '\r') ? '#' : c);
+
+ // normalize line ends
+ if (m_SkipNewline) {
+ m_SkipNewline = false;
+ if (c == '\n') continue;
+ }
+ if (c == '\r') {
+ m_SkipNewline = true;
+ c = '\n';
+ }
+
+ // process the character
+ switch (m_State) {
+ case STATE_IN_WHITESPACE:
+ if (NPT_XML_CHAR_IS_WHITESPACE(c)) break;
+ switch (m_Context) {
+ case CONTEXT_NONE:
+ if (c == '<') {
+ SetState(STATE_IN_TAG_START);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case CONTEXT_ATTRIBUTE:
+ if (c == '/') {
+ SetState(STATE_IN_EMPTY_TAG_END, CONTEXT_NONE);
+ } else if (c == '>') {
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else if (NPT_XML_CHAR_IS_NAME_CHAR(c)) {
+ m_Name.Reset();
+ m_Name.Append(c);
+ SetState(STATE_IN_NAME);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case CONTEXT_CLOSE_TAG:
+ if (c == '>') {
+ NPT_CHECK(FlushPendingText());
+ NPT_CHECK(m_Parser->OnEndElement(m_Name.GetString()));
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ default:
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_NAME:
+ if (NPT_XML_CHAR_IS_NAME_CHAR(c)) {
+ m_Name.Append(c);
+ break;
+ }
+ switch (m_Context) {
+ case CONTEXT_ATTRIBUTE:
+ if (c == '=') {
+ m_Value.Reset();
+ SetState(STATE_IN_VALUE_START);
+ } else if (!NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case CONTEXT_OPEN_TAG:
+ if (c == '>' || c == '/' || NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ NPT_CHECK(FlushPendingText());
+ NPT_CHECK(m_Parser->OnStartElement(m_Name.GetString()));
+ m_Name.Reset();
+ if (c == '>') {
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else if (c == '/') {
+ SetState(STATE_IN_EMPTY_TAG_END);
+ } else {
+ SetState(STATE_IN_WHITESPACE, CONTEXT_ATTRIBUTE);
+ }
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case CONTEXT_CLOSE_TAG:
+ if (c == '>') {
+ NPT_CHECK(FlushPendingText());
+ NPT_CHECK(m_Parser->OnEndElement(m_Name.GetString()));
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else if (NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ SetState(STATE_IN_WHITESPACE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ default:
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_NAME_SPECIAL:
+ if (NPT_XML_CHAR_IS_NAME_CHAR(c) || (c == '[')) {
+ m_Name.Append(c);
+
+ const unsigned char* nb = m_Name.GetBuffer();
+ if (m_Name.GetSize() == 2) {
+ if (nb[0] == '-' &&
+ nb[1] == '-') {
+ m_Name.Reset();
+ SetState(STATE_IN_COMMENT, CONTEXT_NONE);
+ break;
+ }
+ } else if (m_Name.GetSize() == 7) {
+ if (nb[0] == '[' &&
+ nb[1] == 'C' &&
+ nb[2] == 'D' &&
+ nb[3] == 'A' &&
+ nb[4] == 'T' &&
+ nb[5] == 'A' &&
+ nb[6] == '[') {
+ m_Name.Reset();
+ SetState(STATE_IN_CDATA, CONTEXT_NONE);
+ break;
+ }
+ }
+ break;
+ }
+ if (NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ const char* special = m_Name.GetString();
+ if (special && NPT_StringsEqual(special, "DOCTYPE")) {
+ SetState(STATE_IN_DTD, CONTEXT_NONE);
+ } else {
+ SetState(STATE_IN_SPECIAL, CONTEXT_NONE);
+ }
+ m_Name.Reset();
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_VALUE_START:
+ if (NPT_XML_CHAR_IS_WHITESPACE(c)) break;
+ if (c == '"') {
+ m_Value.Reset();
+ SetState(STATE_IN_VALUE, CONTEXT_VALUE_DOUBLE_QUOTE);
+ } else if (c == '\'') {
+ m_Value.Reset();
+ SetState(STATE_IN_VALUE, CONTEXT_VALUE_SINGLE_QUOTE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_VALUE:
+ if ((c == '"' && m_Context == CONTEXT_VALUE_DOUBLE_QUOTE) ||
+ (c == '\'' && m_Context == CONTEXT_VALUE_SINGLE_QUOTE)) {
+ NPT_CHECK(m_Parser->OnElementAttribute(m_Name.GetString(),
+ m_Value.GetString()));
+ SetState(STATE_IN_WHITESPACE, CONTEXT_ATTRIBUTE);
+ } else if (c == '&') {
+ m_Entity.Reset();
+ SetState(STATE_IN_ENTITY_REF);
+ } else if (NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ m_Value.Append(' ');
+ } else if (NPT_XML_CHAR_IS_VALUE_CHAR(c)) {
+ m_Value.Append(c);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_TAG_START:
+ m_Name.Reset();
+ if (c == '!') {
+ SetState(STATE_IN_NAME_SPECIAL, CONTEXT_NONE);
+ } else if (c == '?') {
+ SetState(STATE_IN_PROCESSING_INSTRUCTION, CONTEXT_NONE);
+ } else if (c == '/') {
+ SetState(STATE_IN_NAME, CONTEXT_CLOSE_TAG);
+ } else if (NPT_XML_CHAR_IS_NAME_CHAR(c)) {
+ m_Name.Append(c);
+ SetState(STATE_IN_NAME, CONTEXT_OPEN_TAG);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_EMPTY_TAG_END:
+ if (c == '>') {
+ NPT_CHECK(FlushPendingText());
+ NPT_CHECK(m_Parser->OnEndElement(NULL));
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_ENTITY_REF:
+ switch (m_Context) {
+ case CONTEXT_VALUE_SINGLE_QUOTE:
+ case CONTEXT_VALUE_DOUBLE_QUOTE:
+ if (c == ';') {
+ NPT_CHECK(ResolveEntity(m_Entity, m_Value));
+ SetState(STATE_IN_VALUE);
+ } else if (NPT_XML_CHAR_IS_ENTITY_REF_CHAR(c)) {
+ m_Entity.Append(c);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case CONTEXT_NONE:
+ if (c == ';') {
+ NPT_CHECK(ResolveEntity(m_Entity, m_Text));
+ SetState(STATE_IN_CONTENT);
+ } else if (NPT_XML_CHAR_IS_ENTITY_REF_CHAR(c)) {
+ m_Entity.Append(c);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ default:
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_COMMENT:
+ if (c == '-') {
+ SetState(STATE_IN_COMMENT_END_1);
+ } else if (!NPT_XML_CHAR_IS_ANY_CHAR(c)) {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_COMMENT_END_1:
+ if (c == '-') {
+ SetState(STATE_IN_COMMENT_END_2);
+ } else if (NPT_XML_CHAR_IS_ANY_CHAR(c)) {
+ SetState(STATE_IN_COMMENT);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_COMMENT_END_2:
+ if (c == '>') {
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_CONTENT:
+ if (c == '<') {
+ SetState(STATE_IN_TAG_START, CONTEXT_NONE);
+ } else if (c == '&') {
+ m_Entity.Reset();
+ SetState(STATE_IN_ENTITY_REF);
+ } else {
+ m_Text.Append(c);
+ }
+ break;
+
+ case STATE_IN_PROCESSING_INSTRUCTION_START:
+ break;
+
+ case STATE_IN_PROCESSING_INSTRUCTION_END:
+ if (c == '>') {
+ SetState(STATE_IN_WHITESPACE, CONTEXT_NONE);
+ } else {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_PROCESSING_INSTRUCTION:
+ if (c == '?') {
+ SetState(STATE_IN_PROCESSING_INSTRUCTION_END);
+ }
+ break;
+
+ case STATE_IN_DTD:
+ if (NPT_XML_CHAR_IS_WHITESPACE(c)) break;
+ if (c == '[') {
+ SetState(STATE_IN_DTD_MARKUP_DECL);
+ } else if (c == '>') {
+ SetState(STATE_IN_WHITESPACE, CONTEXT_NONE);
+ }
+ break;
+
+ case STATE_IN_DTD_MARKUP_DECL:
+ if (c == ']') {
+ SetState(STATE_IN_DTD_MARKUP_DECL_END);
+ }
+ break;
+
+ case STATE_IN_DTD_MARKUP_DECL_END:
+ if (c == '>') {
+ SetState(STATE_IN_WHITESPACE, CONTEXT_NONE);
+ } else if (!NPT_XML_CHAR_IS_WHITESPACE(c)) {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+ break;
+
+ case STATE_IN_CDATA:
+ if (c == ']') {
+ SetState(STATE_IN_CDATA_END_1);
+ } else {
+ m_Text.Append(c);
+ }
+ break;
+
+ case STATE_IN_CDATA_END_1:
+ if (c == ']') {
+ SetState(STATE_IN_CDATA_END_2);
+ } else {
+ m_Text.Append(']');
+ m_Text.Append(c);
+ SetState(STATE_IN_CDATA);
+ }
+ break;
+
+ case STATE_IN_CDATA_END_2:
+ if (c == '>') {
+ SetState(STATE_IN_CONTENT, CONTEXT_NONE);
+ } else {
+ m_Text.Append("]]");
+ m_Text.Append(c);
+ SetState(STATE_IN_CDATA);
+ }
+ break;
+
+ case STATE_IN_SPECIAL:
+ if (c == '>') {
+ SetState(STATE_IN_WHITESPACE, CONTEXT_NONE);
+ }
+ break;
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::NPT_XmlParser
++---------------------------------------------------------------------*/
+NPT_XmlParser::NPT_XmlParser(bool keep_whitespace /* = false */) :
+ m_Tree(NULL),
+ m_CurrentElement(NULL),
+ m_KeepWhitespace(keep_whitespace)
+{
+ m_Processor = new NPT_XmlProcessor(this);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::~NPT_XmlParser
++---------------------------------------------------------------------*/
+NPT_XmlParser::~NPT_XmlParser()
+{
+ delete m_Processor;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::Parse(NPT_InputStream& stream,
+ NPT_Size& size,
+ NPT_XmlNode*& node,
+ bool incremental /* = false */)
+{
+ NPT_Result result;
+
+ // reset the tree unless we're in incremental mode
+ if (!incremental) m_Tree = NULL;
+
+ // provide a default return node in case of error
+ node = m_Tree;
+
+ // use a buffer on the stack
+ char buffer[256];
+
+ // read a buffer and parse it until the end of the stream
+ NPT_Size max_bytes_to_read = size;
+ size = 0;
+ do {
+ NPT_Size bytes_read;
+ NPT_Size bytes_to_read = sizeof(buffer);
+ if (max_bytes_to_read != 0 &&
+ size+bytes_to_read > max_bytes_to_read) {
+ bytes_to_read = max_bytes_to_read-size;
+ }
+ result = stream.Read(buffer, sizeof(buffer), &bytes_read);
+ if (NPT_SUCCEEDED(result)) {
+ // update the counter
+ size += bytes_read;
+
+ // parse the buffer
+ NPT_CHECK(m_Processor->ProcessBuffer(buffer, bytes_read));
+ } else {
+ if (result == NPT_ERROR_WOULD_BLOCK && incremental) break;
+ if (result != NPT_ERROR_EOS) return result;
+ }
+ } while(NPT_SUCCEEDED(result) &&
+ (max_bytes_to_read == 0 || size < max_bytes_to_read));
+
+ // return a tree if we have one
+ node = m_Tree;
+
+ if (incremental) {
+ return result;
+ } else {
+ return m_Tree?NPT_SUCCESS:NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::Parse(NPT_InputStream& stream,
+ NPT_XmlNode*& node,
+ bool incremental /* = false */)
+{
+ NPT_Size max_read = 0; // no limit
+ return Parse(stream, max_read, node, incremental);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::Parse(const char* xml,
+ NPT_XmlNode*& node,
+ bool incremental /* = false */)
+{
+ NPT_Size size = NPT_StringLength(xml);
+
+ return Parse(xml, size, node, incremental);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::Parse
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::Parse(const char* xml,
+ NPT_Size size,
+ NPT_XmlNode*& node,
+ bool incremental /* = false */)
+{
+ // reset the tree unless we're in incremental mode
+ if (!incremental) m_Tree = NULL;
+
+ // provide a default return node in case of error
+ node = m_Tree;
+
+ // parse the buffer
+ NPT_CHECK(m_Processor->ProcessBuffer(xml, size));
+
+ // return a tree if we have one
+ node = m_Tree;
+
+ if (incremental) {
+ return NPT_SUCCESS;
+ } else {
+ return m_Tree?NPT_SUCCESS:NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::OnStartElement
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::OnStartElement(const char* name)
+{
+ NPT_XML_Debug_1("\nNPT_XmlParser::OnStartElement: %s\n", name);
+
+ // create new node
+ NPT_XmlElementNode* node = new NPT_XmlElementNode(name);
+
+ // add node to tree
+ if (m_CurrentElement) {
+ // add the new node
+ m_CurrentElement->AddChild(node);
+ }
+ m_CurrentElement = node;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::OnElementAttribute
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::OnElementAttribute(const char* name, const char* value)
+{
+ NPT_XML_Debug_2("\nNPT_XmlParser::OnElementAttribute: name=%s, value='%s'\n",
+ name, value);
+
+ if (m_CurrentElement == NULL) {
+ return NPT_ERROR_INVALID_SYNTAX;
+ }
+
+ // check if this is a namespace attribute
+ if (name[0] == 'x' &&
+ name[1] == 'm' &&
+ name[2] == 'l' &&
+ name[3] == 'n' &&
+ name[4] == 's' &&
+ (name[5] == '\0' || name[5] == ':')) {
+ // namespace definition
+ m_CurrentElement->SetNamespaceUri((name[5] == ':')?name+6:"", value);
+ } else {
+ m_CurrentElement->AddAttribute(name, value);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::OnEndElement
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::OnEndElement(const char* name)
+{
+ NPT_XML_Debug_1("\nNPT_XmlParser::OnEndElement: %s\n", name ? name : "NULL");
+
+ if (m_CurrentElement == NULL) return NPT_ERROR_XML_TAG_MISMATCH;
+
+ // check that the name matches (if there is a name)
+ if (name) {
+ const char* prefix = name;
+ unsigned int prefix_length = 0;
+ const char* tag = name;
+ const char* cursor = name;
+ while (char c = *cursor++) {
+ if (c == ':') {
+ prefix_length = (unsigned int)(cursor-name)-1;
+ tag = cursor;
+ }
+ }
+ // check that the name and prefix length match
+ if (m_CurrentElement->GetTag() != tag ||
+ m_CurrentElement->GetPrefix().GetLength() != prefix_length) {
+ return NPT_ERROR_XML_TAG_MISMATCH;
+ }
+
+ // check the prefix
+ const char* current_prefix = m_CurrentElement->GetPrefix().GetChars();
+ for (unsigned int i=0; i<prefix_length; i++) {
+ if (current_prefix[i] != prefix[i]) {
+ return NPT_ERROR_XML_TAG_MISMATCH;
+ }
+ }
+ }
+
+ // pop up the stack
+ NPT_XmlNode* parent = m_CurrentElement->GetParent();
+ if (parent == NULL) {
+ m_Tree = m_CurrentElement;
+ }
+ m_CurrentElement = parent ? parent->AsElementNode() : NULL;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser::OnCharacterData
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlParser::OnCharacterData(const char* data, unsigned long size)
+{
+ NPT_XML_Debug_1("\nNPT_XmlParser::OnCharacterData: %s\n", data);
+
+ // check that we have a current element
+ if (m_CurrentElement == NULL) {
+ // we do not allow non-whitespace outside an element content
+ if (!NPT_XmlStringIsWhitespace(data, size)) {
+ return NPT_ERROR_XML_INVALID_NESTING;
+ }
+
+ // ignore whitespace
+ return NPT_SUCCESS;
+ }
+
+ // ignore whitespace if applicable
+ if (m_KeepWhitespace || !NPT_XmlStringIsWhitespace(data, size)) {
+ // add the text to the current element
+ m_CurrentElement->AddText(data);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlAttributeWriter
++---------------------------------------------------------------------*/
+class NPT_XmlAttributeWriter
+{
+public:
+ NPT_XmlAttributeWriter(NPT_XmlSerializer& serializer) : m_Serializer(serializer) {}
+ void operator()(NPT_XmlAttribute*& attribute) const {
+ m_Serializer.Attribute(attribute->GetPrefix(),
+ attribute->GetName(),
+ attribute->GetValue());
+ }
+
+private:
+ // members
+ NPT_XmlSerializer& m_Serializer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeWriter
++---------------------------------------------------------------------*/
+class NPT_XmlNodeWriter
+{
+public:
+ NPT_XmlNodeWriter(NPT_XmlSerializer& serializer) :
+ m_Serializer(serializer), m_AttributeWriter(serializer) {
+ m_Serializer.StartDocument(); // WMP needs this!
+ }
+ void operator()(NPT_XmlNode*& node) const {
+ if (NPT_XmlElementNode* element = node->AsElementNode()) {
+ const NPT_String& prefix = element->GetPrefix();
+ const NPT_String& tag = element->GetTag();
+ m_Serializer.StartElement(prefix, tag);
+ element->GetAttributes().Apply(m_AttributeWriter);
+
+ // emit namespace attributes
+ if (element->m_NamespaceMap) {
+ NPT_List<NPT_XmlNamespaceMap::Entry*>::Iterator item =
+ element->m_NamespaceMap->m_Entries.GetFirstItem();
+ while (item) {
+ if ((*item)->m_Prefix.IsEmpty()) {
+ // default namespace
+ m_Serializer.Attribute(NULL, "xmlns", (*item)->m_Uri);
+ } else {
+ // namespace with prefix
+ m_Serializer.Attribute("xmlns", (*item)->m_Prefix, (*item)->m_Uri);
+ }
+ ++item;
+ }
+ }
+
+ element->GetChildren().Apply(*this);
+ m_Serializer.EndElement(prefix, tag);
+ } else if (NPT_XmlTextNode* text = node->AsTextNode()) {
+ m_Serializer.Text(text->GetString());
+ }
+ }
+
+private:
+ // members
+ NPT_XmlSerializer& m_Serializer;
+ NPT_XmlAttributeWriter m_AttributeWriter;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter
++---------------------------------------------------------------------*/
+class NPT_XmlNodeCanonicalWriter
+{
+public:
+ // types
+ struct MapChainLink {
+ MapChainLink(MapChainLink* parent) : m_Parent(parent) {}
+ MapChainLink* m_Parent;
+ NPT_Map<NPT_String, NPT_String> m_RenderedNamespaces;
+ };
+
+ // constructor
+ NPT_XmlNodeCanonicalWriter(NPT_XmlSerializer& serializer,
+ MapChainLink* map_chain = NULL) :
+ m_MapChain(map_chain),
+ m_Serializer(serializer) {
+ m_Serializer.StartDocument(); // WMP needs this!
+ }
+ void operator()(NPT_XmlNode*& node) const;
+
+private:
+ // types
+ struct SortedAttributeList {
+ // types
+ struct Entry {
+ const NPT_String* m_NamespaceUri;
+ const NPT_XmlAttribute* m_Attribute;
+ };
+
+ // methods
+ void Add(const NPT_String* namespace_uri,
+ const NPT_XmlAttribute* attribute);
+ void Emit(NPT_XmlSerializer& serializer);
+
+ // members
+ NPT_List<Entry> m_Entries;
+ };
+
+ struct SortedNamespaceList {
+ // types
+ struct Entry {
+ const NPT_String* m_NamespacePrefix;
+ const NPT_String* m_NamespaceUri;
+ };
+
+ // methods
+ void Add(const NPT_String* prefix, const NPT_String* uri);
+ void Emit(NPT_XmlSerializer& serializer);
+
+ // members
+ NPT_List<Entry> m_Entries;
+ };
+
+ // methods
+ const NPT_String* GetNamespaceRenderedForPrefix(const NPT_String& prefix) const;
+
+ // members
+ MapChainLink* m_MapChain;
+ NPT_XmlSerializer& m_Serializer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::SortedAttributeList::Add
++---------------------------------------------------------------------*/
+void
+NPT_XmlNodeCanonicalWriter::SortedAttributeList::Add(
+ const NPT_String* namespace_uri,
+ const NPT_XmlAttribute* attribute)
+{
+ // transform empty strings into NULL pointers
+ if (namespace_uri && namespace_uri->IsEmpty()) namespace_uri = NULL;
+
+ // find the namespace insertion position
+ NPT_List<Entry>::Iterator entry = m_Entries.GetFirstItem();
+ for (; entry; ++entry) {
+ // decide if we insert now or move on
+ const NPT_String* other_namespace_uri = entry->m_NamespaceUri;
+ if (namespace_uri &&
+ (other_namespace_uri == NULL || *namespace_uri > *other_namespace_uri)) {
+ // this namespace uri is greater than the other, skip
+ continue;
+ } else if ((namespace_uri == NULL && other_namespace_uri == NULL) ||
+ (namespace_uri && other_namespace_uri &&
+ *namespace_uri == *other_namespace_uri)) {
+ // namespace uris match, compare the names
+ const NPT_XmlAttribute* other_attribute = entry->m_Attribute;
+ if (attribute->GetName() > other_attribute->GetName()) continue;
+ }
+ break;
+ }
+
+ Entry new_entry = {namespace_uri, attribute};
+ m_Entries.Insert(entry, new_entry);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::SortedAttributeList::Emit
++---------------------------------------------------------------------*/
+void
+NPT_XmlNodeCanonicalWriter::SortedAttributeList::Emit(NPT_XmlSerializer& serializer)
+{
+ for (NPT_List<Entry>::Iterator i = m_Entries.GetFirstItem(); i; ++i) {
+ serializer.Attribute(i->m_Attribute->GetPrefix(),
+ i->m_Attribute->GetName(),
+ i->m_Attribute->GetValue());
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::SortedNamespaceList::Add
++---------------------------------------------------------------------*/
+void
+NPT_XmlNodeCanonicalWriter::SortedNamespaceList::Add(const NPT_String* prefix,
+ const NPT_String* uri)
+{
+ // find the namespace insertion position
+ NPT_List<Entry>::Iterator entry = m_Entries.GetFirstItem();
+ if (prefix && !prefix->IsEmpty()) {
+ for (; entry; ++entry) {
+ // decide if we insert now or move on
+ if (entry->m_NamespacePrefix && *prefix <= *entry->m_NamespacePrefix) {
+ break;
+ }
+ }
+ } else {
+ prefix = NULL;
+ }
+
+ Entry new_entry = {prefix, uri};
+ m_Entries.Insert(entry, new_entry);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::SortedNamespaceList::Emit
++---------------------------------------------------------------------*/
+void
+NPT_XmlNodeCanonicalWriter::SortedNamespaceList::Emit(NPT_XmlSerializer& serializer)
+{
+ for (NPT_List<Entry>::Iterator i = m_Entries.GetFirstItem(); i; ++i) {
+ const NPT_String* key = i->m_NamespacePrefix;
+ const NPT_String* value = i->m_NamespaceUri;
+ if (key == NULL) {
+ serializer.Attribute(NULL, "xmlns", *value);
+ } else if (*key != "xml" || *value != NPT_XmlNamespaceUri_Xml) {
+ serializer.Attribute("xmlns", *key, *value);
+ }
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::GetNamespaceRenderedForPrefix
++---------------------------------------------------------------------*/
+const NPT_String*
+NPT_XmlNodeCanonicalWriter::GetNamespaceRenderedForPrefix(const NPT_String& prefix) const
+{
+ for (MapChainLink* link = m_MapChain;
+ link;
+ link = link->m_Parent) {
+ NPT_String* uri;
+ if (NPT_SUCCEEDED(link->m_RenderedNamespaces.Get(prefix, uri))) {
+ return uri;
+ }
+ }
+
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlNodeCanonicalWriter::operator()
++---------------------------------------------------------------------*/
+void
+NPT_XmlNodeCanonicalWriter::operator()(NPT_XmlNode*& node) const
+{
+ MapChainLink map_link(m_MapChain);
+
+ if (NPT_XmlElementNode* element = node->AsElementNode()) {
+ const NPT_String& prefix = element->GetPrefix();
+ const NPT_String& tag = element->GetTag();
+
+ // process namespaces
+ const NPT_String* namespace_uri = element->GetNamespace();
+ const NPT_String* rendered = GetNamespaceRenderedForPrefix(prefix);
+ if (namespace_uri && namespace_uri->IsEmpty()) namespace_uri = NULL;
+ if (prefix.IsEmpty()) {
+ // default namespace
+ if (rendered == NULL) {
+ // default namespace not rendered
+ if (namespace_uri) {
+ map_link.m_RenderedNamespaces.Put("", *namespace_uri);
+ }
+ } else {
+ // default namespace already rendered
+ const char* compare;
+ if (namespace_uri) {
+ compare = namespace_uri->GetChars();
+ } else {
+ compare = "";
+ }
+ if (*rendered != compare) {
+ // the rendered default namespace had a different uri
+ map_link.m_RenderedNamespaces.Put("", compare);
+ }
+ }
+ } else {
+ // explicit namespace
+ // NOTE: namespace_uri should not be an empty string, but we test just
+ // in case the XML document is not compliant
+ if (namespace_uri && (rendered == NULL || *rendered != *namespace_uri)) {
+ // namespace prefix not rendered or rendered with a different value
+ map_link.m_RenderedNamespaces.Put(prefix, *namespace_uri);
+ }
+ }
+
+ // process attributes
+ SortedAttributeList prefixed_attributes;
+ SortedAttributeList naked_attributes;
+ for (NPT_List<NPT_XmlAttribute*>::Iterator attribute = element->GetAttributes().GetFirstItem();
+ attribute;
+ ++attribute) {
+ const NPT_String& a_prefix = (*attribute)->GetPrefix();
+ if (a_prefix.IsEmpty()) {
+ // naked attribute
+ naked_attributes.Add(NULL, *attribute);
+ } else {
+ // decide if we need to render this namespace declaration
+ namespace_uri = element->GetNamespaceUri(a_prefix);
+ if (namespace_uri) {
+ rendered = GetNamespaceRenderedForPrefix(a_prefix);;
+ if (rendered == NULL || *rendered != *namespace_uri) {
+ // namespace not rendered or rendered with a different value
+ map_link.m_RenderedNamespaces.Put(a_prefix, *namespace_uri);
+ }
+ prefixed_attributes.Add(namespace_uri, *attribute);
+ }
+ }
+ }
+
+ // start of element
+ m_Serializer.StartElement(prefix, tag);
+
+ // namespace declarations
+ if (map_link.m_RenderedNamespaces.GetEntryCount()) {
+ SortedNamespaceList namespaces;
+ NPT_List<NPT_Map<NPT_String, NPT_String>::Entry*>::Iterator entry =
+ map_link.m_RenderedNamespaces.GetEntries().GetFirstItem();
+ while (entry) {
+ const NPT_String& key = (*entry)->GetKey();
+ const NPT_String& value = (*entry)->GetValue();
+ namespaces.Add(&key, &value);
+ ++entry;
+ }
+ namespaces.Emit(m_Serializer);
+ }
+
+ // attributes
+ naked_attributes.Emit(m_Serializer);
+ prefixed_attributes.Emit(m_Serializer);
+
+ // children
+ MapChainLink* chain;
+ if (map_link.m_RenderedNamespaces.GetEntryCount()) {
+ chain = &map_link;
+ } else {
+ chain = m_MapChain;
+ }
+ element->GetChildren().Apply(NPT_XmlNodeCanonicalWriter(m_Serializer, chain));
+
+ // end of element
+ m_Serializer.EndElement(prefix, tag);
+ } else if (NPT_XmlTextNode* text = node->AsTextNode()) {
+ m_Serializer.Text(text->GetString());
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::NPT_XmlSerializer
++---------------------------------------------------------------------*/
+NPT_XmlSerializer::NPT_XmlSerializer(NPT_OutputStream* output,
+ NPT_Cardinal indentation,
+ bool shrink_empty_elements,
+ bool add_header) :
+ m_Output(output),
+ m_ElementPending(false),
+ m_Depth(0),
+ m_Indentation(indentation),
+ m_ElementHasText(false),
+ m_ShrinkEmptyElements(shrink_empty_elements),
+ m_AddHeader(add_header)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::~NPT_XmlSerializer
++---------------------------------------------------------------------*/
+NPT_XmlSerializer::~NPT_XmlSerializer()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::StartDocument
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::StartDocument()
+{
+ if (!m_AddHeader) return NPT_SUCCESS;
+
+ return m_Output->WriteString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::EndDocument
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::EndDocument()
+{
+ return m_ElementPending?NPT_ERROR_INVALID_STATE:NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::EscapeChar
++---------------------------------------------------------------------*/
+void
+NPT_XmlSerializer::EscapeChar(unsigned char c, char* text)
+{
+ *text++ = '&';
+ *text++ = '#';
+ *text++ = 'x';
+ int c0 = c>>4;
+ int c1 = c&0xF;
+ if (c0) {
+ *text++ = c0 >= 10 ? 'A'+(c0-10) : '0'+c0;
+ }
+ *text++ = c1 >= 10 ? 'A'+(c1-10) : '0'+c1;
+ *text++ = ';';
+ *text = '\0';
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::ProcessPending
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::ProcessPending()
+{
+ if (!m_ElementPending) return NPT_SUCCESS;
+ m_ElementPending = false;
+ return m_Output->Write(">", 1);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::OutputEscapedString
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::OutputEscapedString(const char* text, bool attribute)
+{
+ const char* start = text;
+ char escaped[7];
+ while (char c = *text) {
+ const char* insert = NULL;
+ switch (c) {
+ case '\r': {
+ EscapeChar(c, escaped);
+ insert = escaped;
+ break;
+ }
+ case '\n':
+ case '\t':
+ if (attribute) {
+ EscapeChar(c, escaped);
+ insert = escaped;
+ }
+ break;
+
+ case '&' : insert = "&amp;"; break;
+ case '<' : insert = "&lt;"; break;
+ case '>' : if (!attribute) insert = "&gt;"; break;
+ case '"' : if (attribute) insert = "&quot;"; break;
+ default :
+ break;
+ }
+ if (insert) {
+ // output pending chars
+ if (start != text) m_Output->Write(start, (NPT_Size)(text-start));
+ m_Output->WriteString(insert);
+ start = ++text;
+ } else {
+ ++text;
+ }
+ }
+ if (start != text) {
+ m_Output->Write(start, (NPT_Size)(text-start));
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::OutputIndentation
++---------------------------------------------------------------------*/
+void
+NPT_XmlSerializer::OutputIndentation(bool start)
+{
+ if (m_Depth || !start) m_Output->Write("\n", 1);
+
+ // ensure we have enough chars in the prefix string
+ unsigned int prefix_length = m_Indentation*m_Depth;
+ if (m_IndentationPrefix.GetLength() < prefix_length) {
+ unsigned int needed = prefix_length-m_IndentationPrefix.GetLength();
+ for (unsigned int i=0; i<needed; i+=16) {
+ m_IndentationPrefix.Append(" ", 16);
+ }
+ }
+
+ // print the indentation prefix
+ m_Output->Write(m_IndentationPrefix.GetChars(), prefix_length);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::StartElement
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::StartElement(const char* prefix, const char* name)
+{
+ ProcessPending();
+ if (m_Indentation) OutputIndentation(true);
+ m_ElementPending = true;
+ m_ElementHasText = false;
+ m_Depth++;
+ m_Output->Write("<", 1);
+ if (prefix && prefix[0]) {
+ m_Output->WriteString(prefix);
+ m_Output->Write(":", 1);
+ }
+ return m_Output->WriteString(name);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::EndElement
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::EndElement(const char* prefix, const char* name)
+{
+ m_Depth--;
+
+ if (m_ElementPending) {
+ // this element has no children
+ m_ElementPending = false;
+ if (m_ShrinkEmptyElements) {
+ return m_Output->Write("/>", 2);
+ } else {
+ m_Output->Write(">",1);
+ }
+ }
+
+ if (m_Indentation && !m_ElementHasText) OutputIndentation(false);
+ m_ElementHasText = false;
+ m_Output->Write("</", 2);
+ if (prefix && prefix[0]) {
+ m_Output->WriteString(prefix);
+ m_Output->Write(":", 1);
+ }
+ m_Output->WriteString(name);
+ return m_Output->Write(">", 1);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::Attribute
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::Attribute(const char* prefix, const char* name, const char* value)
+{
+ m_Output->Write(" ", 1);
+ if (prefix && prefix[0]) {
+ m_Output->WriteString(prefix);
+ m_Output->Write(":", 1);
+ }
+ m_Output->WriteString(name);
+ m_Output->Write("=\"", 2);
+ OutputEscapedString(value, true);
+ return m_Output->Write("\"", 1);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::Text
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::Text(const char* text)
+{
+ ProcessPending();
+ m_ElementHasText = true;
+ return OutputEscapedString(text, false);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::CdataSection
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::CdataSection(const char* data)
+{
+ ProcessPending();
+ m_ElementHasText = true;
+ m_Output->Write("<![CDATA[", 9);
+ m_Output->WriteString(data);
+ return m_Output->Write("]]>", 3);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer::Comment
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlSerializer::Comment(const char* comment)
+{
+ ProcessPending();
+ m_Output->Write("<!--", 4);
+ m_Output->WriteString(comment);
+ return m_Output->Write("-->", 3);
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlWriter::Serialize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlWriter::Serialize(NPT_XmlNode& node,
+ NPT_OutputStream& output,
+ bool add_header)
+{
+ NPT_XmlSerializer serializer(&output, m_Indentation, true, add_header);
+ NPT_XmlNodeWriter node_writer(serializer);
+ NPT_XmlNode* node_pointer = &node;
+ node_writer(node_pointer);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_XmlCanonicalizer::Serialize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_XmlCanonicalizer::Serialize(NPT_XmlNode& node,
+ NPT_OutputStream& output,
+ bool add_header)
+{
+ // create a serializer with no indentation and no shrinking of empty elements
+ NPT_XmlSerializer serializer(&output, 0, false, add_header);
+
+ // serialize the node
+ NPT_XmlNodeCanonicalWriter node_writer(serializer);
+ NPT_XmlNode* node_pointer = &node;
+ node_writer(node_pointer);
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/Core/NptXml.h b/lib/libUPnP/Neptune/Source/Core/NptXml.h
new file mode 100644
index 0000000000..33246588ff
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptXml.h
@@ -0,0 +1,385 @@
+/*****************************************************************
+|
+| Neptune - Xml Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_XML_H_
+#define _NPT_XML_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptList.h"
+#include "NptStrings.h"
+#include "NptStreams.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_ERROR_XML_INVALID_NESTING = NPT_ERROR_BASE_XML - 0;
+const int NPT_ERROR_XML_TAG_MISMATCH = NPT_ERROR_BASE_XML - 1;
+
+#define NPT_XML_ANY_NAMESPACE "*"
+#define NPT_XML_NO_NAMESPACE NULL
+
+/*----------------------------------------------------------------------
+| forward declarations
++---------------------------------------------------------------------*/
+class NPT_XmlProcessor;
+
+/*----------------------------------------------------------------------
+| NPT_XmlAttribute
++---------------------------------------------------------------------*/
+class NPT_XmlAttribute
+{
+ public:
+ // methods
+ NPT_XmlAttribute(const char* name, const char* value);
+ NPT_XmlAttribute(const char* prefix, const char* name, const char* value) :
+ m_Prefix(prefix), m_Name(name), m_Value(value) {}
+ const NPT_String& GetPrefix() const { return m_Prefix; }
+ const NPT_String& GetName() const { return m_Name; }
+ const NPT_String& GetValue() const { return m_Value; }
+ void SetValue(const char* value) { m_Value = value; }
+
+ private:
+ // members
+ NPT_String m_Prefix;
+ NPT_String m_Name;
+ NPT_String m_Value;
+
+ NPT_XmlAttribute(const NPT_XmlAttribute& attribute) :
+ m_Prefix(attribute.m_Prefix),
+ m_Name(attribute.m_Name),
+ m_Value(attribute.m_Value) {}
+ NPT_XmlAttribute& operator=(const NPT_XmlAttribute& a);
+
+ // friends
+ friend class NPT_XmlAttributeFinder;
+ friend class NPT_XmlAttributeFinderWithPrefix;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNamespaceMap
++---------------------------------------------------------------------*/
+class NPT_XmlNamespaceMap
+{
+public:
+ // destructor
+ ~NPT_XmlNamespaceMap();
+
+ // methods
+ NPT_Result SetNamespaceUri(const char* prefix, const char* uri);
+ const NPT_String* GetNamespaceUri(const char* prefix);
+ const NPT_String* GetNamespacePrefix(const char* uri);
+
+private:
+ // types
+ class Entry {
+ public:
+ // constructor
+ Entry(const char* prefix, const char* uri) :
+ m_Prefix(prefix), m_Uri(uri) {}
+
+ // members
+ NPT_String m_Prefix;
+ NPT_String m_Uri;
+ };
+
+ // members
+ NPT_List<Entry*> m_Entries;
+
+ // friends
+ friend class NPT_XmlWriter;
+ friend class NPT_XmlNodeWriter;
+ friend class NPT_XmlNodeCanonicalWriter;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlNode
++---------------------------------------------------------------------*/
+class NPT_XmlElementNode;
+class NPT_XmlTextNode;
+class NPT_XmlNode
+{
+ public:
+ // types
+ typedef enum {
+ DOCUMENT,
+ ELEMENT,
+ TEXT
+ } Type;
+
+ // methods
+ NPT_XmlNode(Type type) : m_Type(type), m_Parent(NULL) {}
+ virtual ~NPT_XmlNode() {}
+ Type GetType() const { return m_Type; }
+ NPT_XmlNode* GetParent() const { return m_Parent; }
+
+ // type casting
+ virtual NPT_XmlElementNode* AsElementNode() { return NULL; }
+ virtual const NPT_XmlElementNode* AsElementNode() const { return NULL; }
+ virtual NPT_XmlTextNode* AsTextNode() { return NULL; }
+ virtual const NPT_XmlTextNode* AsTextNode() const { return NULL; }
+
+ protected:
+ // methods
+ virtual void SetParent(NPT_XmlNode* parent) { m_Parent = parent; }
+
+ // members
+ Type m_Type;
+ NPT_XmlNode* m_Parent;
+
+ // friends
+ friend class NPT_XmlNodeFinder;
+ friend class NPT_XmlSerializer;
+ friend class NPT_XmlWriter;
+ friend class NPT_XmlElementNode; // to allow access to SetParent()
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlElementNode
++---------------------------------------------------------------------*/
+class NPT_XmlElementNode : public NPT_XmlNode
+{
+ public:
+ // methods
+ NPT_XmlElementNode(const char* tag);
+ NPT_XmlElementNode(const char* prefix, const char* tag);
+ virtual ~NPT_XmlElementNode();
+ NPT_List<NPT_XmlNode*>& GetChildren() { return m_Children; }
+ const NPT_List<NPT_XmlNode*>&
+ GetChildren() const { return m_Children; }
+ NPT_XmlElementNode* GetChild(const char* tag,
+ const char* namespc = NPT_XML_NO_NAMESPACE,
+ NPT_Ordinal n=0) const;
+ NPT_Result AddChild(NPT_XmlNode* child);
+ NPT_Result SetAttribute(const char* prefix,
+ const char* name,
+ const char* value);
+ NPT_Result SetAttribute(const char* name,
+ const char* value);
+ NPT_Result AddText(const char* text);
+ NPT_List<NPT_XmlAttribute*>&
+ GetAttributes() { return m_Attributes; }
+ const NPT_List<NPT_XmlAttribute*>&
+ GetAttributes() const { return m_Attributes; }
+ const NPT_String* GetAttribute(const char* name,
+ const char* namespc = NPT_XML_NO_NAMESPACE) const;
+ const NPT_String& GetPrefix() const { return m_Prefix; }
+ const NPT_String& GetTag() const { return m_Tag; }
+ const NPT_String* GetText(NPT_Ordinal n=0) const;
+
+ // bring all the namespace definitions used in this element of one of its descendants
+ // into the namespace map of this element so that it may be serialized as a
+ // standalone element without any prefixes with undefined namespace uris
+ NPT_Result MakeStandalone();
+
+ // namespace methods
+ const NPT_String* GetNamespace() const;
+ NPT_Result SetNamespaceUri(const char* prefix, const char* uri);
+ const NPT_String* GetNamespaceUri(const char* prefix) const;
+ const NPT_String* GetNamespacePrefix(const char* uri) const;
+
+ // type casting
+ NPT_XmlElementNode* AsElementNode() { return this; }
+ const NPT_XmlElementNode* AsElementNode() const { return this; }
+
+protected:
+ // methods
+ void SetParent(NPT_XmlNode* parent);
+ void SetNamespaceParent(NPT_XmlElementNode* parent);
+ void RelinkNamespaceMaps();
+
+ NPT_Result AddAttribute(const char* name, const char* value);
+
+ // members
+ NPT_String m_Prefix;
+ NPT_String m_Tag;
+ NPT_List<NPT_XmlNode*> m_Children;
+ NPT_List<NPT_XmlAttribute*> m_Attributes;
+ NPT_XmlNamespaceMap* m_NamespaceMap;
+ NPT_XmlElementNode* m_NamespaceParent;
+
+ // friends
+ friend class NPT_XmlTagFinder;
+ friend class NPT_XmlSerializer;
+ friend class NPT_XmlWriter;
+ friend class NPT_XmlNodeWriter;
+ friend class NPT_XmlNodeCanonicalWriter;
+ friend class NPT_XmlParser;
+ friend class NPT_XmlProcessor;
+ friend class NPT_XmlNamespaceCollapser;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlTextNode
++---------------------------------------------------------------------*/
+class NPT_XmlTextNode : public NPT_XmlNode
+{
+ public:
+ // types
+ typedef enum {
+ CHARACTER_DATA,
+ IGNORABLE_WHITESPACE,
+ CDATA_SECTION,
+ ENTITY_REFERENCE,
+ COMMENT
+ } TokenType;
+
+ // constructor
+ NPT_XmlTextNode(TokenType token_type, const char* text);
+
+ // methods
+ const NPT_String& GetString() const { return m_Text; }
+
+ // type casting
+ NPT_XmlTextNode* AsTextNode() { return this; }
+ const NPT_XmlTextNode* AsTextNode() const { return this; }
+
+ private:
+ // members
+ TokenType m_TokenType;
+ NPT_String m_Text;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlParser
++---------------------------------------------------------------------*/
+class NPT_XmlParser
+{
+ public:
+ // methods
+ NPT_XmlParser(bool keep_whitespace = true);
+ virtual ~NPT_XmlParser();
+ virtual NPT_Result Parse(const char* xml,
+ NPT_XmlNode*& tree,
+ bool incremental=false);
+ virtual NPT_Result Parse(const char* xml,
+ NPT_Size size,
+ NPT_XmlNode*& tree,
+ bool incremental=false);
+ virtual NPT_Result Parse(NPT_InputStream& stream,
+ NPT_XmlNode*& tree,
+ bool incremental=false);
+ virtual NPT_Result Parse(NPT_InputStream& stream,
+ NPT_Size& size,
+ NPT_XmlNode*& tree,
+ bool incremental=false);
+
+ protected:
+ // NPT_XmlHandler methods
+ NPT_Result OnStartElement(const char* name);
+ NPT_Result OnElementAttribute(const char* name, const char* value);
+ NPT_Result OnEndElement(const char* name);
+ NPT_Result OnCharacterData(const char* data, unsigned long size);
+ void RemoveIgnorableWhitespace();
+
+ // members
+ NPT_XmlProcessor* m_Processor;
+ NPT_XmlElementNode* m_Tree;
+ NPT_XmlElementNode* m_CurrentElement;
+ bool m_KeepWhitespace;
+
+ // friends
+ friend class NPT_XmlProcessor;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlSerializer
++---------------------------------------------------------------------*/
+class NPT_XmlSerializer
+{
+public:
+ // methods
+ NPT_XmlSerializer(NPT_OutputStream* output,
+ NPT_Cardinal indentation = 0,
+ bool shrink_empty_elements = true,
+ bool add_header = true);
+ virtual ~NPT_XmlSerializer();
+ virtual NPT_Result StartDocument();
+ virtual NPT_Result EndDocument();
+ virtual NPT_Result StartElement(const char* prefix, const char* name);
+ virtual NPT_Result EndElement(const char* prefix, const char* name);
+ virtual NPT_Result Attribute(const char* prefix, const char* name, const char* value);
+ virtual NPT_Result Text(const char* text);
+ virtual NPT_Result CdataSection(const char* data);
+ virtual NPT_Result Comment(const char* comment);
+
+protected:
+ // methods
+ void EscapeChar(unsigned char c, char* text);
+ NPT_Result ProcessPending();
+ NPT_Result OutputEscapedString(const char* text, bool attribute);
+ void OutputIndentation(bool start);
+
+ // members
+ NPT_OutputStream* m_Output;
+ bool m_ElementPending;
+ NPT_Cardinal m_Depth;
+ NPT_Cardinal m_Indentation;
+ NPT_String m_IndentationPrefix;
+ bool m_ElementHasText;
+ bool m_ShrinkEmptyElements;
+ bool m_AddHeader;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlWriter
++---------------------------------------------------------------------*/
+class NPT_XmlWriter
+{
+public:
+ // constructor
+ explicit NPT_XmlWriter(NPT_Cardinal indentation = 0) : m_Indentation(indentation) {}
+
+ // methods
+ NPT_Result Serialize(NPT_XmlNode& node,
+ NPT_OutputStream& stream,
+ bool add_header = true);
+
+private:
+ // members
+ NPT_Cardinal m_Indentation;
+};
+
+/*----------------------------------------------------------------------
+| NPT_XmlCanonicalizer
++---------------------------------------------------------------------*/
+class NPT_XmlCanonicalizer
+{
+public:
+ // methods
+ NPT_Result Serialize(NPT_XmlNode& node,
+ NPT_OutputStream& stream,
+ bool add_header = true);
+};
+
+#endif // _NPT_XML_H_
diff --git a/lib/libUPnP/Neptune/Source/Core/NptZip.cpp b/lib/libUPnP/Neptune/Source/Core/NptZip.cpp
new file mode 100644
index 0000000000..225087762c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptZip.cpp
@@ -0,0 +1,496 @@
+/*****************************************************************
+|
+| Neptune - Zip Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#if defined(NPT_CONFIG_ENABLE_ZIP)
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptZip.h"
+#include "NptLogging.h"
+#include "NptUtils.h"
+
+#include "zlib.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.zip")
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_ZIP_DEFAULT_BUFFER_SIZE = 4096;
+
+/*----------------------------------------------------------------------
+| NPT_Zip::MapError
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Zip::MapError(int err)
+{
+ switch (err) {
+ case Z_OK: return NPT_SUCCESS;
+ case Z_STREAM_END: return NPT_ERROR_EOS;
+ case Z_DATA_ERROR:
+ case Z_STREAM_ERROR: return NPT_ERROR_INVALID_FORMAT;
+ case Z_MEM_ERROR: return NPT_ERROR_OUT_OF_MEMORY;
+ case Z_VERSION_ERROR: return NPT_ERROR_INTERNAL;
+ case Z_NEED_DICT: return NPT_ERROR_NOT_SUPPORTED;
+ default: return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflateState
++---------------------------------------------------------------------*/
+class NPT_ZipInflateState {
+public:
+ NPT_ZipInflateState();
+ ~NPT_ZipInflateState();
+ z_stream m_Stream;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflateState::NPT_ZipInflateState
++---------------------------------------------------------------------*/
+NPT_ZipInflateState::NPT_ZipInflateState()
+{
+ // initialize the state
+ NPT_SetMemory(&m_Stream, 0, sizeof(m_Stream));
+
+ // initialize the decompressor
+ inflateInit2(&m_Stream, 15+32); // 15 = default window bits, +32 = automatic header
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflateState::~NPT_ZipInflateState
++---------------------------------------------------------------------*/
+NPT_ZipInflateState::~NPT_ZipInflateState()
+{
+ inflateEnd(&m_Stream);
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflateState
++---------------------------------------------------------------------*/
+class NPT_ZipDeflateState {
+public:
+ NPT_ZipDeflateState(int compression_level,
+ NPT_Zip::Format format);
+ ~NPT_ZipDeflateState();
+ z_stream m_Stream;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflateState::NPT_ZipDeflateState
++---------------------------------------------------------------------*/
+NPT_ZipDeflateState::NPT_ZipDeflateState(int compression_level,
+ NPT_Zip::Format format)
+{
+ // check parameters
+ if (compression_level < NPT_ZIP_COMPRESSION_LEVEL_DEFAULT ||
+ compression_level > NPT_ZIP_COMPRESSION_LEVEL_MAX) {
+ compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT;
+ }
+
+ // initialize the state
+ NPT_SetMemory(&m_Stream, 0, sizeof(m_Stream));
+
+ // initialize the compressor
+ deflateInit2(&m_Stream,
+ compression_level,
+ Z_DEFLATED,
+ 15 + (format == NPT_Zip::GZIP ? 16 : 0),
+ 8,
+ Z_DEFAULT_STRATEGY);
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflateState::~NPT_ZipDeflateState
++---------------------------------------------------------------------*/
+NPT_ZipDeflateState::~NPT_ZipDeflateState()
+{
+ deflateEnd(&m_Stream);
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::NPT_ZipInflatingInputStream
++---------------------------------------------------------------------*/
+NPT_ZipInflatingInputStream::NPT_ZipInflatingInputStream(NPT_InputStreamReference& source) :
+ m_Source(source),
+ m_Position(0),
+ m_State(new NPT_ZipInflateState()),
+ m_Buffer(NPT_ZIP_DEFAULT_BUFFER_SIZE)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::~NPT_ZipInflatingInputStream
++---------------------------------------------------------------------*/
+NPT_ZipInflatingInputStream::~NPT_ZipInflatingInputStream()
+{
+ delete m_State;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipInflatingInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // check state and parameters
+ if (m_State == NULL) return NPT_ERROR_INVALID_STATE;
+ if (buffer == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // default values
+ if (bytes_read) *bytes_read = 0;
+
+ // setup the output buffer
+ m_State->m_Stream.next_out = (Bytef*)buffer;
+ m_State->m_Stream.avail_out = (uInt)bytes_to_read;
+
+ while (m_State->m_Stream.avail_out) {
+ // decompress what we can
+ int err = inflate(&m_State->m_Stream, Z_NO_FLUSH);
+
+ if (err == Z_STREAM_END) {
+ // we decompressed everything
+ break;
+ } else if (err == Z_OK) {
+ // we got something
+ continue;
+ } else if (err == Z_BUF_ERROR) {
+ // we need more input data
+ NPT_Size input_bytes_read = 0;
+ NPT_Result result = m_Source->Read(m_Buffer.UseData(), m_Buffer.GetBufferSize(), &input_bytes_read);
+ if (NPT_FAILED(result)) return result;
+
+ // setup the input buffer
+ m_Buffer.SetDataSize(input_bytes_read);
+ m_State->m_Stream.next_in = m_Buffer.UseData();
+ m_State->m_Stream.avail_in = m_Buffer.GetDataSize();
+
+ } else {
+ return NPT_Zip::MapError(err);
+ }
+ }
+
+ // report how much we could decompress
+ NPT_Size progress = bytes_to_read - m_State->m_Stream.avail_out;
+ if (bytes_read) {
+ *bytes_read = progress;
+ }
+ m_Position += progress;
+
+ return progress == 0 ? NPT_ERROR_EOS:NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipInflatingInputStream::Seek(NPT_Position /* offset */)
+{
+ // we can't seek
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipInflatingInputStream::Tell(NPT_Position& offset)
+{
+ offset = m_Position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipInflatingInputStream::GetSize(NPT_LargeSize& size)
+{
+ // the size is not predictable
+ size = 0;
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipInflatingInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ // we don't know
+ available = 0;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::NPT_ZipDeflatingInputStream
++---------------------------------------------------------------------*/
+NPT_ZipDeflatingInputStream::NPT_ZipDeflatingInputStream(
+ NPT_InputStreamReference& source,
+ int compression_level,
+ NPT_Zip::Format format) :
+ m_Source(source),
+ m_Position(0),
+ m_Eos(false),
+ m_State(new NPT_ZipDeflateState(compression_level, format)),
+ m_Buffer(NPT_ZIP_DEFAULT_BUFFER_SIZE)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::~NPT_ZipDeflatingInputStream
++---------------------------------------------------------------------*/
+NPT_ZipDeflatingInputStream::~NPT_ZipDeflatingInputStream()
+{
+ delete m_State;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipDeflatingInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // check state and parameters
+ if (m_State == NULL) return NPT_ERROR_INVALID_STATE;
+ if (buffer == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ if (bytes_to_read == 0) return NPT_SUCCESS;
+
+ // default values
+ if (bytes_read) *bytes_read = 0;
+
+ // setup the output buffer
+ m_State->m_Stream.next_out = (Bytef*)buffer;
+ m_State->m_Stream.avail_out = (uInt)bytes_to_read;
+
+ while (m_State->m_Stream.avail_out) {
+ // compress what we can
+ int err = deflate(&m_State->m_Stream, m_Eos?Z_FINISH:Z_NO_FLUSH);
+
+ if (err == Z_STREAM_END) {
+ // we compressed everything
+ break;
+ } else if (err == Z_OK) {
+ // we got something
+ continue;
+ } else if (err == Z_BUF_ERROR) {
+ // we need more input data
+ NPT_Size input_bytes_read = 0;
+ NPT_Result result = m_Source->Read(m_Buffer.UseData(), m_Buffer.GetBufferSize(), &input_bytes_read);
+ if (result == NPT_ERROR_EOS) {
+ m_Eos = true;
+ } else {
+ if (NPT_FAILED(result)) return result;
+ }
+
+ // setup the input buffer
+ m_Buffer.SetDataSize(input_bytes_read);
+ m_State->m_Stream.next_in = m_Buffer.UseData();
+ m_State->m_Stream.avail_in = m_Buffer.GetDataSize();
+
+ } else {
+ return NPT_Zip::MapError(err);
+ }
+ }
+
+ // report how much we could compress
+ NPT_Size progress = bytes_to_read - m_State->m_Stream.avail_out;
+ if (bytes_read) {
+ *bytes_read = progress;
+ }
+ m_Position += progress;
+
+ return progress == 0 ? NPT_ERROR_EOS:NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipDeflatingInputStream::Seek(NPT_Position /* offset */)
+{
+ // we can't seek
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipDeflatingInputStream::Tell(NPT_Position& offset)
+{
+ offset = m_Position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipDeflatingInputStream::GetSize(NPT_LargeSize& size)
+{
+ // the size is not predictable
+ size = 0;
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_ZipDeflatingInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ // we don't know
+ available = 0;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Zip::Deflate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Zip::Deflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out,
+ int compression_level,
+ Format format /* = ZLIB */)
+{
+ // default return state
+ out.SetDataSize(0);
+
+ // check parameters
+ if (compression_level < NPT_ZIP_COMPRESSION_LEVEL_DEFAULT ||
+ compression_level > NPT_ZIP_COMPRESSION_LEVEL_MAX) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // setup the stream
+ z_stream stream;
+ NPT_SetMemory(&stream, 0, sizeof(stream));
+ stream.next_in = (Bytef*)in.GetData();
+ stream.avail_in = (uInt)in.GetDataSize();
+
+ // setup the memory functions
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ // initialize the compressor
+ int err = deflateInit2(&stream,
+ compression_level,
+ Z_DEFLATED,
+ 15 + (format == GZIP ? 16 : 0),
+ 8,
+ Z_DEFAULT_STRATEGY);
+ if (err != Z_OK) return MapError(err);
+
+ // reserve an output buffer known to be large enough
+ out.Reserve(deflateBound(&stream, stream.avail_in) + (format==GZIP?10:0));
+ stream.next_out = out.UseData();
+ stream.avail_out = out.GetBufferSize();
+
+ // decompress
+ err = deflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ deflateEnd(&stream);
+ return MapError(err);
+ }
+
+ // update the output size
+ out.SetDataSize(stream.total_out);
+
+ // cleanup
+ err = deflateEnd(&stream);
+ return MapError(err);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Zip::Inflate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Zip::Inflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out)
+{
+ // assume an output buffer twice the size of the input plus a bit
+ NPT_CHECK_WARNING(out.Reserve(32+2*in.GetDataSize()));
+
+ // setup the stream
+ z_stream stream;
+ stream.next_in = (Bytef*)in.GetData();
+ stream.avail_in = (uInt)in.GetDataSize();
+ stream.next_out = out.UseData();
+ stream.avail_out = (uInt)out.GetBufferSize();
+
+ // setup the memory functions
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ // initialize the decompressor
+ int err = inflateInit2(&stream, 15+32); // 15 = default window bits, +32 = automatic header
+ if (err != Z_OK) return MapError(err);
+
+ // decompress until the end
+ do {
+ err = inflate(&stream, Z_SYNC_FLUSH);
+ if (err == Z_STREAM_END || err == Z_OK || err == Z_BUF_ERROR) {
+ out.SetDataSize(stream.total_out);
+ if ((err == Z_OK && stream.avail_out == 0) || err == Z_BUF_ERROR) {
+ // grow the output buffer
+ out.Reserve(out.GetBufferSize()*2);
+ stream.next_out = out.UseData()+stream.total_out;
+ stream.avail_out = out.GetBufferSize()-stream.total_out;
+ }
+ }
+ } while (err == Z_OK);
+
+ // check for errors
+ if (err != Z_STREAM_END) {
+ inflateEnd(&stream);
+ return MapError(err);
+ }
+
+ // cleanup
+ err = inflateEnd(&stream);
+ return MapError(err);
+}
+
+#endif // NPT_CONFIG_ENABLE_ZIP
diff --git a/lib/libUPnP/Neptune/Source/Core/NptZip.h b/lib/libUPnP/Neptune/Source/Core/NptZip.h
new file mode 100644
index 0000000000..12802fa517
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptZip.h
@@ -0,0 +1,144 @@
+/*****************************************************************
+|
+| Neptune - Zip Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_ZIP_H_
+#define _NPT_ZIP_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptStreams.h"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_ZipInflateState;
+class NPT_ZipDeflateState;
+
+/*----------------------------------------------------------------------
+| NPT_Zip
++---------------------------------------------------------------------*/
+const int NPT_ZIP_COMPRESSION_LEVEL_DEFAULT = -1;
+const int NPT_ZIP_COMPRESSION_LEVEL_MIN = 0;
+const int NPT_ZIP_COMPRESSION_LEVEL_MAX = 9;
+const int NPT_ZIP_COMPRESSION_LEVEL_NONE = 0;
+class NPT_Zip
+{
+public:
+ // class methods
+ static NPT_Result MapError(int err);
+
+ /**
+ * Compressed data format
+ */
+ typedef enum {
+ ZLIB,
+ GZIP
+ } Format;
+
+ /**
+ * Deflate (i.e compress) a buffer
+ */
+ static NPT_Result Deflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ Format format = ZLIB);
+
+ /**
+ * Inflate (i.e decompress) a buffer
+ */
+ static NPT_Result Inflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out);
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream
++---------------------------------------------------------------------*/
+class NPT_ZipInflatingInputStream : public NPT_InputStream
+{
+public:
+ NPT_ZipInflatingInputStream(NPT_InputStreamReference& source);
+ ~NPT_ZipInflatingInputStream();
+
+ // NPT_InputStream methods
+ virtual NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ virtual NPT_Result Seek(NPT_Position offset);
+ virtual NPT_Result Tell(NPT_Position& offset);
+ virtual NPT_Result GetSize(NPT_LargeSize& size);
+ virtual NPT_Result GetAvailable(NPT_LargeSize& available);
+
+private:
+ NPT_InputStreamReference m_Source;
+ NPT_Position m_Position;
+ NPT_ZipInflateState* m_State;
+ NPT_DataBuffer m_Buffer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingOutputStream
++---------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream
++---------------------------------------------------------------------*/
+class NPT_ZipDeflatingInputStream : public NPT_InputStream
+{
+public:
+ NPT_ZipDeflatingInputStream(NPT_InputStreamReference& source,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ NPT_Zip::Format format = NPT_Zip::ZLIB);
+ ~NPT_ZipDeflatingInputStream();
+
+ // NPT_InputStream methods
+ virtual NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL);
+ virtual NPT_Result Seek(NPT_Position offset);
+ virtual NPT_Result Tell(NPT_Position& offset);
+ virtual NPT_Result GetSize(NPT_LargeSize& size);
+ virtual NPT_Result GetAvailable(NPT_LargeSize& available);
+
+private:
+ NPT_InputStreamReference m_Source;
+ NPT_Position m_Position;
+ bool m_Eos;
+ NPT_ZipDeflateState* m_State;
+ NPT_DataBuffer m_Buffer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream
++---------------------------------------------------------------------*/
+
+#endif // _NPT_ZIP_H_
diff --git a/lib/libUPnP/Neptune/Source/System/Android/NptAndroidDebug.cpp b/lib/libUPnP/Neptune/Source/System/Android/NptAndroidDebug.cpp
new file mode 100644
index 0000000000..36e907c4e3
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Android/NptAndroidDebug.cpp
@@ -0,0 +1,30 @@
+/*****************************************************************
+|
+| File: NptStdcDebug.c
+|
+| Atomix - Debug Support: Android Implementation
+|
+| (c) 2002-2009 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <cutils/logd.h>
+
+#include "NptConfig.h"
+#include "NptDefs.h"
+#include "NptTypes.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_DebugOuput
++---------------------------------------------------------------------*/
+void
+NPT_DebugOutput(const char* message)
+{
+ __android_log_write(ANDROID_LOG_DEBUG, "Neptune", message);
+ printf("%s", message);
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdNetwork.cpp b/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdNetwork.cpp
new file mode 100644
index 0000000000..12683447b0
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdNetwork.cpp
@@ -0,0 +1,231 @@
+/*****************************************************************
+|
+| Neptune - Network :: BSD Implementation
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+//#include <net/if_arp.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptStreams.h"
+#include "NptThreads.h"
+#include "NptNetwork.h"
+#include "NptUtils.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| platform adaptation
++---------------------------------------------------------------------*/
+#if !defined(IFHWADDRLEN)
+#define IFHWADDRLEN 6 // default to 48 bits
+#endif
+#if !defined(ARPHRD_ETHER)
+#define ARPHRD_ETHER 1
+#endif
+
+#ifdef _SIZEOF_ADDR_IFREQ
+#define IFREQ_SIZE(ifr) _SIZEOF_ADDR_IFREQ(*ifr)
+#else
+#ifdef NPT_CONFIG_HAVE_SOCKADDR_SA_LEN
+#define IFREQ_SIZE(ifr) (sizeof(ifr->ifr_name) + ifr->ifr_addr.sa_len)
+#else
+#define IFREQ_SIZE(ifr) sizeof(*ifr)
+#endif
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ int net = socket(AF_INET, SOCK_DGRAM, 0);
+
+ // Try to get the config until we have enough memory for it
+ // According to "Unix Network Programming", some implementations
+ // do not return an error when the supplied buffer is too small
+ // so we need to try, increasing the buffer size every time,
+ // until we get the same size twice. We cannot assume success when
+ // the returned size is smaller than the supplied buffer, because
+ // some implementations can return less that the buffer size if
+ // another structure does not fit.
+ unsigned int buffer_size = 4096; // initial guess
+ unsigned int last_size = 0;
+ struct ifconf config;
+ unsigned char* buffer;
+ for (;buffer_size < 16384;) {
+ buffer = new unsigned char[buffer_size];
+ config.ifc_len = buffer_size;
+ config.ifc_buf = (char*)buffer;
+ if (ioctl(net, SIOCGIFCONF, &config) < 0) {
+ if (errno != EINVAL || last_size != 0) {
+ return NPT_ERROR_BASE_UNIX-errno;
+ }
+ } else {
+ if ((unsigned int)config.ifc_len == last_size) {
+ // same size, we can use the buffer
+ break;
+ }
+ // different size, we need to reallocate
+ last_size = config.ifc_len;
+ }
+
+ // supply 256 more bytes more next time around
+ buffer_size += 256;
+ delete[] buffer;
+ }
+
+ unsigned char *entries;
+ for (entries = (unsigned char*)config.ifc_req; entries < (unsigned char*)config.ifc_req+config.ifc_len;) {
+ struct ifreq* entry = (struct ifreq*)entries;
+ // point to the next entry
+ entries += IFREQ_SIZE(entry);
+
+ // ignore anything except AF_INET addresses
+ if (entry->ifr_addr.sa_family != AF_INET) {
+ continue;
+ }
+
+ // get detailed info about the interface
+ NPT_Flags flags = 0;
+#if defined(SIOCGIFFLAGS)
+ struct ifreq query = *entry;
+ if (ioctl(net, SIOCGIFFLAGS, &query) < 0) continue;
+
+ // process the flags
+ if ((query.ifr_flags & IFF_UP) == 0) {
+ // the interface is not up, ignore it
+ continue;
+ }
+ if (query.ifr_flags & IFF_BROADCAST) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_BROADCAST;
+ }
+ if (query.ifr_flags & IFF_LOOPBACK) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_LOOPBACK;
+ }
+#if defined(IFF_POINTOPOINT)
+ if (query.ifr_flags & IFF_POINTOPOINT) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT;
+ }
+#endif // defined(IFF_POINTOPOINT)
+ if (query.ifr_flags & IFF_PROMISC) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_PROMISCUOUS;
+ }
+ if (query.ifr_flags & IFF_MULTICAST) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_MULTICAST;
+ }
+#endif // defined(SIOCGIFFLAGS)
+
+ // get the mac address
+ NPT_MacAddress mac;
+#if defined(SIOCGIFHWADDR)
+ if (ioctl(net, SIOCGIFHWADDR, &query) == 0) {
+ NPT_MacAddress::Type mac_addr_type;
+ unsigned int mac_addr_length = IFHWADDRLEN;
+ switch (query.ifr_addr.sa_family) {
+#if defined(ARPHRD_ETHER)
+ case ARPHRD_ETHER:
+ mac_addr_type = NPT_MacAddress::TYPE_ETHERNET;
+ break;
+#endif
+
+#if defined(ARPHRD_LOOPBACK)
+ case ARPHRD_LOOPBACK:
+ mac_addr_type = NPT_MacAddress::TYPE_LOOPBACK;
+ length = 0;
+ break;
+#endif
+
+#if defined(ARPHRD_PPP)
+ case ARPHRD_PPP:
+ mac_addr_type = NPT_MacAddress::TYPE_PPP;
+ mac_addr_length = 0;
+ break;
+#endif
+
+#if defined(ARPHRD_IEEE80211)
+ case ARPHRD_IEEE80211:
+ mac_addr_type = NPT_MacAddress::TYPE_IEEE_802_11;
+ break;
+#endif
+
+ default:
+ mac_addr_type = NPT_MacAddress::TYPE_UNKNOWN;
+ mac_addr_length = sizeof(query.ifr_addr.sa_data);
+ break;
+ }
+
+ mac.SetAddress(mac_addr_type, (const unsigned char*)query.ifr_addr.sa_data, mac_addr_length);
+ }
+#endif
+
+ // create an interface object
+ NPT_NetworkInterface* interface = new NPT_NetworkInterface(entry->ifr_name, mac, flags);
+
+ // primary address
+ NPT_IpAddress primary_address(ntohl(((struct sockaddr_in*)&entry->ifr_addr)->sin_addr.s_addr));
+
+ // broadcast address
+ NPT_IpAddress broadcast_address;
+#if defined(SIOCGIFBRDADDR)
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_BROADCAST) {
+ if (ioctl(net, SIOCGIFBRDADDR, &query) == 0) {
+ broadcast_address.Set(ntohl(((struct sockaddr_in*)&query.ifr_addr)->sin_addr.s_addr));
+ }
+ }
+#endif
+
+ // point to point address
+ NPT_IpAddress destination_address;
+#if defined(SIOCGIFDSTADDR)
+ if (flags & NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT) {
+ if (ioctl(net, SIOCGIFDSTADDR, &query) == 0) {
+ destination_address.Set(ntohl(((struct sockaddr_in*)&query.ifr_addr)->sin_addr.s_addr));
+ }
+ }
+#endif
+
+ // netmask
+ NPT_IpAddress netmask(0xFFFFFFFF);
+#if defined(SIOCGIFNETMASK)
+ if (ioctl(net, SIOCGIFNETMASK, &query) == 0) {
+ netmask.Set(ntohl(((struct sockaddr_in*)&query.ifr_addr)->sin_addr.s_addr));
+ }
+#endif
+
+ // create the interface object
+ NPT_NetworkInterfaceAddress iface_address(
+ primary_address,
+ broadcast_address,
+ destination_address,
+ netmask);
+ interface->AddAddress(iface_address);
+
+ // add the interface to the list
+ interfaces.Add(interface);
+ }
+
+ // free resources
+ delete[] buffer;
+ close(net);
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdSockets.cpp b/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdSockets.cpp
new file mode 100644
index 0000000000..ca471cae6a
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Bsd/NptBsdSockets.cpp
@@ -0,0 +1,2005 @@
+/*****************************************************************
+|
+| Neptune - Sockets :: BSD/Winsock Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
+
+// Win32 includes
+#if !defined(__WIN32__)
+#define __WIN32__
+#endif
+#endif
+#if defined(__WIN32__) && !defined(_XBOX)
+#define STRICT
+#define NPT_WIN32_USE_WINSOCK2
+#ifdef NPT_WIN32_USE_WINSOCK2
+/* it is important to include this in this order, because winsock.h and ws2tcpip.h */
+/* have different definitions for the same preprocessor symbols, such as IP_ADD_MEMBERSHIP */
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
+#include <winsock.h>
+#endif
+#include <windows.h>
+
+// XBox
+#elif defined(_XBOX)
+#include <xtl.h>
+#include <winsockx.h>
+
+#elif defined(__TCS__)
+
+// Trimedia includes
+#include <sockets.h>
+
+#elif defined(__PSP__)
+
+// PSP includes
+#include <psptypes.h>
+#include <kernel.h>
+#include <pspnet.h>
+#include <pspnet_error.h>
+#include <pspnet_inet.h>
+#include <pspnet_resolver.h>
+#include <pspnet_apctl.h>
+#include <pspnet_ap_dialog_dummy.h>
+#include <errno.h>
+#include <wlan.h>
+#include <pspnet/sys/socket.h>
+#include <pspnet/sys/select.h>
+#include <pspnet/netinet/in.h>
+
+#elif defined(__PPU__)
+
+// PS3 includes
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/select.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <netex/net.h>
+#include <netex/errno.h>
+
+#else
+
+// default includes
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/select.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#if !defined(__SYMBIAN32__)
+#include <netinet/tcp.h>
+#endif
+#include <netdb.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <signal.h>
+
+#endif
+
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptStreams.h"
+#include "NptThreads.h"
+#include "NptSockets.h"
+#include "NptUtils.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_TCP_SERVER_SOCKET_DEFAULT_LISTEN_COUNT = 20;
+
+/*----------------------------------------------------------------------
+| WinSock adaptation layer
++---------------------------------------------------------------------*/
+#if defined(__WIN32__) || defined(_XBOX)
+#if defined(_XBOX)
+#include "NptXboxNetwork.h"
+#define SO_ERROR 0x1007 /* unsupported */
+#else
+#include "NptWin32Network.h"
+#endif
+// force a reference to the initializer so that the linker does not optimize it out
+static NPT_WinsockSystem& WinsockInitializer = NPT_WinsockSystem::Initializer;
+
+#if defined(SetPort)
+#undef SetPort
+#endif
+
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EINPROGRESS WSAEINPROGRESS
+#define ECONNREFUSED WSAECONNREFUSED
+#define ECONNABORTED WSAECONNABORTED
+#define ECONNRESET WSAECONNRESET
+#define ETIMEDOUT WSAETIMEDOUT
+#define ENETRESET WSAENETRESET
+#define EADDRINUSE WSAEADDRINUSE
+#define ENETDOWN WSAENETDOWN
+#define ENETUNREACH WSAENETUNREACH
+#if !defined(EAGAIN)
+#define EAGAIN WSAEWOULDBLOCK
+#endif
+
+#if !defined(__MINGW32__)
+typedef int ssize_t;
+#endif
+typedef int socklen_t;
+typedef char* SocketBuffer;
+typedef const char* SocketConstBuffer;
+typedef char* SocketOption;
+typedef SOCKET SocketFd;
+
+#define GetSocketError() WSAGetLastError()
+#define NPT_BSD_SOCKET_IS_INVALID(_s) ((_s) == INVALID_SOCKET)
+#define NPT_BSD_SOCKET_CALL_FAILED(_e) ((_e) == SOCKET_ERROR)
+#define NPT_BSD_SOCKET_SELECT_FAILED(_e) ((_e) == SOCKET_ERROR)
+
+/*----------------------------------------------------------------------
+| Trimedia adaptation layer
++---------------------------------------------------------------------*/
+#elif defined(__TCS__) // trimedia PSOS w/ Target TCP
+typedef void* SocketBuffer;
+typedef const void* SocketConstBuffer;
+typedef void* SocketOption;
+typedef int SocketFd;
+
+#define GetSocketError() errno
+#define NPT_BSD_SOCKET_IS_INVALID(_s) ((_s) < 0)
+#define NPT_BSD_SOCKET_CALL_FAILED(_e) ((_e) < 0)
+#define NPT_BSD_SOCKET_SELECT_FAILED(_e) ((_e) < 0)
+
+/*----------------------------------------------------------------------
+| PSP adaptation layer
++---------------------------------------------------------------------*/
+#elif defined(__PSP__)
+typedef SceNetInetSocklen_t socklen_t;
+#define timeval SceNetInetTimeval
+#define inet_addr sceNetInetInetAddr
+#define select sceNetInetSelect
+#define socket sceNetInetSocket
+#define connect sceNetInetConnect
+#define bind sceNetInetBind
+#define accept sceNetInetAccept
+#define getpeername sceNetInetGetpeername
+#define getsockopt sceNetInetGetsockopt
+#define setsockopt sceNetInetSetsockopt
+#define listen sceNetInetListen
+#define getsockname sceNetInetGetsockname
+#define sockaddr SceNetInetSockaddr
+#define sockaddr_in SceNetInetSockaddrIn
+#define in_addr SceNetInetInAddr
+#define send sceNetInetSend
+#define sendto sceNetInetSendto
+#define recv sceNetInetRecv
+#define recvfrom sceNetInetRecvfrom
+#define closesocket sceNetInetClose
+#define htonl sceNetHtonl
+#define htons sceNetHtons
+#define ntohl sceNetNtohl
+#define ntohs sceNetNtohs
+#define SOL_SOCKET SCE_NET_INET_SOL_SOCKET
+#define AF_INET SCE_NET_INET_AF_INET
+#define SOCK_STREAM SCE_NET_INET_SOCK_STREAM
+#define SOCK_DGRAM SCE_NET_INET_SOCK_DGRAM
+#define SO_BROADCAST SCE_NET_INET_SO_BROADCAST
+#define SO_ERROR SCE_NET_INET_SO_ERROR
+#define IPPROTO_IP SCE_NET_INET_IPPROTO_IP
+#define IP_ADD_MEMBERSHIP SCE_NET_INET_IP_ADD_MEMBERSHIP
+#define IP_MULTICAST_IF SCE_NET_INET_IP_MULTICAST_IF
+#define IP_MULTICAST_TTL SCE_NET_INET_IP_MULTICAST_TTL
+#define SO_REUSEADDR SCE_NET_INET_SO_REUSEADDR
+#define INADDR_ANY SCE_NET_INET_INADDR_ANY
+#define ip_mreq SceNetInetIpMreq
+#ifdef fd_set
+#undef fd_set
+#endif
+#define fd_set SceNetInetFdSet
+#ifdef FD_ZERO
+#undef FD_ZERO
+#endif
+#define FD_ZERO SceNetInetFD_ZERO
+#ifdef FD_SET
+#undef FD_SET
+#endif
+#define FD_SET SceNetInetFD_SET
+#ifdef FD_CLR
+#undef FD_CLR
+#endif
+#define FD_CLR SceNetInetFD_CLR
+#ifdef FD_ISSET
+#undef FD_ISSET
+#endif
+#define FD_ISSET SceNetInetFD_ISSET
+
+#define RESOLVER_TIMEOUT (5 * 1000 * 1000)
+#define RESOLVER_RETRY 5
+
+typedef void* SocketBuffer;
+typedef const void* SocketConstBuffer;
+typedef void* SocketOption;
+typedef int SocketFd;
+
+#define GetSocketError() sceNetInetGetErrno()
+#define NPT_BSD_SOCKET_IS_INVALID(_s) ((_s) < 0)
+#define NPT_BSD_SOCKET_CALL_FAILED(_e) ((_e) < 0)
+#define NPT_BSD_SOCKET_SELECT_FAILED(_e) ((_e) < 0)
+
+/*----------------------------------------------------------------------
+| PS3 adaptation layer
++---------------------------------------------------------------------*/
+#elif defined(__PPU__)
+#undef EWOULDBLOCK
+#undef ECONNREFUSED
+#undef ECONNABORTED
+#undef ECONNRESET
+#undef ETIMEDOUT
+#undef ENETRESET
+#undef EADDRINUSE
+#undef ENETDOWN
+#undef ENETUNREACH
+#undef EAGAIN
+#undef EINTR
+#undef EINPROGRESS
+
+#define EWOULDBLOCK SYS_NET_EWOULDBLOCK
+#define ECONNREFUSED SYS_NET_ECONNREFUSED
+#define ECONNABORTED SYS_NET_ECONNABORTED
+#define ECONNRESET SYS_NET_ECONNRESET
+#define ETIMEDOUT SYS_NET_ETIMEDOUT
+#define ENETRESET SYS_NET_ENETRESET
+#define EADDRINUSE SYS_NET_EADDRINUSE
+#define ENETDOWN SYS_NET_ENETDOWN
+#define ENETUNREACH SYS_NET_ENETUNREACH
+#define EAGAIN SYS_NET_EAGAIN
+#define EINTR SYS_NET_EINTR
+#define EINPROGRESS SYS_NET_EINPROGRESS
+
+typedef void* SocketBuffer;
+typedef const void* SocketConstBuffer;
+typedef void* SocketOption;
+typedef int SocketFd;
+
+#define closesocket socketclose
+#define select socketselect
+
+#define GetSocketError() sys_net_errno
+#define NPT_BSD_SOCKET_IS_INVALID(_s) ((_s) < 0)
+#define NPT_BSD_SOCKET_CALL_FAILED(_e) ((_e) < 0)
+#define NPT_BSD_SOCKET_SELECT_FAILED(_e) ((_e) < 0)
+
+// network initializer
+static struct NPT_Ps3NetworkInitializer {
+ NPT_Ps3NetworkInitializer() {
+ sys_net_initialize_network();
+ }
+ ~NPT_Ps3NetworkInitializer() {
+ sys_net_finalize_network();
+ }
+} Ps3NetworkInitializer;
+
+/*----------------------------------------------------------------------
+| Default adaptation layer
++---------------------------------------------------------------------*/
+#else
+typedef void* SocketBuffer;
+typedef const void* SocketConstBuffer;
+typedef void* SocketOption;
+typedef int SocketFd;
+
+#define closesocket close
+#define ioctlsocket ioctl
+
+#define GetSocketError() errno
+#define NPT_BSD_SOCKET_IS_INVALID(_s) ((_s) < 0)
+#define NPT_BSD_SOCKET_CALL_FAILED(_e) ((_e) < 0)
+#define NPT_BSD_SOCKET_SELECT_FAILED(_e) ((_e) < 0)
+
+#endif
+
+/*----------------------------------------------------------------------
+| SocketAddressToInetAddress
++---------------------------------------------------------------------*/
+static void
+SocketAddressToInetAddress(const NPT_SocketAddress& socket_address,
+ struct sockaddr_in* inet_address)
+{
+ // initialize the structure
+ for (int i=0; i<8; i++) inet_address->sin_zero[i]=0;
+
+ // setup the structure
+ inet_address->sin_family = AF_INET;
+ inet_address->sin_port = htons(socket_address.GetPort());
+ inet_address->sin_addr.s_addr = htonl(socket_address.GetIpAddress().AsLong());
+}
+
+/*----------------------------------------------------------------------
+| InetAddressToSocketAddress
++---------------------------------------------------------------------*/
+static void
+InetAddressToSocketAddress(const struct sockaddr_in* inet_address,
+ NPT_SocketAddress& socket_address)
+{
+ // read the fields
+ socket_address.SetPort(ntohs(inet_address->sin_port));
+ socket_address.SetIpAddress(NPT_IpAddress(ntohl(inet_address->sin_addr.s_addr)));
+}
+
+/*----------------------------------------------------------------------
+| MapErrorCode
++---------------------------------------------------------------------*/
+static NPT_Result
+MapErrorCode(int error)
+{
+ switch (error) {
+ case ECONNRESET:
+ case ENETRESET:
+ return NPT_ERROR_CONNECTION_RESET;
+
+ case ECONNABORTED:
+ return NPT_ERROR_CONNECTION_ABORTED;
+
+ case ECONNREFUSED:
+ return NPT_ERROR_CONNECTION_REFUSED;
+
+ case ETIMEDOUT:
+ return NPT_ERROR_TIMEOUT;
+
+ case EADDRINUSE:
+ return NPT_ERROR_ADDRESS_IN_USE;
+
+ case ENETDOWN:
+ return NPT_ERROR_NETWORK_DOWN;
+
+ case ENETUNREACH:
+ return NPT_ERROR_NETWORK_UNREACHABLE;
+
+ case EINPROGRESS:
+ case EAGAIN:
+#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
+ case EWOULDBLOCK:
+#endif
+ return NPT_ERROR_WOULD_BLOCK;
+
+#if defined(EPIPE)
+ case EPIPE:
+ return NPT_ERROR_CONNECTION_RESET;
+#endif
+
+ default:
+ return NPT_FAILURE;
+ }
+}
+
+#if defined(_XBOX)
+
+struct hostent {
+ char * h_name; /* official name of host */
+ char * * h_aliases; /* alias list */
+ short h_addrtype; /* host address type */
+ short h_length; /* length of address */
+ char * * h_addr_list; /* list of addresses */
+#define h_addr h_addr_list[0] /* address, for backward compat */
+};
+
+typedef struct {
+ struct hostent server;
+ char name[128];
+ char addr[16];
+ char* addr_list[4];
+} HostEnt;
+
+/*----------------------------------------------------------------------
+| gethostbyname
++---------------------------------------------------------------------*/
+static struct hostent*
+gethostbyname(const char* name)
+{
+ struct hostent* host = NULL;
+ HostEnt* host_entry = new HostEnt;
+ WSAEVENT hEvent = WSACreateEvent();
+ XNDNS* pDns = NULL;
+
+ INT err = XNetDnsLookup(name, hEvent, &pDns);
+ WaitForSingleObject(hEvent, INFINITE);
+ if (pDns) {
+ if (pDns->iStatus == 0) {
+ strcpy(host_entry->name, name);
+ host_entry->addr_list[0] = host_entry->addr;
+ memcpy(host_entry->addr, &(pDns->aina[0].s_addr), 4);
+ host_entry->server.h_name = host_entry->name;
+ host_entry->server.h_aliases = 0;
+ host_entry->server.h_addrtype = AF_INET;
+ host_entry->server.h_length = 4;
+ host_entry->server.h_addr_list = new char*[4];
+
+ host_entry->server.h_addr_list[0] = host_entry->addr_list[0];
+ host_entry->server.h_addr_list[1] = 0;
+
+ host = (struct hostent*)host_entry;
+ }
+ XNetDnsRelease(pDns);
+ }
+ WSACloseEvent(hEvent);
+ return host;
+};
+
+#endif // _XBOX
+
+/*----------------------------------------------------------------------
+| NPT_IpAddress::ResolveName
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_IpAddress::ResolveName(const char* name, NPT_Timeout)
+{
+ // check parameters
+ if (name == NULL || name[0] == '\0') return NPT_ERROR_HOST_UNKNOWN;
+
+ // handle numerical addrs
+ NPT_IpAddress numerical_address;
+ if (NPT_SUCCEEDED(numerical_address.Parse(name))) {
+ /* the name is a numerical IP addr */
+ return Set(numerical_address.AsLong());
+ }
+
+#if defined(__TCS__)
+ Set(getHostByName(name));
+#elif defined(__PSP__)
+ int rid;
+ char buf[1024];
+ int buflen = sizeof(buf);
+
+ int ret = sceNetResolverCreate(&rid, buf, buflen);
+ if(ret < 0){
+ return NPT_FAILURE;
+ }
+ ret = sceNetResolverStartNtoA(rid, name, &address->sin_addr,
+ RESOLVER_TIMEOUT, RESOLVER_RETRY);
+ if(ret < 0){
+ return NPT_ERROR_HOST_UNKNOWN;
+ }
+ sceNetResolverDelete(rid);
+#else
+ // do a name lookup
+ struct hostent *host_entry = gethostbyname(name);
+ if (host_entry == NULL ||
+ host_entry->h_addrtype != AF_INET) {
+ return NPT_ERROR_HOST_UNKNOWN;
+ }
+ NPT_CopyMemory(m_Address, host_entry->h_addr, 4);
+
+#if defined(_XBOX)
+ delete host_entry;
+#endif
+
+#endif
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd
++---------------------------------------------------------------------*/
+class NPT_BsdSocketFd
+{
+public:
+ // constructors and destructor
+ NPT_BsdSocketFd(SocketFd fd) :
+ m_SocketFd(fd),
+ m_Blocking(true),
+ m_ReadTimeout(NPT_TIMEOUT_INFINITE),
+ m_WriteTimeout(NPT_TIMEOUT_INFINITE),
+ m_Position(0) {
+#if !defined(__WIN32__) && !defined(_XBOX)
+ pipe(m_AbortPipe);
+#endif
+ }
+ ~NPT_BsdSocketFd() {
+ Disconnect();
+#if !defined(__WIN32__) && !defined(_XBOX)
+ close(m_AbortPipe[0]);
+ close(m_AbortPipe[1]);
+#endif
+ }
+
+ // methods
+ NPT_Result SetBlockingMode(bool blocking);
+ NPT_Result WaitUntilReadable();
+ NPT_Result WaitUntilWriteable();
+ void Disconnect() {
+ if (!m_SocketFd) return;
+
+#if !defined(__WIN32__) && !defined(_XBOX)
+ write(m_AbortPipe[1], "\0", 1);
+#endif
+ // no pipe on win32, but closing the socket will
+ // unblock the socket
+ SocketFd socketFd = m_SocketFd;
+ m_SocketFd = 0;
+ if (socketFd) {
+ shutdown(socketFd, 2);
+ closesocket(socketFd);
+ }
+ }
+
+ // members
+ SocketFd m_SocketFd;
+ bool m_Blocking;
+ NPT_Timeout m_ReadTimeout;
+ NPT_Timeout m_WriteTimeout;
+ NPT_Position m_Position;
+
+private:
+ // methods
+ friend class NPT_BsdTcpServerSocket;
+ NPT_Result WaitForCondition(bool readable, bool writeable, NPT_Timeout timeout);
+
+public:
+ // members
+#if !defined(__WIN32__) && !defined(_XBOX)
+ int m_AbortPipe[2]; /* an array to store the file descriptors of the abort pipe. */
+#endif
+};
+
+typedef NPT_Reference<NPT_BsdSocketFd> NPT_BsdSocketFdReference;
+
+#if defined(__WIN32__) || defined(__TCS__) || defined(_XBOX)
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::SetBlockingMode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::SetBlockingMode(bool blocking)
+{
+ unsigned long args = blocking?0:1;
+ if (ioctlsocket(m_SocketFd, FIONBIO, &args)) {
+ return NPT_ERROR_SOCKET_CONTROL_FAILED;
+ }
+ m_Blocking = blocking;
+ return NPT_SUCCESS;
+}
+#elif defined(__PSP__) || defined(__PPU__)
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::SetBlockingMode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::SetBlockingMode(bool blocking)
+{
+ int args = blocking?0:1;
+ if (setsockopt(m_SocketFd, SOL_SOCKET, SO_NBIO, &args, sizeof(args))) {
+ return NPT_ERROR_SOCKET_CONTROL_FAILED;
+ }
+ m_Blocking = blocking;
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::SetBlockingMode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::SetBlockingMode(bool blocking)
+{
+ int flags = fcntl(m_SocketFd, F_GETFL, 0);
+ if (blocking) {
+ flags &= ~O_NONBLOCK;
+ } else {
+ flags |= O_NONBLOCK;
+ }
+ if (fcntl(m_SocketFd, F_SETFL, flags)) {
+ return NPT_ERROR_SOCKET_CONTROL_FAILED;
+ }
+ m_Blocking = blocking;
+ return NPT_SUCCESS;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::WaitUntilReadable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::WaitUntilReadable()
+{
+ return WaitForCondition(true, false, m_ReadTimeout);
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::WaitUntilWriteable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::WaitUntilWriteable()
+{
+ return WaitForCondition(false, true, m_WriteTimeout);
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketFd::WaitForCondition
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketFd::WaitForCondition(bool wait_for_readable,
+ bool wait_for_writeable,
+ NPT_Timeout timeout)
+{
+ // store local copy, in case the object is destroyed while we wait
+ SocketFd socket_fd = m_SocketFd;
+
+ // wait for incoming connection
+ NPT_Result result = NPT_SUCCESS;
+ fd_set read_set;
+ fd_set write_set;
+ fd_set except_set;
+ FD_ZERO(&read_set);
+ if (wait_for_readable) FD_SET(socket_fd, &read_set);
+ FD_ZERO(&write_set);
+ if (wait_for_writeable) FD_SET(socket_fd, &write_set);
+ FD_ZERO(&except_set);
+ FD_SET(socket_fd, &except_set);
+
+ struct timeval timeout_value;
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ timeout_value.tv_sec = timeout/1000;
+ timeout_value.tv_usec = 1000*(timeout-1000*(timeout/1000));
+ };
+
+ int nfds = (int)socket_fd+1;
+
+#if !defined(__WIN32__) && !defined(_XBOX)
+ FD_SET(m_AbortPipe[0], &read_set);
+ nfds = (m_AbortPipe[0]>(int)socket_fd?m_AbortPipe[0]:(int)socket_fd)+1;
+#endif
+
+ int io_result = select(nfds,
+ &read_set, &write_set, &except_set,
+ timeout == NPT_TIMEOUT_INFINITE ?
+ NULL : &timeout_value);
+
+ if (io_result == 0) {
+ if (timeout == 0) {
+ // non-blocking call
+ result = NPT_ERROR_WOULD_BLOCK;
+ } else {
+ // timeout
+ result = NPT_ERROR_TIMEOUT;
+ }
+ } else if (NPT_BSD_SOCKET_SELECT_FAILED(io_result)) {
+ result = MapErrorCode(GetSocketError());
+ } else if ((wait_for_readable && FD_ISSET(socket_fd, &read_set)) ||
+ (wait_for_writeable && FD_ISSET(socket_fd, &write_set))) {
+ result = NPT_SUCCESS;
+ } else if (FD_ISSET(socket_fd, &except_set)) {
+ result = MapErrorCode(GetSocketError());
+#if !defined(__WIN32__) && !defined(_XBOX)
+ } else if (FD_ISSET(m_AbortPipe[0], &read_set)) {
+ result = NPT_ERROR_CONNECTION_ABORTED;
+#endif
+ } else {
+ // should not happen
+ result = (m_SocketFd == 0)?NPT_ERROR_EOS:NPT_ERROR_INTERNAL;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketStream
++---------------------------------------------------------------------*/
+class NPT_BsdSocketStream
+{
+ public:
+ // methods
+ NPT_BsdSocketStream(NPT_BsdSocketFdReference& socket_fd) :
+ m_SocketFdReference(socket_fd) {}
+
+ // NPT_InputStream and NPT_OutputStream methods
+ NPT_Result Seek(NPT_Position) { return NPT_ERROR_NOT_SUPPORTED; }
+ NPT_Result Tell(NPT_Position& where) {
+ where = 0;
+ return NPT_SUCCESS;
+ }
+
+ protected:
+ // destructor
+ virtual ~NPT_BsdSocketStream() {}
+
+ // members
+ NPT_BsdSocketFdReference m_SocketFdReference;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketInputStream
++---------------------------------------------------------------------*/
+class NPT_BsdSocketInputStream : public NPT_InputStream,
+ private NPT_BsdSocketStream
+{
+public:
+ // constructors and destructor
+ NPT_BsdSocketInputStream(NPT_BsdSocketFdReference& socket_fd) :
+ NPT_BsdSocketStream(socket_fd) {}
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read);
+ NPT_Result Seek(NPT_Position offset) {
+ return NPT_BsdSocketStream::Seek(offset); }
+ NPT_Result Tell(NPT_Position& where) {
+ return NPT_BsdSocketStream::Tell(where);
+ }
+ NPT_Result GetSize(NPT_LargeSize& size);
+ NPT_Result GetAvailable(NPT_LargeSize& available);
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ // if we're blocking, wait until the socket is readable
+ if (m_SocketFdReference->m_Blocking &&
+ m_SocketFdReference->m_ReadTimeout != NPT_TIMEOUT_INFINITE) {
+ NPT_Result result = m_SocketFdReference->WaitUntilReadable();
+ if (result != NPT_SUCCESS) return result;
+ }
+
+ // read from the socket
+ ssize_t nb_read = recv(m_SocketFdReference->m_SocketFd,
+ (SocketBuffer)buffer,
+ bytes_to_read, 0);
+ if (nb_read > 0) {
+ if (bytes_read) *bytes_read = nb_read;
+ m_SocketFdReference->m_Position += nb_read;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_read) *bytes_read = 0;
+ if (nb_read == 0) {
+ return NPT_ERROR_EOS;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketInputStream::GetSize(NPT_LargeSize& size)
+{
+ // generic socket streams have no size
+ size = 0;
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+#if defined(__PPU__)
+/*----------------------------------------------------------------------
+| NPT_BsdSocketInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketInputStream::GetAvailable(NPT_LargeSize&)
+{
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdSocketInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ unsigned long ready = 0;
+ int io_result = ioctlsocket(m_SocketFdReference->m_SocketFd, FIONREAD, &ready);
+ if (NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ available = 0;
+ return NPT_ERROR_SOCKET_CONTROL_FAILED;
+ } else {
+ available = ready;
+ return NPT_SUCCESS;
+ }
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketOutputStream
++---------------------------------------------------------------------*/
+class NPT_BsdSocketOutputStream : public NPT_OutputStream,
+ private NPT_BsdSocketStream
+{
+public:
+ // constructors and destructor
+ NPT_BsdSocketOutputStream(NPT_BsdSocketFdReference& socket_fd) :
+ NPT_BsdSocketStream(socket_fd) {}
+
+ // NPT_OutputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written);
+ NPT_Result Seek(NPT_Position offset) {
+ return NPT_BsdSocketStream::Seek(offset); }
+ NPT_Result Tell(NPT_Position& where) {
+ return NPT_BsdSocketStream::Tell(where);
+ }
+ NPT_Result Flush();
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ // if we're blocking, wait until the socket is writeable
+ if (m_SocketFdReference->m_Blocking &&
+ m_SocketFdReference->m_WriteTimeout != NPT_TIMEOUT_INFINITE) {
+ NPT_Result result = m_SocketFdReference->WaitUntilWriteable();
+ if (result != NPT_SUCCESS) return result;
+ }
+
+ int flags = 0;
+
+#ifdef MSG_NOSIGNAL
+ // for some BSD stacks, ask for EPIPE to be returned instead
+ // of sending a SIGPIPE signal to the process
+ flags |= MSG_NOSIGNAL;
+#endif
+
+ // write to the socket
+ ssize_t nb_written = send(m_SocketFdReference->m_SocketFd,
+ (SocketConstBuffer)buffer,
+ bytes_to_write, flags);
+
+ if (nb_written > 0) {
+ if (bytes_written) *bytes_written = nb_written;
+ m_SocketFdReference->m_Position += nb_written;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_written) *bytes_written = 0;
+ if (nb_written == 0) {
+ return NPT_ERROR_CONNECTION_RESET;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocketOutputStream::Flush
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocketOutputStream::Flush()
+{
+ int args = 0;
+ socklen_t size = sizeof(args);
+
+ // get the value of the nagle algorithm
+ if (getsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ (char*)&args,
+ &size)) {
+ return NPT_ERROR_GETSOCKOPT_FAILED;
+ }
+
+ // return now if nagle was already off
+ if (args == 1) return NPT_SUCCESS;
+
+ // disable the nagle algorithm
+ args = 1;
+ if (setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ (const char*)&args,
+ sizeof(args))) {
+ return NPT_ERROR_SETSOCKOPT_FAILED;
+ }
+
+ // send an empty buffer to flush
+ int flags = 0;
+#ifdef MSG_NOSIGNAL
+ // for some BSD stacks, ask for EPIPE to be returned instead
+ // of sending a SIGPIPE signal to the process
+ flags |= MSG_NOSIGNAL;
+#endif
+ char dummy = 0;
+ send(m_SocketFdReference->m_SocketFd, &dummy, 0, flags);
+
+ // restore the nagle algorithm to its original setting
+ args = 0;
+ if (setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ (const char*)&args,
+ sizeof(args))) {
+ return NPT_ERROR_SETSOCKOPT_FAILED;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket
++---------------------------------------------------------------------*/
+class NPT_BsdSocket : public NPT_SocketInterface
+{
+ public:
+ // constructors and destructor
+ NPT_BsdSocket() {}
+ NPT_BsdSocket(SocketFd fd, bool force_blocking=false);
+ virtual ~NPT_BsdSocket();
+
+ // methods
+ NPT_Result RefreshInfo();
+
+ // NPT_SocketInterface methods
+ NPT_Result Bind(const NPT_SocketAddress& address, bool reuse_address = true);
+ NPT_Result Connect(const NPT_SocketAddress& address, NPT_Timeout timeout);
+ NPT_Result Disconnect();
+ NPT_Result WaitForConnection(NPT_Timeout timeout);
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+ NPT_Result GetInfo(NPT_SocketInfo& info);
+ NPT_Result SetBlockingMode(bool blocking);
+ NPT_Result SetReadTimeout(NPT_Timeout timeout);
+ NPT_Result SetWriteTimeout(NPT_Timeout timeout);
+
+ protected:
+ // members
+ NPT_BsdSocketFdReference m_SocketFdReference;
+ NPT_SocketInfo m_Info;
+ bool m_Blocking;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::NPT_BsdSocket
++---------------------------------------------------------------------*/
+NPT_BsdSocket::NPT_BsdSocket(SocketFd fd, bool force_blocking) :
+ m_SocketFdReference(new NPT_BsdSocketFd(fd)),
+ m_Blocking(true)
+{
+ // disable the SIGPIPE signal
+#if defined(SO_NOSIGPIPE)
+ int option = 1;
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_NOSIGPIPE,
+ (SocketOption)&option,
+ sizeof(option));
+#elif defined(SIGPIPE)
+ signal(SIGPIPE, SIG_IGN);
+#endif
+
+ if (force_blocking) m_SocketFdReference->SetBlockingMode(true);
+ RefreshInfo();
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::~NPT_BsdSocket
++---------------------------------------------------------------------*/
+NPT_BsdSocket::~NPT_BsdSocket()
+{
+ // release the socket fd reference
+ m_SocketFdReference = NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::Bind
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::Bind(const NPT_SocketAddress& address, bool reuse_address)
+{
+ // on non windows, we need to set reuse address no matter what so
+ // that we can bind on the same port when the socket has closed
+ // but is still in a timed-out mode
+#if !defined(__WIN32__) && !defined(_XBOX)
+ int option_ra = 1;
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_REUSEADDR,
+ (SocketOption)&option_ra,
+ sizeof(option_ra));
+#endif
+
+ // set socket options
+ if (reuse_address) {
+ int option = 1;
+ // on macosx/linux, we need to use SO_REUSEPORT instead of SO_REUSEADDR
+#if defined(SO_REUSEPORT)
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_REUSEPORT,
+ (SocketOption)&option,
+ sizeof(option));
+#else
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_REUSEADDR,
+ (SocketOption)&option,
+ sizeof(option));
+#endif
+ }
+
+ // convert the address
+ struct sockaddr_in inet_address;
+ SocketAddressToInetAddress(address, &inet_address);
+
+#ifdef _XBOX
+ if( address.GetIpAddress().AsLong() != NPT_IpAddress::Any.AsLong() ) {
+ //Xbox can't bind to specific address, defaulting to ANY
+ SocketAddressToInetAddress(NPT_SocketAddress(NPT_IpAddress::Any, address.GetPort()), &inet_address);
+ }
+#endif
+
+ // bind the socket
+ if (bind(m_SocketFdReference->m_SocketFd,
+ (struct sockaddr*)&inet_address,
+ sizeof(inet_address)) < 0) {
+ return NPT_ERROR_BIND_FAILED;
+ }
+
+ // refresh socket info
+ RefreshInfo();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::Connect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::Connect(const NPT_SocketAddress&, NPT_Timeout)
+{
+ // this is unsupported unless overridden in a derived class
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::Disconnect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::Disconnect()
+{
+ // check that we have a socket
+ if (m_SocketFdReference.IsNull()) return NPT_ERROR_INVALID_STATE;
+
+ m_SocketFdReference->Disconnect();
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::WaitForConnection
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::WaitForConnection(NPT_Timeout)
+{
+ // this is unsupported unless overridden in a derived class
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that we have a socket
+ if (m_SocketFdReference.IsNull()) return NPT_ERROR_INVALID_STATE;
+
+ // create a stream
+ stream = new NPT_BsdSocketInputStream(m_SocketFdReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_SocketFdReference.IsNull()) return NPT_ERROR_INVALID_STATE;
+
+ // create a stream
+ stream = new NPT_BsdSocketOutputStream(m_SocketFdReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::GetInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::GetInfo(NPT_SocketInfo& info)
+{
+ // return the cached info
+ info = m_Info;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::RefreshInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::RefreshInfo()
+{
+ // check that we have a socket
+ if (m_SocketFdReference.IsNull()) return NPT_ERROR_INVALID_STATE;
+
+ // get the local socket addr
+ struct sockaddr_in inet_address;
+ socklen_t name_length = sizeof(inet_address);
+ if (getsockname(m_SocketFdReference->m_SocketFd,
+ (struct sockaddr*)&inet_address,
+ &name_length) == 0) {
+ m_Info.local_address.SetIpAddress(ntohl(inet_address.sin_addr.s_addr));
+ m_Info.local_address.SetPort(ntohs(inet_address.sin_port));
+ }
+
+ // get the peer socket addr
+ if (getpeername(m_SocketFdReference->m_SocketFd,
+ (struct sockaddr*)&inet_address,
+ &name_length) == 0) {
+ m_Info.remote_address.SetIpAddress(ntohl(inet_address.sin_addr.s_addr));
+ m_Info.remote_address.SetPort(ntohs(inet_address.sin_port));
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::SetBlockingMode
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::SetBlockingMode(bool blocking)
+{
+ if (m_Blocking != blocking) {
+ m_SocketFdReference->SetBlockingMode(blocking);
+ m_Blocking = blocking;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::SetReadTimeout
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::SetReadTimeout(NPT_Timeout timeout)
+{
+ m_SocketFdReference->m_ReadTimeout = timeout;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdSocket::SetWriteTimeout
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdSocket::SetWriteTimeout(NPT_Timeout timeout)
+{
+ m_SocketFdReference->m_WriteTimeout = timeout;
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_SNDTIMEO,
+ (SocketOption)&timeout,
+ sizeof(timeout));
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Socket::~NPT_Socket
++---------------------------------------------------------------------*/
+NPT_Socket::~NPT_Socket()
+{
+ delete m_SocketDelegate;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpSocket
++---------------------------------------------------------------------*/
+class NPT_BsdUdpSocket : public NPT_UdpSocketInterface,
+ protected NPT_BsdSocket
+
+{
+ public:
+ // constructor
+ NPT_BsdUdpSocket();
+ virtual ~NPT_BsdUdpSocket() {}
+
+ // NPT_SocketInterface methods
+ NPT_Result Connect(const NPT_SocketAddress& address,
+ NPT_Timeout timeout);
+
+ // NPT_UdpSocketInterface methods
+ NPT_Result Send(const NPT_DataBuffer& packet,
+ const NPT_SocketAddress* address);
+ NPT_Result Receive(NPT_DataBuffer& packet,
+ NPT_SocketAddress* address);
+
+ // friends
+ friend class NPT_UdpSocket;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpSocket::NPT_BsdUdpSocket
++---------------------------------------------------------------------*/
+NPT_BsdUdpSocket::NPT_BsdUdpSocket() :
+ NPT_BsdSocket(socket(AF_INET, SOCK_DGRAM, 0))
+{
+ // set default socket options
+ int option = 1;
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ (SocketOption)&option,
+ sizeof(option));
+
+#ifdef _XBOX
+ // set flag on the socket to allow sending of multicast
+ if (!NPT_BSD_SOCKET_IS_INVALID(m_SocketFdReference->m_SocketFd)) {
+ *(DWORD*)((char*)m_SocketFdReference->m_SocketFd+0xc) |= 0x02000000;
+ }
+#endif
+
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpSocket::Connect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpSocket::Connect(const NPT_SocketAddress& address,
+ NPT_Timeout /* ignored */)
+{
+ // setup an address structure
+ struct sockaddr_in inet_address;
+ SocketAddressToInetAddress(address, &inet_address);
+
+ // connect so that we can have some addr bound to the socket
+ int io_result = connect(m_SocketFdReference->m_SocketFd,
+ (struct sockaddr *)&inet_address,
+ sizeof(inet_address));
+ if (NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ return MapErrorCode(GetSocketError());
+ }
+
+ // refresh socket info
+ RefreshInfo();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpSocket::Send
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpSocket::Send(const NPT_DataBuffer& packet,
+ const NPT_SocketAddress* address)
+{
+ // get the packet buffer
+ const NPT_Byte* buffer = packet.GetData();
+ ssize_t buffer_length = packet.GetDataSize();
+
+ // if we're blocking, wait until the socket is writeable
+ if (m_SocketFdReference->m_Blocking &&
+ m_SocketFdReference->m_WriteTimeout != NPT_TIMEOUT_INFINITE) {
+ NPT_Result result = m_SocketFdReference->WaitUntilWriteable();
+ if (result != NPT_SUCCESS) return result;
+ }
+
+ // send the packet buffer
+ int io_result;
+ if (address) {
+ // send to the specified address
+
+ // setup an address structure
+ struct sockaddr_in inet_address;
+ SocketAddressToInetAddress(*address, &inet_address);
+ io_result = sendto(m_SocketFdReference->m_SocketFd,
+ (SocketConstBuffer)buffer,
+ buffer_length,
+ 0,
+ (struct sockaddr *)&inet_address,
+ sizeof(inet_address));
+ } else {
+ int flags = 0;
+#ifdef MSG_NOSIGNAL
+ // for some BSD stacks, ask for EPIPE to be returned instead
+ // of sending a SIGPIPE signal to the process
+ flags |= MSG_NOSIGNAL;
+#endif
+
+ // send to whichever addr the socket is connected
+ io_result = send(m_SocketFdReference->m_SocketFd,
+ (SocketConstBuffer)buffer,
+ buffer_length,
+ flags);
+ }
+
+ // check result
+ if (NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ return MapErrorCode(GetSocketError());
+ }
+
+ m_SocketFdReference->m_Position += buffer_length;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpSocket::Receive
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpSocket::Receive(NPT_DataBuffer& packet,
+ NPT_SocketAddress* address)
+{
+ // get the packet buffer
+ NPT_Byte* buffer = packet.UseData();
+ ssize_t buffer_size = packet.GetBufferSize();
+
+ // check that we have some space to receive
+ if (buffer_size == 0) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // if we're blocking, wait until the socket is readable
+ if (m_SocketFdReference->m_Blocking &&
+ m_SocketFdReference->m_ReadTimeout != NPT_TIMEOUT_INFINITE) {
+ NPT_Result result = m_SocketFdReference->WaitUntilReadable();
+ if (result != NPT_SUCCESS) return result;
+ }
+
+ // receive a packet
+ int io_result;
+ if (address) {
+ struct sockaddr_in inet_address;
+ socklen_t inet_address_length = sizeof(inet_address);
+ io_result = recvfrom(m_SocketFdReference->m_SocketFd,
+ (SocketBuffer)buffer,
+ buffer_size,
+ 0,
+ (struct sockaddr *)&inet_address,
+ &inet_address_length);
+
+ // convert the address format
+ if (!NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ if (inet_address_length == sizeof(inet_address)) {
+ InetAddressToSocketAddress(&inet_address, *address);
+ }
+ }
+ } else {
+ io_result = recv(m_SocketFdReference->m_SocketFd,
+ (SocketBuffer)buffer,
+ buffer_size,
+ 0);
+ }
+
+ // check result
+ if (NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ packet.SetDataSize(0);
+ return MapErrorCode(GetSocketError());
+ }
+
+ packet.SetDataSize(io_result);
+ m_SocketFdReference->m_Position += io_result;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UdpSocket::NPT_UdpSocket
++---------------------------------------------------------------------*/
+NPT_UdpSocket::NPT_UdpSocket()
+{
+ NPT_BsdUdpSocket* delegate = new NPT_BsdUdpSocket();
+ m_SocketDelegate = delegate;
+ m_UdpSocketDelegate = delegate;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UdpSocket::NPT_UdpSocket
++---------------------------------------------------------------------*/
+NPT_UdpSocket::NPT_UdpSocket(NPT_UdpSocketInterface* delegate) :
+ m_UdpSocketDelegate(delegate)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_UdpSocket::~NPT_UdpSocket
++---------------------------------------------------------------------*/
+NPT_UdpSocket::~NPT_UdpSocket()
+{
+ delete m_UdpSocketDelegate;
+
+ // set the delegate pointers to NULL because it is shared by the
+ // base classes, and we only want to delete the object once
+ m_UdpSocketDelegate = NULL;
+ m_SocketDelegate = NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket
++---------------------------------------------------------------------*/
+class NPT_BsdUdpMulticastSocket : public NPT_UdpMulticastSocketInterface,
+ protected NPT_BsdUdpSocket
+
+{
+ public:
+ // methods
+ NPT_BsdUdpMulticastSocket();
+ ~NPT_BsdUdpMulticastSocket();
+
+ // NPT_UdpMulticastSocketInterface methods
+ NPT_Result JoinGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface);
+ NPT_Result LeaveGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface);
+ NPT_Result SetTimeToLive(unsigned char ttl);
+ NPT_Result SetInterface(const NPT_IpAddress& iface);
+
+ // friends
+ friend class NPT_UdpMulticastSocket;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::NPT_BsdUdpMulticastSocket
++---------------------------------------------------------------------*/
+NPT_BsdUdpMulticastSocket::NPT_BsdUdpMulticastSocket()
+{
+#ifndef _XBOX
+ int option = 1;
+ setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_IP,
+ IP_MULTICAST_LOOP,
+ (SocketOption)&option,
+ sizeof(option));
+#endif
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::~NPT_BsdUdpMulticastSocket
++---------------------------------------------------------------------*/
+NPT_BsdUdpMulticastSocket::~NPT_BsdUdpMulticastSocket()
+{
+}
+
+#if defined(_XBOX)
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::JoinGroup
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::JoinGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface)
+{
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::JoinGroup
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::JoinGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface)
+{
+ struct ip_mreq mreq;
+
+ // set the interface address
+ mreq.imr_interface.s_addr = htonl(iface.AsLong());
+
+ // set the group address
+ mreq.imr_multiaddr.s_addr = htonl(group.AsLong());
+
+ // set socket option
+ int io_result = setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ (SocketOption)&mreq, sizeof(mreq));
+ if (io_result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+}
+#endif
+
+#if defined(_XBOX)
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::LeaveGroup
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::LeaveGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface)
+{
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::LeaveGroup
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::LeaveGroup(const NPT_IpAddress& group,
+ const NPT_IpAddress& iface)
+{
+ struct ip_mreq mreq;
+
+ // set the interface address
+ mreq.imr_interface.s_addr = htonl(iface.AsLong());
+
+ // set the group address
+ mreq.imr_multiaddr.s_addr = htonl(group.AsLong());
+
+ // set socket option
+ int io_result = setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_IP, IP_DROP_MEMBERSHIP,
+ (SocketOption)&mreq, sizeof(mreq));
+ if (io_result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+}
+#endif
+
+#if defined(_XBOX)
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::SetInterface
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::SetInterface(const NPT_IpAddress& iface)
+{
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::SetInterface
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::SetInterface(const NPT_IpAddress& iface)
+{
+ struct in_addr iface_addr;
+ // set the interface address
+ iface_addr.s_addr = htonl(iface.AsLong());
+
+ // set socket option
+ int io_result = setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_IP, IP_MULTICAST_IF,
+ (char*)&iface_addr, sizeof(iface_addr));
+ if (io_result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+}
+#endif
+
+#if defined(_XBOX)
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::SetTimeToLive
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::SetTimeToLive(unsigned char ttl)
+{
+ return NPT_ERROR_NOT_IMPLEMENTED;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_BsdUdpMulticastSocket::SetTimeToLive
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdUdpMulticastSocket::SetTimeToLive(unsigned char ttl)
+{
+ unsigned char ttl_opt = ttl;
+
+ // set socket option
+ int io_result = setsockopt(m_SocketFdReference->m_SocketFd,
+ IPPROTO_IP, IP_MULTICAST_TTL,
+ (SocketOption)&ttl_opt, sizeof(ttl_opt));
+ if (io_result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return MapErrorCode(GetSocketError());
+ }
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_UdpMulticastSocket::NPT_UdpMulticastSocket
++---------------------------------------------------------------------*/
+NPT_UdpMulticastSocket::NPT_UdpMulticastSocket() :
+ NPT_UdpSocket(NULL)
+{
+ NPT_BsdUdpMulticastSocket* delegate = new NPT_BsdUdpMulticastSocket();
+ m_SocketDelegate = delegate;
+ m_UdpSocketDelegate = delegate;
+ m_UdpMulticastSocketDelegate = delegate;
+}
+
+/*----------------------------------------------------------------------
+| NPT_UdpMulticastSocket::~NPT_UdpMulticastSocket
++---------------------------------------------------------------------*/
+NPT_UdpMulticastSocket::~NPT_UdpMulticastSocket()
+{
+ delete m_UdpMulticastSocketDelegate;
+
+ // set the delegate pointers to NULL because it is shared by the
+ // base classes, and we only want to delete the object once
+ m_SocketDelegate = NULL;
+ m_UdpSocketDelegate = NULL;
+ m_UdpMulticastSocketDelegate = NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket
++---------------------------------------------------------------------*/
+class NPT_BsdTcpClientSocket : protected NPT_BsdSocket
+{
+ public:
+ // methods
+ NPT_BsdTcpClientSocket();
+ ~NPT_BsdTcpClientSocket();
+
+ // NPT_SocketInterface methods
+ NPT_Result Connect(const NPT_SocketAddress& address,
+ NPT_Timeout timeout);
+ NPT_Result WaitForConnection(NPT_Timeout timeout);
+
+protected:
+ // methods
+ NPT_Result DoWaitForConnection(NPT_Timeout timeout);
+
+ // friends
+ friend class NPT_TcpClientSocket;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket::NPT_BsdTcpClientSocket
++---------------------------------------------------------------------*/
+NPT_BsdTcpClientSocket::NPT_BsdTcpClientSocket() :
+ NPT_BsdSocket(socket(AF_INET, SOCK_STREAM, 0))
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket::~NPT_BsdTcpClientSocket
++---------------------------------------------------------------------*/
+NPT_BsdTcpClientSocket::~NPT_BsdTcpClientSocket()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket::Connect
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdTcpClientSocket::Connect(const NPT_SocketAddress& address,
+ NPT_Timeout timeout)
+{
+ bool was_blocking = m_Blocking;
+
+ // set the socket to nonblocking so that we can timeout on connect
+ if (m_Blocking) {
+ NPT_CHECK(m_SocketFdReference->SetBlockingMode(false));
+ }
+
+ // convert the address
+ struct sockaddr_in inet_address;
+ SocketAddressToInetAddress(address, &inet_address);
+
+ // initiate connection
+ int io_result;
+ io_result = connect(m_SocketFdReference->m_SocketFd,
+ (struct sockaddr *)&inet_address,
+ sizeof(inet_address));
+ if (io_result == 0) {
+ // immediate connection
+
+ // put the fd back in its original blocking mode
+ if (was_blocking) m_SocketFdReference->SetBlockingMode(true);
+
+ // get socket info
+ RefreshInfo();
+
+ return NPT_SUCCESS;
+ }
+
+ NPT_Result result = MapErrorCode(GetSocketError());
+
+ if (was_blocking) {
+ // put the fd back in its original blocking mode
+ m_SocketFdReference->SetBlockingMode(true);
+
+ // wait for the connection to be done
+ if (result == NPT_ERROR_WOULD_BLOCK) return DoWaitForConnection(timeout);
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket::WaitForConnection
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdTcpClientSocket::WaitForConnection(NPT_Timeout timeout)
+{
+ // this function can only be called directly for non-blocking sockets
+ if (m_Blocking) return NPT_ERROR_INVALID_STATE;
+
+ return DoWaitForConnection(timeout);
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpClientSocket::DoWaitForConnection
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdTcpClientSocket::DoWaitForConnection(NPT_Timeout timeout)
+{
+ SocketFd socket_fd = m_SocketFdReference->m_SocketFd;
+ NPT_Result result = NPT_SUCCESS;
+
+ // wait for connection to succeed or fail
+ fd_set read_set;
+ fd_set write_set;
+ fd_set except_set;
+ FD_ZERO(&read_set);
+ FD_SET(socket_fd, &read_set);
+ FD_ZERO(&write_set);
+ FD_SET(socket_fd, &write_set);
+ FD_ZERO(&except_set);
+ FD_SET(socket_fd, &except_set);
+
+ struct timeval timeout_value;
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ timeout_value.tv_sec = timeout/1000;
+ timeout_value.tv_usec = 1000*(timeout-1000*(timeout/1000));
+ };
+
+ int nfds = (int)socket_fd+1;
+
+#if !defined(__WIN32__) && !defined(_XBOX)
+ FD_SET(m_SocketFdReference->m_AbortPipe[0], &read_set);
+ nfds = (m_SocketFdReference->m_AbortPipe[0]>(int)socket_fd?m_SocketFdReference->m_AbortPipe[0]:(int)socket_fd)+1;
+#endif
+
+ int io_result = select(nfds,
+ &read_set, &write_set, &except_set,
+ timeout == NPT_TIMEOUT_INFINITE ?
+ NULL : &timeout_value);
+
+ if (io_result == 0) {
+ if (timeout == 0) {
+ // non-blocking call
+ return NPT_ERROR_WOULD_BLOCK;
+ } else {
+ // timeout
+ return NPT_ERROR_TIMEOUT;
+ }
+ } else if (NPT_BSD_SOCKET_SELECT_FAILED(io_result)) {
+ return MapErrorCode(GetSocketError());
+ } else if (FD_ISSET(socket_fd, &read_set) ||
+ FD_ISSET(socket_fd, &write_set) ||
+ FD_ISSET(socket_fd, &except_set)) {
+#if defined(_XBOX)
+ if (FD_ISSET(socket_fd, &except_set)) return MapErrorCode(GetSocketError());
+#else
+ // get error status from socket
+ // (some systems return the error in errno, others
+ // return it in the buffer passed to getsockopt)
+ int error = 0;
+ socklen_t length = sizeof(error);
+ io_result = getsockopt(socket_fd,
+ SOL_SOCKET,
+ SO_ERROR,
+ (SocketOption)&error,
+ &length);
+ if (NPT_BSD_SOCKET_CALL_FAILED(io_result)) {
+ return MapErrorCode(GetSocketError());
+ } else if (error) {
+ return MapErrorCode(error);
+ }
+#endif
+#if !defined(__WIN32__) && !defined(_XBOX)
+ } else if (FD_ISSET(m_SocketFdReference->m_AbortPipe[0], &read_set)) {
+ result = NPT_ERROR_CONNECTION_ABORTED;
+#endif
+ } else {
+ // should not happen
+ result = (socket_fd == 0)?NPT_ERROR_EOS:NPT_ERROR_INTERNAL;
+ }
+
+ // get socket info
+ RefreshInfo();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TcpClientSocket::NPT_TcpClientSocket
++---------------------------------------------------------------------*/
+NPT_TcpClientSocket::NPT_TcpClientSocket() :
+ NPT_Socket(new NPT_BsdTcpClientSocket())
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_TcpClientSocket::NPT_TcpClientSocket
++---------------------------------------------------------------------*/
+NPT_TcpClientSocket::~NPT_TcpClientSocket()
+{
+ delete m_SocketDelegate;
+
+ // set the delegate pointer to NULL because it is shared by the
+ // base classes, and we only want to delete the object once
+ m_SocketDelegate = NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpServerSocket
++---------------------------------------------------------------------*/
+class NPT_BsdTcpServerSocket : public NPT_TcpServerSocketInterface,
+ protected NPT_BsdSocket
+
+{
+ public:
+ // methods
+ NPT_BsdTcpServerSocket();
+ ~NPT_BsdTcpServerSocket();
+
+ // NPT_SocketInterface methods
+ NPT_Result Bind(const NPT_SocketAddress& address, bool reuse_address = true) {
+ // inherit
+ return NPT_BsdSocket::Bind(address, reuse_address);
+ }
+ NPT_Result Connect(const NPT_SocketAddress& address,
+ NPT_Timeout timeout) {
+ // inherit
+ return NPT_BsdSocket::Connect(address, timeout);
+ }
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream) {
+ // no stream
+ stream = NULL;
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream) {
+ // no stream
+ stream = NULL;
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result GetInfo(NPT_SocketInfo& info) {
+ // inherit
+ return NPT_BsdSocket::GetInfo(info);
+ }
+
+ // NPT_TcpServerSocket methods
+ NPT_Result Listen(unsigned int max_clients);
+ NPT_Result WaitForNewClient(NPT_Socket*& client, NPT_Timeout timeout);
+
+protected:
+ // members
+ unsigned int m_ListenMax;
+
+ // friends
+ friend class NPT_TcpServerSocket;
+};
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpServerSocket::NPT_BsdTcpServerSocket
++---------------------------------------------------------------------*/
+NPT_BsdTcpServerSocket::NPT_BsdTcpServerSocket() :
+ NPT_BsdSocket(socket(AF_INET, SOCK_STREAM, 0)),
+ m_ListenMax(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpServerSocket::~NPT_BsdTcpServerSocket
++---------------------------------------------------------------------*/
+NPT_BsdTcpServerSocket::~NPT_BsdTcpServerSocket()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpServerSocket::Listen
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdTcpServerSocket::Listen(unsigned int max_clients)
+{
+ // listen for connections
+ if (listen(m_SocketFdReference->m_SocketFd, max_clients) < 0) {
+ m_ListenMax = 0;
+ return NPT_ERROR_LISTEN_FAILED;
+ }
+ m_ListenMax = max_clients;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_BsdTcpServerSocket::WaitForNewClient
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_BsdTcpServerSocket::WaitForNewClient(NPT_Socket*& client,
+ NPT_Timeout timeout)
+{
+ // default value
+ client = NULL;
+
+ // check that we are listening for clients
+ if (m_ListenMax == 0) {
+ Listen(NPT_TCP_SERVER_SOCKET_DEFAULT_LISTEN_COUNT);
+ }
+
+ // set the socket to nonblocking so that we can timeout on accept
+ bool was_blocking = m_Blocking;
+ if (m_Blocking) {
+ NPT_CHECK(m_SocketFdReference->SetBlockingMode(false));
+ }
+
+ NPT_Result result = m_SocketFdReference->WaitForCondition(true, true, timeout);
+ if (result != NPT_SUCCESS) return result;
+
+ struct sockaddr_in inet_address;
+ socklen_t namelen = sizeof(inet_address);
+ SocketFd socket_fd = accept(m_SocketFdReference->m_SocketFd, (struct sockaddr*)&inet_address, &namelen);
+ if (NPT_BSD_SOCKET_IS_INVALID(socket_fd)) {
+ result = MapErrorCode(GetSocketError());
+ } else {
+ client = new NPT_Socket(new NPT_BsdSocket(socket_fd, m_Blocking));
+ }
+
+ if (was_blocking) {
+ // put the fd back in its original blocking mode
+ m_SocketFdReference->SetBlockingMode(true);
+ }
+
+ // done
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TcpServerSocket::NPT_TcpServerSocket
++---------------------------------------------------------------------*/
+NPT_TcpServerSocket::NPT_TcpServerSocket()
+{
+ NPT_BsdTcpServerSocket* delegate = new NPT_BsdTcpServerSocket();
+ m_SocketDelegate = delegate;
+ m_TcpServerSocketDelegate = delegate;
+}
+
+/*----------------------------------------------------------------------
+| NPT_TcpServerSocket::NPT_TcpServerSocket
++---------------------------------------------------------------------*/
+NPT_TcpServerSocket::~NPT_TcpServerSocket()
+{
+ delete m_TcpServerSocketDelegate;
+
+ // set the delegate pointers to NULL because it is shared by the
+ // base classes, and we only want to delete the object once
+ m_SocketDelegate = NULL;
+ m_TcpServerSocketDelegate = NULL;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.h b/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.h
new file mode 100644
index 0000000000..cd3e89b11b
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.h
@@ -0,0 +1,39 @@
+/*****************************************************************
+|
+| Neptune - Cocoa Message Queue
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+#ifndef _NPT_COCOA_MESSAGE_QUEUE_
+#define _NPT_COCOA_MESSAGE_QUEUE_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptStrings.h"
+#include "NptMessaging.h"
+#include "NptSimpleMessageQueue.h"
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageQueue
++---------------------------------------------------------------------*/
+class NPT_CocoaMessageQueue : public NPT_MessageQueue
+{
+public:
+ NPT_CocoaMessageQueue();
+ ~NPT_CocoaMessageQueue();
+
+ // NPT_MessageQueue methods
+ virtual NPT_Result QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler);
+ virtual NPT_Result PumpMessage(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+ // methods
+ NPT_Result HandleMessage(NPT_Message* message, NPT_MessageHandler* handler);
+};
+
+#endif /* _NPT_COCOA_MESSAGE_QUEUE_ */
+
diff --git a/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.mm b/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.mm
new file mode 100644
index 0000000000..ffc963d001
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Cocoa/NptCocoaMessageQueue.mm
@@ -0,0 +1,98 @@
+/*****************************************************************
+|
+| Neptune - Cocoa Message Queue
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <Cocoa/Cocoa.h>
+#include "NptCocoaMessageQueue.h"
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageWrapper
++---------------------------------------------------------------------*/
+@interface NPT_CocoaMessageCapsule : NSObject
+{
+ NPT_Message* message;
+ NPT_MessageHandler* handler;
+}
+-(id) initWithMessage: (NPT_Message*) message andHandler: (NPT_MessageHandler*) handler;
+-(void) handle;
+@end
+
+@implementation NPT_CocoaMessageCapsule
+-(id) initWithMessage: (NPT_Message*) aMessage andHandler: (NPT_MessageHandler*) aHandler
+{
+ if ((self = [super init])) {
+ message = aMessage;
+ handler = aHandler;
+ }
+ return self;
+}
+
+-(void) dealloc
+{
+ [super dealloc];
+ delete message;
+}
+
+-(void) handle
+{
+ if (handler && message) {
+ handler->HandleMessage(message);
+ }
+}
+@end
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageQueue::NPT_CocoaMessageQueue
++---------------------------------------------------------------------*/
+NPT_CocoaMessageQueue::NPT_CocoaMessageQueue()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageQueue::~NPT_CocoaMessageQueue
++---------------------------------------------------------------------*/
+NPT_CocoaMessageQueue::~NPT_CocoaMessageQueue()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageQueue::PumpMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_CocoaMessageQueue::PumpMessage(NPT_Timeout)
+{
+ // you cannot pump messages on this type of queue, since they will
+ // be pumped by the main application message loop
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_CocoaMessageQueue::QueueMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_CocoaMessageQueue::QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler)
+{
+ // create a capsule to represent the message and handler
+ NPT_CocoaMessageCapsule* capsule = [NPT_CocoaMessageCapsule alloc];
+ [capsule initWithMessage: message andHandler: handler];
+
+ // trigger the handling of the message on the main thread
+ [capsule performSelectorOnMainThread: @selector(handle)
+ withObject: nil
+ waitUntilDone: FALSE];
+
+ // we no longer hold a reference to the capsule (it will be released
+ // by the receiving thread)
+ [capsule release];
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullHttpProxy.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullHttpProxy.cpp
new file mode 100644
index 0000000000..b9bdd17f9f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullHttpProxy.cpp
@@ -0,0 +1,23 @@
+/*****************************************************************
+|
+| Neptune - HTTP Proxy :: Null Implementation
+|
+| (c) 2001-2007 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptResults.h"
+#include "NptHttp.h"
+
+/*----------------------------------------------------------------------
+| NPT_HttpProxySelector::GetSystemDefault
++---------------------------------------------------------------------*/
+NPT_HttpProxySelector*
+NPT_HttpProxySelector::GetSystemDefault()
+{
+ return NULL;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullNetwork.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullNetwork.cpp
new file mode 100644
index 0000000000..f4a5f3bf27
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullNetwork.cpp
@@ -0,0 +1,23 @@
+/*****************************************************************
+|
+| Neptune - Network :: Null Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptResults.h"
+#include "NptNetwork.h"
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& /*interfaces*/)
+{
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullQueue.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullQueue.cpp
new file mode 100644
index 0000000000..d51a750276
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullQueue.cpp
@@ -0,0 +1,30 @@
+/*****************************************************************
+|
+| Neptune - Queue :: Null Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptQueue.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_GenericQueue::CreateInstance
++---------------------------------------------------------------------*/
+NPT_GenericQueue*
+NPT_GenericQueue::CreateInstance(NPT_Cardinal max_items)
+{
+ NPT_ASSERT(0);
+ return NULL;
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullSerialPort.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullSerialPort.cpp
new file mode 100644
index 0000000000..f9b32747b8
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullSerialPort.cpp
@@ -0,0 +1,83 @@
+/*****************************************************************
+|
+| Neptune - Serial Ports :: Null Implementation
+|
+| (c) 2001-2007 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptUtils.h"
+#include "NptSerialPort.h"
+
+/*----------------------------------------------------------------------
+| NPT_NullSerialPort
++---------------------------------------------------------------------*/
+class NPT_NullSerialPort: public NPT_SerialPortInterface
+{
+public:
+ // NPT_SerialPortInterface methods
+ NPT_Result Open(unsigned int speed,
+ NPT_SerialPortStopBits stop_bits = NPT_SERIAL_PORT_STOP_BITS_1,
+ NPT_SerialPortFlowControl flow_control = NPT_SERIAL_PORT_FLOW_CONTROL_NONE,
+ NPT_SerialPortParity parity = NPT_SERIAL_PORT_PARITY_NONE);
+ NPT_Result Close();
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+};
+
+/*----------------------------------------------------------------------
+| NPT_NullSerialPort::Open
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NullSerialPort::Open(unsigned int /* speed */,
+ NPT_SerialPortStopBits /* stop_bits */,
+ NPT_SerialPortFlowControl /* flow_control */,
+ NPT_SerialPortParity /* parity */)
+{
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_NullSerialPort::Close
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NullSerialPort::Close()
+{
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_NullSerialPort::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NullSerialPort::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_NullSerialPort::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NullSerialPort::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SerialPort::NPT_SerialPort
++---------------------------------------------------------------------*/
+NPT_SerialPort::NPT_SerialPort(const char* /* name */)
+{
+ m_Delegate = new NPT_NullSerialPort();
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullSystem.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullSystem.cpp
new file mode 100644
index 0000000000..16b0604687
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullSystem.cpp
@@ -0,0 +1,61 @@
+/*****************************************************************
+|
+| Neptune - System :: Null Implementation
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+NPT_System System;
+
+/*----------------------------------------------------------------------
+| NPT_NullSystem
++---------------------------------------------------------------------*/
+class NPT_NullSystem : public NPT_SystemInterface
+{
+public:
+ // methods
+ NPT_NullSystem() {}
+ ~NPT_NullSystem(){}
+ NPT_Result GetProcessId(NPT_Integer& id) {
+ id = 0;
+ return NPT_SUCCESS;
+ }
+ NPT_Result GetCurrentTimeStamp(NPT_TimeStamp& now) {
+ now = 0.0f;
+ return NPT_SUCCESS;
+ }
+ NPT_Result Sleep(const NPT_TimeInterval& /*duration*/) {
+ return NPT_FAILURE;
+ }
+ NPT_Result SleepUntil(const NPT_TimeStamp& /*when*/) {
+ return NPT_FAILURE;
+ }
+ NPT_Result SetRandomSeed(unsigned int /*seed*/) {
+ return NPT_SUCCESS;
+ }
+ NPT_Integer GetRandomInteger() {
+ return 0;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_System::NPT_System
++---------------------------------------------------------------------*/
+NPT_System::NPT_System()
+{
+ m_Delegate = new NPT_NullSystem();
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Null/NptNullThreads.cpp b/lib/libUPnP/Neptune/Source/System/Null/NptNullThreads.cpp
new file mode 100644
index 0000000000..c050222637
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Null/NptNullThreads.cpp
@@ -0,0 +1,48 @@
+/*****************************************************************
+|
+| Neptune - Threads :: Null Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptThreads.h"
+
+/*----------------------------------------------------------------------
+| NPT_NullAtomicVariable
++---------------------------------------------------------------------*/
+class NPT_NullAtomicVariable : public NPT_AtomicVariableInterface
+{
+ public:
+ // methods
+ NPT_NullAtomicVariable(NPT_Integer value) : m_Value(value) {}
+ ~NPT_NullAtomicVariable() {}
+ NPT_Integer Increment() { return ++m_Value; }
+ NPT_Integer Decrement() { return --m_Value; }
+ NPT_Integer GetValue() { return m_Value; }
+ void SetValue(NPT_Integer value) { m_Value = value; }
+
+ private:
+ // members
+ volatile NPT_Integer m_Value;
+};
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariable::NPT_AtomicVariable
++---------------------------------------------------------------------*/
+NPT_AtomicVariable::NPT_AtomicVariable(NPT_Integer value)
+{
+ m_Delegate = new NPT_NullAtomicVariable(value);
+}
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/PS3/NptPs3System.cpp b/lib/libUPnP/Neptune/Source/System/PS3/NptPs3System.cpp
new file mode 100644
index 0000000000..30ecd1f5ae
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PS3/NptPs3System.cpp
@@ -0,0 +1,113 @@
+/*****************************************************************
+|
+| Neptune - System :: PS3 Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+#include <sys/timer.h>
+#include <sys/sys_time.h>
+#include <unistd.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_System::GetProcessId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetProcessId(NPT_Integer& id)
+{
+ id = 0;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ sys_time_sec_t sec;
+ sys_time_nsec_t nsec;
+
+ int result = sys_time_get_current_time(&sec, &nsec);
+ if (result != CELL_OK){
+ now.m_Seconds = 0;
+ now.m_NanoSeconds = 0;
+ return NPT_FAILURE;
+ }
+
+ /* convert format */
+ now.m_Seconds = sec;
+ now.m_NanoSeconds = nsec;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::Sleep
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::Sleep(const NPT_TimeInterval& duration)
+{
+ unsigned long usecs = 1000000*duration.m_Seconds + duration.m_NanoSeconds/1000;
+ sys_timer_usleep(usecs);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SleepUntil
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SleepUntil(const NPT_TimeStamp& when)
+{
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ if (when > now) {
+ NPT_TimeInterval duration = when-now;
+ return NPT_System::Sleep(duration);
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SetRandomSeed
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SetRandomSeed(unsigned int seed)
+{
+ srand(seed);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetRandomInteger
++---------------------------------------------------------------------*/
+NPT_Integer
+NPT_System::GetRandomInteger()
+{
+ static bool seeded = false;
+ if (!seeded) {
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ srand(now.m_NanoSeconds);
+ seeded = true;
+ }
+
+ return rand();
+}
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPDirectory.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPDirectory.cpp
new file mode 100644
index 0000000000..db7e883aa3
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPDirectory.cpp
@@ -0,0 +1,199 @@
+/*****************************************************************
+|
+| Neptune - Directory :: PSP Implementation
+|
+| Copyright (c) 2004-2008, Plutinosoft, LLC.
+| Author: Sylvain Rebaud (sylvain@plutinosoft.com)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+
+#include <kernel.h>
+#include <psptypes.h>
+#include <psperror.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptDirectory.h"
+#include "NptDebug.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectoryEntry
++---------------------------------------------------------------------*/
+class NPT_PSPDirectoryEntry : public NPT_DirectoryEntryInterface
+{
+public:
+ // methods
+ NPT_PSPDirectoryEntry(const char* path);
+ virtual ~NPT_PSPDirectoryEntry();
+
+ // NPT_DirectoryInterface methods
+ virtual NPT_Result GetType(NPT_DirectoryEntryType& type);
+ virtual NPT_Result GetSize(NPT_Size& size);
+
+private:
+ // members
+ NPT_StringObject m_Path;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectoryEntry::NPT_PSPDirectoryEntry
++---------------------------------------------------------------------*/
+NPT_PSPDirectoryEntry::NPT_PSPDirectoryEntry(const char* path) :
+ m_Path(path)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectoryEntry::~NPT_PSPDirectoryEntry
++---------------------------------------------------------------------*/
+NPT_PSPDirectoryEntry::~NPT_PSPDirectoryEntry()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectoryEntry::GetType
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPDirectoryEntry::GetType(NPT_DirectoryEntryType& type)
+{
+ //// converts from Utf8 ?
+ //DWORD fa = GetFileAttributes(m_Path);
+ //if (fa == 0xFFFFFFFF) {
+ // return NPT_FAILURE;
+ //}
+
+ //if ((fa & FILE_ATTRIBUTE_DIRECTORY) == 0) {
+ // type = NPT_FILE_TYPE;
+ //} else {
+ // type = NPT_DIRECTORY_TYPE;
+ //}
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectoryEntry::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPDirectoryEntry::GetSize(NPT_Size& size)
+{
+ //WIN32_FIND_DATA filedata;
+
+ //// converts to Utf8?
+ //HANDLE sizeHandle = FindFirstFile(m_Path, &filedata);
+ //if (sizeHandle == INVALID_HANDLE_VALUE) {
+ // FindClose(sizeHandle);
+ // return NPT_FAILURE;
+ //}
+
+ //size = filedata.nFileSizeLow;
+ //FindClose(sizeHandle);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_DirectoryEntry::NPT_DirectoryEntry
++---------------------------------------------------------------------*/
+NPT_DirectoryEntry::NPT_DirectoryEntry(const char* path)
+{
+ m_Delegate = new NPT_PSPDirectoryEntry(path);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectory
++---------------------------------------------------------------------*/
+class NPT_PSPDirectory : public NPT_DirectoryInterface
+{
+public:
+ // methods
+ NPT_PSPDirectory(const char* path);
+ virtual ~NPT_PSPDirectory();
+
+ // NPT_DirectoryInterface methods
+ virtual NPT_Result GetNextEntry(NPT_StringObject& name, NPT_Size* size = NULL, NPT_DirectoryEntryType* type = NULL);
+
+private:
+ // members
+ NPT_StringObject m_Path;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectory::NPT_PSPDirectory
++---------------------------------------------------------------------*/
+NPT_PSPDirectory::NPT_PSPDirectory(const char* path) :
+ m_Path(path)
+{
+ if (!m_Path.EndsWith(NPT_WIN32_DIR_DELIMITER_STR)) {
+ if (!m_Path.EndsWith(NPT_UNIX_DIR_DELIMITER_STR)) {
+ m_Path += NPT_UNIX_DIR_DELIMITER_STR;
+ }
+ }
+
+ m_Path += "*.*";
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectory::~NPT_PSPDirectory
++---------------------------------------------------------------------*/
+NPT_PSPDirectory::~NPT_PSPDirectory()
+{
+ //if (m_SearchHandle != NULL) {
+ // FindClose(m_SearchHandle);
+ //}
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPDirectory::GetNextEntry
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPDirectory::GetNextEntry(NPT_StringObject& name, NPT_Size* size, NPT_DirectoryEntryType* type)
+{
+ //WIN32_FIND_DATA filedata;
+
+ //if (m_SearchHandle == NULL) {
+ // m_SearchHandle = FindFirstFile(m_Path, &filedata);
+ // if (m_SearchHandle == INVALID_HANDLE_VALUE) {
+ // m_SearchHandle = NULL;
+ // return NPT_FAILURE;
+ // }
+ //} else {
+ // if (FindNextFile(m_SearchHandle, &filedata) == 0) {
+ // return NPT_FAILURE;
+ // }
+ //}
+
+ //// need to convert to Utf8 ?
+ //name = filedata.cFileName;
+
+ //if (size) {
+ // *size = filedata.nFileSizeLow;
+ //}
+
+ //if (type) {
+ // *type = (filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? NPT_DIRECTORY_TYPE : NPT_FILE_TYPE;
+ //}
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Directory::NPT_Directory
++---------------------------------------------------------------------*/
+NPT_Directory::NPT_Directory(const char* path)
+{
+ m_Delegate = new NPT_PSPDirectory(path);
+}
+
+
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPFile.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPFile.cpp
new file mode 100644
index 0000000000..130ae217f4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPFile.cpp
@@ -0,0 +1,441 @@
+/*****************************************************************
+|
+| Neptune - File Byte Stream :: Standard C Implementation
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+
+#include <kernel.h>
+#include <psptypes.h>
+#include <psperror.h>
+#include <mediaman.h>
+#include <umderror.h>
+#include <fatms.h>
+
+#include "NptFile.h"
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileWrapper
++---------------------------------------------------------------------*/
+class NPT_PSPFileWrapper
+{
+public:
+ // constructors and destructor
+ NPT_PSPFileWrapper(SceUID file) : m_File(file) {}
+ ~NPT_PSPFileWrapper() {
+ if (m_File >= 0) {
+ sceIoClose(m_File);
+ }
+ }
+
+ // methods
+ SceUID GetFile() { return m_File; }
+
+private:
+ // members
+ SceUID m_File;
+};
+
+typedef NPT_Reference<NPT_PSPFileWrapper> NPT_PSPFileReference;
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileStream
++---------------------------------------------------------------------*/
+class NPT_PSPFileStream
+{
+public:
+ // constructors and destructor
+ NPT_PSPFileStream(NPT_PSPFileReference file) :
+ m_FileReference(file), m_Position(0) {}
+
+ // NPT_FileInterface methods
+ NPT_Result Seek(NPT_Offset offset);
+ NPT_Result Tell(NPT_Offset& offset);
+
+protected:
+ // constructors and destructors
+ virtual ~NPT_PSPFileStream() {}
+
+ // members
+ NPT_PSPFileReference m_FileReference;
+ SceOff m_Position;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileStream::Seek(NPT_Offset offset)
+{
+ SceOff result;
+
+ result = sceIoLseek(m_FileReference->GetFile(), offset, SEEK_SET);
+ if (result >= 0) {
+ m_Position = offset;
+ return NPT_SUCCESS;
+ } else {
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileStream::Tell(NPT_Offset& offset)
+{
+ offset = m_Position;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileInputStream
++---------------------------------------------------------------------*/
+class NPT_PSPFileInputStream : public NPT_InputStream,
+ private NPT_PSPFileStream
+
+{
+public:
+ // constructors and destructor
+ NPT_PSPFileInputStream(NPT_PSPFileReference& file, NPT_Size size) :
+ NPT_PSPFileStream(file), m_Size(size) {}
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read);
+ NPT_Result Seek(NPT_Offset offset) {
+ return NPT_PSPFileStream::Seek(offset);
+ }
+ NPT_Result Tell(NPT_Offset& offset) {
+ return NPT_PSPFileStream::Tell(offset);
+ }
+ NPT_Result GetSize(NPT_Size& size);
+ NPT_Result GetAvailable(NPT_Size& available);
+
+private:
+ // members
+ NPT_Size m_Size;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ size_t nb_read;
+
+ if (buffer == NULL) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ nb_read = sceIoRead(m_FileReference->GetFile(), (SceChar8*)buffer, bytes_to_read);
+
+ if (nb_read > 0) {
+ if (bytes_read) *bytes_read = (NPT_Size)nb_read;
+ m_Position += nb_read;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_read) *bytes_read = 0;
+ return NPT_ERROR_EOS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileInputStream::GetSize(NPT_Size& size)
+{
+ size = m_Size;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileInputStream::GetAvailable(NPT_Size& available)
+{
+ long offset = m_Position;
+ if (offset >= 0 && (NPT_Size)offset <= m_Size) {
+ available = m_Size = offset;
+ return NPT_SUCCESS;
+ } else {
+ available = 0;
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileOutputStream
++---------------------------------------------------------------------*/
+class NPT_PSPFileOutputStream : public NPT_OutputStream,
+ private NPT_PSPFileStream
+{
+public:
+ // constructors and destructor
+ NPT_PSPFileOutputStream(NPT_PSPFileReference& file) :
+ NPT_PSPFileStream(file) {}
+
+ // NPT_InputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written);
+ NPT_Result Seek(NPT_Offset offset) {
+ return NPT_PSPFileStream::Seek(offset);
+ }
+ NPT_Result Tell(NPT_Offset& offset) {
+ return NPT_PSPFileStream::Tell(offset);
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPFileOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFileOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ size_t nb_written;
+
+ nb_written = sceIoWrite(m_FileReference->GetFile(), (SceChar8*)buffer, bytes_to_write);
+
+ if (nb_written > 0) {
+ if (bytes_written) *bytes_written = (NPT_Size)nb_written;
+ m_Position += nb_written;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_written) *bytes_written = 0;
+ return NPT_ERROR_WRITE_FAILED;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFile
++---------------------------------------------------------------------*/
+class NPT_PSPFile: public NPT_FileInterface
+{
+public:
+ // constructors and destructor
+ NPT_PSPFile(const char* name);
+ ~NPT_PSPFile();
+
+ // NPT_FileInterface methods
+ NPT_Result Open(OpenMode mode);
+ NPT_Result Close();
+ NPT_Result GetSize(NPT_Size& size);
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+
+private:
+ // members
+ NPT_String m_Name;
+ OpenMode m_Mode;
+ NPT_PSPFileReference m_FileReference;
+ NPT_Size m_Size;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPFile::NPT_PSPFile
++---------------------------------------------------------------------*/
+NPT_PSPFile::NPT_PSPFile(const char* name) :
+ m_Name(name),
+ m_Mode(0),
+ m_Size(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFile::~NPT_PSPFile
++---------------------------------------------------------------------*/
+NPT_PSPFile::~NPT_PSPFile()
+{
+ Close();
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPFile::Open
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPFile::Open(NPT_File::OpenMode mode)
+{
+ SceUID file = -1;
+
+ // check if we're already open
+ if (!m_FileReference.IsNull()) {
+ return NPT_ERROR_FILE_ALREADY_OPEN;
+ }
+
+ // store the mode
+ m_Mode = mode;
+
+ // check for special names
+ const char* name = (const char*)m_Name;
+ int flags = 0;
+ SceMode perms = 0; // files opened/created on the PSP require certain permissions
+
+ /* compute mode */
+ if (mode & NPT_FILE_BYTE_STREAM_MODE_WRITE) {
+ perms = 0777; // since we're possibly creating a file, give it full permissions
+ if (mode & NPT_FILE_BYTE_STREAM_MODE_CREATE) {
+ if (mode & NPT_FILE_BYTE_STREAM_MODE_TRUNCATE) {
+ /* write, read, create, truncate */
+ flags = SCE_O_RDWR | SCE_O_CREAT | SCE_O_TRUNC;
+ } else {
+ /* write, read, create */
+ flags = SCE_O_RDWR | SCE_O_CREAT | SCE_O_APPEND;
+ }
+ } else {
+ if (mode & NPT_FILE_BYTE_STREAM_MODE_TRUNCATE) {
+ /* write, read, truncate */
+ flags = SCE_O_RDWR | SCE_O_CREAT | SCE_O_TRUNC;
+ } else {
+ /* write, read */
+ flags = SCE_O_RDWR;
+ }
+ }
+ } else {
+ /* read only */
+ flags = SCE_O_RDONLY;
+ }
+
+ // open the file
+ file = sceIoOpen(name, flags, perms);
+
+ // test the result of the open
+ if (file < 0) {
+ if (file == (SceUID)SCE_ERROR_ERRNO_ENOENT ) {
+ return NPT_ERROR_NO_SUCH_FILE;
+ } else if (file == (SceUID)SCE_ERROR_ERRNO_EACCESS ) {
+ return NPT_ERROR_PERMISSION_DENIED;
+ } else {
+ return NPT_FAILURE;
+ }
+ } else {
+ // get the size
+ SceOff off;
+ off = sceIoLseek(file, 0, SCE_SEEK_END);
+ if (off >= 0) {
+ m_Size = off;
+ sceIoLseek(file, 0, SCE_SEEK_SET);
+ }
+ }
+
+ // create a reference to the FILE object
+ m_FileReference = new NPT_PSPileWrapper(file);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPile::Close
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPile::Close()
+{
+ // release the file reference
+ m_FileReference = NULL;
+
+ // reset the mode
+ m_Mode = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPile::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPile::GetSize(NPT_Size& size)
+{
+ // default value
+ size = 0;
+
+ // check that the file is open
+ if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN;
+
+ // return the size
+ size = m_Size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPile::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPile::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN;
+
+ // check that the mode is compatible
+ if (!(m_Mode & NPT_FILE_OPEN_MODE_READ)) {
+ return NPT_ERROR_FILE_NOT_READABLE;
+ }
+
+ // create a stream
+ stream = new NPT_PSPileInputStream(m_FileReference, m_Size);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPile::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPile::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN;
+
+ // check that the mode is compatible
+ if (!(m_Mode & NPT_FILE_OPEN_MODE_WRITE)) {
+ return NPT_ERROR_FILE_NOT_WRITABLE;
+ }
+
+ // create a stream
+ stream = new NPT_PSPileOutputStream(m_FileReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::NPT_File
++---------------------------------------------------------------------*/
+NPT_File::NPT_File(const char* name)
+{
+ m_Delegate = new NPT_PSPile(name);
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPNetwork.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPNetwork.cpp
new file mode 100644
index 0000000000..b8d309f003
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPNetwork.cpp
@@ -0,0 +1,71 @@
+/*****************************************************************
+|
+| Neptune - Network :: PSP Implementation
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Sylvain Rebaud (sylvain@plutinosoft.com)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptNetwork.h"
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ union SceNetApctlInfo info;
+ int ret = sceNetApctlGetInfo(SCE_NET_APCTL_INFO_IP_ADDRESS, &info);
+ if (ret < 0) {
+ return NPT_FAILURE;
+ }
+ NPT_IpAddress primary_address;
+ if (NPT_FAILED(primary_address.Parse(info.ip_address))) {
+ return NPT_FAILURE;
+ }
+
+ NPT_IpAddress netmask;
+ if (NPT_FAILED(netmask.Parse(info.netmask))) {
+ return NPT_FAILURE;
+ }
+
+ NPT_IpAddress broadcast_address;
+ NPT_Flags flags = 0;
+ flags |= NPT_NETWORK_INTERFACE_FLAG_BROADCAST;
+ flags |= NPT_NETWORK_INTERFACE_FLAG_MULTICAST;
+
+ // get mac address
+ SceNetEtherAddr mac_info;
+ ret = sceNetGetLocalEtherAddr(&mac_info);
+ if (ret < 0) {
+ return NPT_FAILURE;
+ }
+ NPT_MacAddress mac(TYPE_IEEE_802_11, mac_info.data, SCE_NET_ETHER_ADDR_LEN);
+
+ // create an interface object
+ char iface_name[5];
+ iface_name[0] = 'i';
+ iface_name[1] = 'f';
+ iface_name[2] = '0';
+ iface_name[3] = '0';
+ iface_name[4] = '\0';
+ NPT_NetworkInterface* iface = new NPT_NetworkInterface(iface_name, mac, flags);
+
+ // set the interface address
+ NPT_NetworkInterfaceAddress iface_address(
+ primary_address,
+ broadcast_address,
+ NPT_IpAddress::Any,
+ netmask);
+ iface->AddAddress(iface_address);
+
+ // add the interface to the list
+ interfaces.Add(iface);
+
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPQueue.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPQueue.cpp
new file mode 100644
index 0000000000..a875fcad6e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPQueue.cpp
@@ -0,0 +1,141 @@
+/*****************************************************************
+|
+| Neptune - Queue :: PSP Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Sylvain Rebaud
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptQueue.h"
+//#include "NptThreads.h"
+#include "NptList.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_PSPQueue
++---------------------------------------------------------------------*/
+class NPT_PSPQueue : public NPT_GenericQueue
+{
+public:
+ // methods
+ NPT_PSPQueue(NPT_Cardinal max_items);
+ ~NPT_PSPQueue();
+ NPT_Result Push(NPT_QueueItem* item);
+ NPT_Result Pop(NPT_QueueItem*& item, NPT_Boolean blocking);
+
+
+private:
+ // members
+ NPT_Cardinal m_MaxItems;
+ //NPT_Mutex m_Mutex;
+ //pthread_cond_t m_CanPushOrPopCondition;
+ NPT_List<NPT_QueueItem*> m_Items;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPQueue::NPT_PSPQueue
++---------------------------------------------------------------------*/
+NPT_PSPQueue::NPT_PSPQueue(NPT_Cardinal max_items) :
+ m_MaxItems(max_items)
+{
+ NPT_Debug(":: NPT_PSPQueue::NPT_PSPQueue\n");
+
+ //pthread_cond_init(&m_CanPushOrPopCondition, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPQueue::~NPT_PSPQueue()
++---------------------------------------------------------------------*/
+NPT_PSPQueue::~NPT_PSPQueue()
+{
+ // destroy resources
+ //pthread_cond_destroy(&m_CanPushOrPopCondition);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPQueue::Push
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPQueue::Push(NPT_QueueItem* item)
+{
+ // lock the mutex that protects the list
+ m_Items.Lock();
+
+ // check that we have not exceeded the max
+ //if (m_MaxItems) {
+ // while (m_Items.GetItemCount() >= m_MaxItems) {
+ // // wait until some items have been removed
+ // //NPT_Debug(":: NPT_PSPQueue::Push - waiting for queue to empty\n");
+ // pthread_cond_wait(&m_CanPushOrPopCondition, &m_Mutex);
+ // }
+ //}
+
+ // add the item to the list
+ m_Items.Add(item);
+
+ // if the list was previously empty, signal the condition
+ // to wake up the waiting thread
+ //if (m_Items.GetItemCount() == 1) {
+ // pthread_cond_signal(&m_CanPushOrPopCondition);
+ //}
+
+ // unlock the mutex
+ m_Items.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPQueue::Pop
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPQueue::Pop(NPT_QueueItem*& item, NPT_Boolean blocking)
+{
+ // lock the mutex that protects the list
+ m_Items.Lock();
+
+ NPT_Result result;
+ //if (blocking) {
+ // while ((result = m_Items.PopHead(item)) == NPT_ERROR_LIST_EMPTY) {
+ // // no item in the list, wait for one
+ // //NPT_Debug(":: NPT_PSPQueue::Pop - waiting for queue to fill up\n");
+ // pthread_cond_wait(&m_CanPushOrPopCondition, &m_Mutex);
+ // }
+ //} else {
+ result = m_Items.PopHead(item);
+ //}
+
+ // if the list was previously full, signal the condition
+ // to wake up the waiting thread
+ //if (m_MaxItems && (result == NPT_SUCCESS)) {
+ // if (m_Items.GetItemCount() == m_MaxItems-1) {
+ // pthread_cond_signal(&m_CanPushOrPopCondition);
+ // }
+ //}
+
+ // unlock the mutex
+ m_Items.Unlock();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_GenericQueue::CreateInstance
++---------------------------------------------------------------------*/
+NPT_GenericQueue*
+NPT_GenericQueue::CreateInstance(NPT_Cardinal max_items)
+{
+ NPT_Debug(":: NPT_GenericQueue::CreateInstance - queue max_items = %ld\n",
+ max_items);
+ return new NPT_PSPQueue(max_items);
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPSystem.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPSystem.cpp
new file mode 100644
index 0000000000..dfd868e2c4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPSystem.cpp
@@ -0,0 +1,142 @@
+/*****************************************************************
+|
+| Neptune - System :: Win32 Implementation
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <psptypes.h>
+#include <kernel.h>
+#include <rtcsvc.h>
+#include <pspnet/sys/time.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem
++---------------------------------------------------------------------*/
+class NPT_PSPSystem : public NPT_SystemInterface
+{
+public:
+ // methods
+ NPT_PSPSystem();
+ ~NPT_PSPSystem();
+ NPT_Result GetProcessId(NPT_Integer& id);
+ NPT_Result GetCurrentTimeStamp(NPT_TimeStamp& now);
+ NPT_Result Sleep(NPT_UInt32 microseconds);
+ NPT_Result SetRandomSeed(unsigned int seed);
+ NPT_Integer GetRandomInteger();
+
+private:
+ bool m_bRandomized;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::NPT_PSPSystem
++---------------------------------------------------------------------*/
+NPT_PSPSystem::NPT_PSPSystem()
+: m_bRandomized(false)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::~NPT_PSPSystem
++---------------------------------------------------------------------*/
+NPT_PSPSystem::~NPT_PSPSystem()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::GetProcessId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSystem::GetProcessId(NPT_Integer& id)
+{
+ //id = getpid();
+ id = 0;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSystem::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ // get the current time
+ ScePspDateTime clock;
+ sceRtcGetCurrentClock(&clock, 0);
+
+ // converts to POSIX time to get the number of seconds since 1970
+ time_t time;
+ sceRtcGetTime_t(&clock, &time);
+
+ // converts back to Psp date, it should be truncated
+ // we'll use that to get the number of nanoseconds
+ ScePspDateTime clock_trunk;
+ sceRtcSetTime_t(&clock_trunk, time);
+
+ //_ftime(&time_stamp);
+ now.m_Seconds = time;
+ now.m_NanoSeconds = (sceRtcGetMicrosecond(&clock)-sceRtcGetMicrosecond(&clock_trunk))*1000;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::Sleep
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSystem::Sleep(NPT_UInt32 microseconds)
+{
+ sceKernelDelayThread(microseconds);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSystem::SetRandomSeed
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSystem::SetRandomSeed(unsigned int seed)
+{
+ srand(seed);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::NPT_System
++---------------------------------------------------------------------*/
+NPT_Integer
+NPT_PSPSystem::GetRandomInteger()
+{
+ if (m_bRandomized == false) {
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ SetRandomSeed( now.m_Seconds );
+ m_bRandomized = true;
+ }
+ NPT_Integer val = 0;
+ val = rand();
+ return val;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::NPT_System
++---------------------------------------------------------------------*/
+NPT_System::NPT_System()
+{
+ m_Delegate = new NPT_PSPSystem();
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/PSP/NptPSPThreads.cpp b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPThreads.cpp
new file mode 100644
index 0000000000..5e0defea64
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/PSP/NptPSPThreads.cpp
@@ -0,0 +1,487 @@
+/*****************************************************************
+|
+| Neptune - Threads :: PSP Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Sylvain Rebaud
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptThreads.h"
+#include "NptSystem.h"
+#include "NptDebug.h"
+
+#include <stdio.h>
+
+#include <kernel.h>
+#include <psptypes.h>
+#include <psperror.h>
+
+/*----------------------------------------------------------------------
+| NPT_Mutex
++---------------------------------------------------------------------*/
+class NPT_PSPMutex : public NPT_MutexInterface
+{
+public:
+ // methods
+ NPT_PSPMutex();
+ ~NPT_PSPMutex();
+ NPT_Result Lock();
+ NPT_Result Unlock();
+
+private:
+ SceUID m_semaphore;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPMutex::NPT_PSPMutex
++---------------------------------------------------------------------*/
+NPT_PSPMutex::NPT_PSPMutex()
+{
+ char sema_name[256];
+ sprintf(sema_name, "sema_%d", (int)NPT_System::GetSystem()->GetRandomInteger());
+ m_semaphore = sceKernelCreateSema(sema_name, SCE_KERNEL_SA_THFIFO, 1, 1, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPMutex::~NPT_PSPMutex
++---------------------------------------------------------------------*/
+NPT_PSPMutex::~NPT_PSPMutex()
+{
+ sceKernelDeleteSema(m_semaphore);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPMutex::Lock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPMutex::Lock()
+{
+ sceKernelWaitSema(m_semaphore, 1, NULL);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPMutex::Unlock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPMutex::Unlock()
+{
+ sceKernelSignalSema(m_semaphore, 1);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Mutex::NPT_Mutex
++---------------------------------------------------------------------*/
+NPT_Mutex::NPT_Mutex()
+{
+ m_Delegate = new NPT_PSPMutex();
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable
++---------------------------------------------------------------------*/
+class NPT_PSPSharedVariable : public NPT_SharedVariableInterface
+{
+public:
+ // methods
+ NPT_PSPSharedVariable(NPT_Integer value);
+ ~NPT_PSPSharedVariable();
+ NPT_Result SetValue(NPT_Integer value);
+ NPT_Result GetValue(NPT_Integer& value);
+ NPT_Result WaitUntilEquals(NPT_Integer value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ NPT_Result WaitWhileEquals(NPT_Integer value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+private:
+ // members
+ volatile NPT_Integer m_Value;
+ NPT_Mutex m_Lock;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::NPT_PSPSharedVariable
++---------------------------------------------------------------------*/
+NPT_PSPSharedVariable::NPT_PSPSharedVariable(NPT_Integer value) :
+m_Value(value)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::~NPT_PSPSharedVariable
++---------------------------------------------------------------------*/
+NPT_PSPSharedVariable::~NPT_PSPSharedVariable()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::SetValue
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSharedVariable::SetValue(NPT_Integer value)
+{
+ m_Lock.Lock();
+ m_Value = value;
+ m_Lock.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::GetValue
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSharedVariable::GetValue(NPT_Integer& value)
+{
+ // reading an integer should be atomic on most platforms
+ value = m_Value;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::WaitUntilEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSharedVariable::WaitUntilEquals(NPT_Integer value, NPT_Timeout timeout)
+{
+ NPT_Timeout sleep = 0;
+ do {
+ m_Lock.Lock();
+ if (m_Value == value) {
+ break;
+ }
+ m_Lock.Unlock();
+ NPT_System::GetSystem()->Sleep(50000);
+ sleep += 50000;
+ if (timeout != NPT_TIMEOUT_INFINITE && sleep > timeout) {
+ return NPT_FAILURE;
+ }
+ } while (1);
+
+ m_Lock.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPSharedVariable::WaitWhileEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPSharedVariable::WaitWhileEquals(NPT_Integer value, NPT_Timeout timeout)
+{
+ NPT_Timeout sleep = 0;
+ do {
+ m_Lock.Lock();
+ if (m_Value != value) {
+ break;
+ }
+ m_Lock.Unlock();
+ NPT_System::GetSystem()->Sleep(50000);
+ sleep += 50000;
+ if (timeout != NPT_TIMEOUT_INFINITE && sleep > timeout) {
+ return NPT_FAILURE;
+ }
+ } while (1);
+
+ m_Lock.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SharedVariable::NPT_SharedVariable
++---------------------------------------------------------------------*/
+NPT_SharedVariable::NPT_SharedVariable(NPT_Integer value)
+{
+ m_Delegate = new NPT_PSPSharedVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable
++---------------------------------------------------------------------*/
+class NPT_PSPAtomicVariable : public NPT_AtomicVariableInterface
+{
+public:
+ // methods
+ NPT_PSPAtomicVariable(NPT_Integer value);
+ ~NPT_PSPAtomicVariable();
+ NPT_Integer Increment();
+ NPT_Integer Decrement();
+ NPT_Integer GetValue();
+ void SetValue(NPT_Integer value);
+
+private:
+ // members
+ volatile NPT_Integer m_Value;
+ NPT_Mutex m_Mutex;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::NPT_PSPAtomicVariable
++---------------------------------------------------------------------*/
+NPT_PSPAtomicVariable::NPT_PSPAtomicVariable(NPT_Integer value) :
+m_Value(value)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::~NPT_PSPAtomicVariable
++---------------------------------------------------------------------*/
+NPT_PSPAtomicVariable::~NPT_PSPAtomicVariable()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::Increment
++---------------------------------------------------------------------*/
+NPT_Integer
+NPT_PSPAtomicVariable::Increment()
+{
+ NPT_Integer value;
+
+ m_Mutex.Lock();
+ value = ++m_Value;
+ m_Mutex.Unlock();
+
+ return value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::Decrement
++---------------------------------------------------------------------*/
+NPT_Integer
+NPT_PSPAtomicVariable::Decrement()
+{
+ NPT_Integer value;
+
+ m_Mutex.Lock();
+ value = --m_Value;
+ m_Mutex.Unlock();
+
+ return value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::GetValue
++---------------------------------------------------------------------*/
+NPT_Integer
+NPT_PSPAtomicVariable::GetValue()
+{
+ return m_Value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPAtomicVariable::SetValue
++---------------------------------------------------------------------*/
+void
+NPT_PSPAtomicVariable::SetValue(NPT_Integer value)
+{
+ m_Mutex.Lock();
+ m_Value = value;
+ m_Mutex.Unlock();
+}
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariable::NPT_AtomicVariable
++---------------------------------------------------------------------*/
+NPT_AtomicVariable::NPT_AtomicVariable(NPT_Integer value)
+{
+ m_Delegate = new NPT_PSPAtomicVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread
++---------------------------------------------------------------------*/
+class NPT_PSPThread : public NPT_ThreadInterface
+{
+public:
+ // methods
+ NPT_PSPThread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached);
+ ~NPT_PSPThread();
+ NPT_Result Start();
+ NPT_Result Wait();
+ NPT_Result Terminate();
+
+private:
+ // methods
+ static int EntryPoint(SceSize argument_size, void* argument);
+
+ // NPT_Runnable methods
+ void Run();
+
+ // members
+ NPT_Thread* m_Delegator;
+ NPT_Runnable& m_Target;
+ bool m_Detached;
+ SceUID m_ThreadId;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::NPT_PSPThread
++---------------------------------------------------------------------*/
+NPT_PSPThread::NPT_PSPThread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached) :
+ m_Delegator(delegator),
+ m_Target(target),
+ m_Detached(detached),
+ m_ThreadId(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::~NPT_PSPThread
++---------------------------------------------------------------------*/
+NPT_PSPThread::~NPT_PSPThread()
+{
+ if (!m_Detached) {
+ // we're not detached, and not in the Run() method, so we need to
+ // wait until the thread is done
+ Wait();
+ }
+
+ m_ThreadId = 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::Terminate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPThread::Terminate()
+{
+ // end the thread
+ sceKernelExitDeleteThread(0);
+
+ // if we're detached, we need to delete ourselves
+ if (m_Detached) {
+ delete m_Delegator;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::EntryPoint
++---------------------------------------------------------------------*/
+int
+NPT_PSPThread::EntryPoint(SceSize /* argument_size */, void* argument)
+{
+ NPT_PSPThread** pthread = (NPT_PSPThread**)argument;
+ NPT_PSPThread* thread = *pthread;
+
+ //NPT_PSPThread* thread = reinterpret_cast<NPT_PSPThread*>(*argument);
+
+ NPT_Debug(NPT_LOG_LEVEL_1, ":: NPT_PSPThread::EntryPoint - in =======================\n");
+
+ // run the thread
+ thread->Run();
+
+ NPT_Debug(NPT_LOG_LEVEL_1, ":: NPT_PSPThread::EntryPoint - out ======================\n");
+
+ // we're done with the thread object
+ thread->Terminate();
+
+ // done
+ return 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::Start
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPThread::Start()
+{
+ if (m_ThreadId > 0) {
+ NPT_Debug(NPT_LOG_LEVEL_1, ":: NPT_PSPThread::Start already started !\n");
+ return NPT_FAILURE;
+ }
+
+ NPT_Debug(NPT_LOG_LEVEL_1, ":: NPT_PSPThread::Start - creating thread\n");
+ char thread_name[32];
+ sprintf(thread_name, "thread_%d", (int)NPT_System::GetSystem()->GetRandomInteger());
+
+ // create the native thread
+ m_ThreadId = (SceUID)
+ sceKernelCreateThread(
+ thread_name,
+ EntryPoint,
+ SCE_KERNEL_USER_LOWEST_PRIORITY,
+ 1024 * 16,
+ 0,
+ NULL);
+ if (m_ThreadId <= 0) {
+ // failed
+ return NPT_FAILURE;
+ }
+
+ NPT_PSPThread* thread = this;
+ int ret = sceKernelStartThread(
+ m_ThreadId,
+ sizeof(thread),
+ &thread);
+ if (ret != SCE_KERNEL_ERROR_OK) {
+ return NPT_FAILURE;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::Run
++---------------------------------------------------------------------*/
+void
+NPT_PSPThread::Run()
+{
+ m_Target.Run();
+}
+
+/*----------------------------------------------------------------------
+| NPT_PSPThread::Wait
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PSPThread::Wait()
+{
+ // check that we're not detached
+ if (m_ThreadId <= 0 || m_Detached) {
+ return NPT_FAILURE;
+ }
+
+ // wait for the thread to finish
+ NPT_Debug(NPT_LOG_LEVEL_1, ":: NPT_PSPThread::Wait - joining thread id %d\n", m_ThreadId);
+ int result = sceKernelWaitThreadEnd(m_ThreadId, NULL);
+ if (result < 0) {
+ return NPT_FAILURE;
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(bool detached)
+{
+ m_Delegate = new NPT_PSPThread(this, *this, detached);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(NPT_Runnable& target, bool detached)
+{
+ m_Delegate = new NPT_PSPThread(this, target, detached);
+}
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixDynamicLibraries.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixDynamicLibraries.cpp
new file mode 100644
index 0000000000..0a9085967d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixDynamicLibraries.cpp
@@ -0,0 +1,108 @@
+/*****************************************************************
+|
+| Neptune - Dynamic Libraries :: Posix Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptLogging.h"
+#include "NptDynamicLibraries.h"
+
+#include <dlfcn.h>
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.posix.dynamic-libraries")
+
+/*----------------------------------------------------------------------
+| NPT_PosixDynamicLibrary
++---------------------------------------------------------------------*/
+class NPT_PosixDynamicLibrary : public NPT_DynamicLibraryInterface
+{
+public:
+ // constructor and destructor
+ NPT_PosixDynamicLibrary(void* library, const char* name) :
+ m_Library(library), m_Name(name) {}
+
+ // NPT_DynamicLibraryInterface methods
+ virtual NPT_Result FindSymbol(const char* name, void*& symbol);
+ virtual NPT_Result Unload();
+
+private:
+ // members
+ void* m_Library;
+ NPT_String m_Name;
+};
+
+/*----------------------------------------------------------------------
+| NPT_DynamicLibrary::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DynamicLibrary::Load(const char* name, NPT_Flags flags, NPT_DynamicLibrary*& library)
+{
+ if (name == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // default return value
+ library = NULL;
+
+ // compute the mode
+ int mode = 0;
+ if (flags & NPT_DYANMIC_LIBRARY_LOAD_FLAG_NOW) {
+ mode |= RTLD_NOW;
+ } else {
+ mode |= RTLD_LAZY;
+ }
+
+ // load the lib
+ NPT_LOG_FINE_3("loading library %s, flags=%x, mode=%x", name, flags, mode);
+ void* handle = dlopen(name, mode);
+ if (handle == NULL) {
+#if defined(NPT_CONFIG_ENABLE_LOGGING)
+ const char* error = dlerror();
+ NPT_LOG_FINE_1("library cannot be loaded (%s)", error?error:"");
+#endif
+ return NPT_FAILURE;
+ }
+
+ // instantiate the object
+ NPT_LOG_FINE_1("library %s loaded", name);
+ library = new NPT_DynamicLibrary(new NPT_PosixDynamicLibrary(handle, name));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixDynamicLibrary::FindSymbol
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixDynamicLibrary::FindSymbol(const char* name, void*& symbol)
+{
+ if (name == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ symbol = NULL;
+ if (m_Library == NULL) return NPT_ERROR_NO_SUCH_ITEM;
+
+ NPT_LOG_FINE_1("finding symbol %s", name);
+ symbol = dlsym(m_Library, name);
+ return symbol?NPT_SUCCESS:NPT_ERROR_NO_SUCH_ITEM;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixDynamicLibrary::Unload
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixDynamicLibrary::Unload()
+{
+ NPT_LOG_FINE_1("unloading library %s", (const char*)m_Name);
+ int result = dlclose(m_Library);
+ if (result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return NPT_FAILURE;
+ }
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixFile.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixFile.cpp
new file mode 100644
index 0000000000..138d3ca964
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixFile.cpp
@@ -0,0 +1,260 @@
+/*****************************************************************
+|
+| Neptune - File :: Posix Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE64
+#define _FILE_OFFSET_BITS 64
+
+#include <sys/stat.h>
+
+#include <errno.h>
+
+#if defined(_WIN32)
+#include <direct.h>
+#include <stdlib.h>
+#include <stdio.h>
+#else
+#include <unistd.h>
+#include <dirent.h>
+#endif
+
+#include "NptLogging.h"
+#include "NptFile.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+//NPT_SET_LOCAL_LOGGER("neptune.posix.file")
+
+/*----------------------------------------------------------------------
+| Win32 adaptation
++---------------------------------------------------------------------*/
+#if defined(_WIN32) || defined(_XBOX)
+extern int NPT_stat_utf8(const char* path, NPT_stat_struct* info);
+extern char* NPT_getcwd_utf8(char* path, unsigned int path_size);
+#define getcwd NPT_getcwd_utf8
+#define S_ISDIR(_m) (((_m)&_S_IFMT) == _S_IFDIR)
+#define S_ISREG(_m) (((_m)&_S_IFMT) == _S_IFREG)
+#define S_IWUSR _S_IWRITE
+#endif
+
+/*----------------------------------------------------------------------
+| MapErrno
++---------------------------------------------------------------------*/
+static NPT_Result
+MapErrno(int err) {
+ switch (err) {
+ case EACCES: return NPT_ERROR_PERMISSION_DENIED;
+ case EPERM: return NPT_ERROR_PERMISSION_DENIED;
+ case ENOENT: return NPT_ERROR_NO_SUCH_FILE;
+ case ENAMETOOLONG: return NPT_ERROR_INVALID_PARAMETERS;
+ case EBUSY: return NPT_ERROR_FILE_BUSY;
+ case EROFS: return NPT_ERROR_FILE_NOT_WRITABLE;
+ case ENOTDIR: return NPT_ERROR_FILE_NOT_DIRECTORY;
+ case EEXIST: return NPT_ERROR_FILE_ALREADY_EXISTS;
+ case ENOSPC: return NPT_ERROR_FILE_NOT_ENOUGH_SPACE;
+ case ENOTEMPTY: return NPT_ERROR_DIRECTORY_NOT_EMPTY;
+ default: return NPT_ERROR_ERRNO(err);
+ }
+}
+
+#if !defined(_WIN32)
+/*----------------------------------------------------------------------
+| NPT_FilePath::Separator
++---------------------------------------------------------------------*/
+const NPT_String NPT_FilePath::Separator("/");
+
+/*----------------------------------------------------------------------
+| NPT_File::GetRoots
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetRoots(NPT_List<NPT_String>& roots)
+{
+ roots.Clear();
+ roots.Add("/");
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::CreateDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::CreateDir(const char* path)
+{
+ int result;
+
+ result = mkdir(path, 0755);
+ if (result != 0) {
+ return MapErrno(errno);
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::RemoveFile
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::RemoveFile(const char* path)
+{
+ int result = unlink(path);
+ if (result != 0) return MapErrno(errno);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::RemoveDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::RemoveDir(const char* path)
+{
+ int result = rmdir(path);
+ if (result != 0) return MapErrno(errno);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Rename
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Rename(const char* from_path, const char* to_path)
+{
+ int result = rename(from_path, to_path);
+ if (result != 0) return MapErrno(errno);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::ListDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::ListDir(const char* path,
+ NPT_List<NPT_String>& entries,
+ NPT_Ordinal start /* = 0 */,
+ NPT_Cardinal max /* = 0 */)
+{
+ // default return value
+ entries.Clear();
+
+ // check the arguments
+ if (path == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // list the entries
+ DIR *directory = opendir(path);
+ if (directory == NULL) return NPT_ERROR_OUT_OF_MEMORY;
+
+ NPT_Cardinal count = 0;
+ for (;;) {
+ struct dirent* entry_pointer = NULL;
+#if defined(NPT_CONFIG_HAVE_READDIR_R)
+ struct dirent entry;
+ int result = readdir_r(directory, &entry, &entry_pointer);
+ if (result != 0 || entry_pointer == NULL) break;
+#else
+ entry_pointer = readdir(directory);
+ if (entry_pointer == NULL) break;
+#endif
+ // ignore odd names
+ if (entry_pointer->d_name[0] == '\0') continue;
+
+ // ignore . and ..
+ if (entry_pointer->d_name[0] == '.' &&
+ entry_pointer->d_name[1] == '\0') {
+ continue;
+ }
+ if (entry_pointer->d_name[0] == '.' &&
+ entry_pointer->d_name[1] == '.' &&
+ entry_pointer->d_name[2] == '\0') {
+ continue;
+ }
+
+ // continue if we still have some items to skip
+ if (start > 0) {
+ --start;
+ continue;
+ }
+ entries.Add(NPT_String(entry_pointer->d_name));
+
+ // stop when we have reached the maximum requested
+ if (max && ++count == max) break;
+ }
+
+ closedir(directory);
+
+ return NPT_SUCCESS;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_File::GetWorkingDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetWorkingDir(NPT_String& path)
+{
+ char buffer[1024+1];
+ char* dir = getcwd(buffer, 1024+1);
+ if (dir == NULL) return MapErrno(errno);
+ path = dir;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetInfo(const char* path, NPT_FileInfo* info)
+{
+ // default value
+ if (info) NPT_SetMemory(info, 0, sizeof(*info));
+
+#if defined(_WIN32) || defined(_XBOX)
+ // On Windows, stat will fail if a dir ends with a separator
+ NPT_String _path = path;
+ _path.TrimRight("\\/");
+ // keep a separator at the end for drive names such as C:<backslash>
+ if (NPT_StringLength(path) == 2 && path[1] == ':') {
+ _path += NPT_FilePath::Separator;
+ }
+#else
+#define _path path
+#endif
+
+ // get the file info
+ NPT_stat_struct stat_buffer;
+ int result = NPT_stat(_path, &stat_buffer);
+ if (result != 0) return MapErrno(errno);
+
+ // setup the returned fields
+ if (info) {
+ info->m_Size = stat_buffer.st_size;
+ if (S_ISREG(stat_buffer.st_mode)) {
+ info->m_Type = NPT_FileInfo::FILE_TYPE_REGULAR;
+ } else if (S_ISDIR(stat_buffer.st_mode)) {
+ info->m_Type = NPT_FileInfo::FILE_TYPE_DIRECTORY;
+ } else {
+ info->m_Type = NPT_FileInfo::FILE_TYPE_OTHER;
+ }
+ info->m_AttributesMask &= NPT_FILE_ATTRIBUTE_READ_ONLY;
+ if ((stat_buffer.st_mode & S_IWUSR) == 0) {
+ info->m_Attributes &= NPT_FILE_ATTRIBUTE_READ_ONLY;
+ }
+ info->m_Created = (unsigned long)stat_buffer.st_ctime;
+ info->m_Modified = (unsigned long)stat_buffer.st_mtime;
+ }
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixNetwork.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixNetwork.cpp
new file mode 100644
index 0000000000..cf0b29f99f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixNetwork.cpp
@@ -0,0 +1,35 @@
+/*****************************************************************
+|
+| Neptune - Network :: POSIX Implementation
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+
+#if defined(NPT_CONFIG_HAVE_NETCONFIG_H)
+#include <netconfig.h>
+
+#include "NptTypes.h"
+#include "NptStreams.h"
+#include "NptThreads.h"
+#include "NptNetwork.h"
+#include "NptUtils.h"
+#include "NptConstants.h"
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ interfaces.Clear();
+ return NPT_SUCCESS;
+}
+
+#endif
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixQueue.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixQueue.cpp
new file mode 100644
index 0000000000..d450d15263
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixQueue.cpp
@@ -0,0 +1,291 @@
+/*****************************************************************
+|
+| Neptune - Queue :: Posix Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(__SYMBIAN32__)
+#include <stdio.h>
+#endif
+#include <pthread.h>
+#include <time.h>
+#include <sys/time.h>
+#include <errno.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptQueue.h"
+#include "NptThreads.h"
+#include "NptList.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.queue.posix")
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue
++---------------------------------------------------------------------*/
+class NPT_PosixQueue : public NPT_GenericQueue
+{
+public:
+ // methods
+ NPT_PosixQueue(NPT_Cardinal max_items);
+ ~NPT_PosixQueue();
+ NPT_Result Push(NPT_QueueItem* item, NPT_Timeout timeout);
+ NPT_Result Pop(NPT_QueueItem*& item, NPT_Timeout timeout);
+ NPT_Result Peek(NPT_QueueItem*& item, NPT_Timeout timeout);
+
+private:
+ // members
+ NPT_Cardinal m_MaxItems;
+ pthread_mutex_t m_Mutex;
+ pthread_cond_t m_CanPushCondition;
+ pthread_cond_t m_CanPopCondition;
+ NPT_Cardinal m_PushersWaitingCount;
+ NPT_Cardinal m_PoppersWaitingCount;
+ NPT_List<NPT_QueueItem*> m_Items;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue::NPT_PosixQueue
++---------------------------------------------------------------------*/
+NPT_PosixQueue::NPT_PosixQueue(NPT_Cardinal max_items) :
+ m_MaxItems(max_items),
+ m_PushersWaitingCount(0),
+ m_PoppersWaitingCount(0)
+{
+ NPT_LOG_FINER("NPT_PosixQueue::NPT_PosixQueue");
+
+ pthread_mutex_init(&m_Mutex, NULL);
+ pthread_cond_init(&m_CanPushCondition, NULL);
+ pthread_cond_init(&m_CanPopCondition, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue::~NPT_PosixQueue()
++---------------------------------------------------------------------*/
+NPT_PosixQueue::~NPT_PosixQueue()
+{
+ // destroy resources
+ pthread_cond_destroy(&m_CanPushCondition);
+ pthread_cond_destroy(&m_CanPopCondition);
+ pthread_mutex_destroy(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue::Push
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixQueue::Push(NPT_QueueItem* item, NPT_Timeout timeout)
+{
+ struct timespec timed;
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ // get current time from system
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ now.tv_usec += timeout * 1000;
+ if (now.tv_usec >= 1000000) {
+ now.tv_sec += now.tv_usec / 1000000;
+ now.tv_usec = now.tv_usec % 1000000;
+ }
+
+ // setup timeout
+ timed.tv_sec = now.tv_sec;
+ timed.tv_nsec = now.tv_usec * 1000;
+ }
+
+ // lock the mutex that protects the list
+ if (pthread_mutex_lock(&m_Mutex)) {
+ return NPT_FAILURE;
+ }
+
+ NPT_Result result = NPT_SUCCESS;
+ // check that we have not exceeded the max
+ if (m_MaxItems) {
+ while (m_Items.GetItemCount() >= m_MaxItems) {
+ // wait until we can push
+ ++m_PushersWaitingCount;
+ if (timeout == NPT_TIMEOUT_INFINITE) {
+ pthread_cond_wait(&m_CanPushCondition, &m_Mutex);
+ --m_PushersWaitingCount;
+ } else {
+ int wait_res = pthread_cond_timedwait(&m_CanPushCondition,
+ &m_Mutex,
+ &timed);
+ --m_PushersWaitingCount;
+ if (wait_res == ETIMEDOUT) {
+ result = NPT_ERROR_TIMEOUT;
+ break;
+ }
+ }
+ }
+ }
+
+ // add the item to the list
+ if (result == NPT_SUCCESS) {
+ m_Items.Add(item);
+
+ // wake up any thread that may be waiting to pop
+ if (m_PoppersWaitingCount) {
+ pthread_cond_signal(&m_CanPopCondition);
+ }
+ }
+
+ // unlock the mutex
+ pthread_mutex_unlock(&m_Mutex);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue::Pop
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixQueue::Pop(NPT_QueueItem*& item, NPT_Timeout timeout)
+{
+ struct timespec timed;
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ // get current time from system
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ now.tv_usec += timeout * 1000;
+ if (now.tv_usec >= 1000000) {
+ now.tv_sec += now.tv_usec / 1000000;
+ now.tv_usec = now.tv_usec % 1000000;
+ }
+
+ // setup timeout
+ timed.tv_sec = now.tv_sec;
+ timed.tv_nsec = now.tv_usec * 1000;
+ }
+
+ // lock the mutex that protects the list
+ if (pthread_mutex_lock(&m_Mutex)) {
+ return NPT_FAILURE;
+ }
+
+ NPT_Result result;
+ if (timeout) {
+ while ((result = m_Items.PopHead(item)) == NPT_ERROR_LIST_EMPTY) {
+ // no item in the list, wait for one
+ ++m_PoppersWaitingCount;
+ if (timeout == NPT_TIMEOUT_INFINITE) {
+ pthread_cond_wait(&m_CanPopCondition, &m_Mutex);
+ --m_PoppersWaitingCount;
+ } else {
+ int wait_res = pthread_cond_timedwait(&m_CanPopCondition,
+ &m_Mutex,
+ &timed);
+ --m_PoppersWaitingCount;
+ if (wait_res == ETIMEDOUT) {
+ result = NPT_ERROR_TIMEOUT;
+ break;
+ }
+ }
+ }
+ } else {
+ result = m_Items.PopHead(item);
+ }
+
+ // wake up any thread that my be waiting to push
+ if (m_MaxItems && (result == NPT_SUCCESS) && m_PushersWaitingCount) {
+ pthread_cond_signal(&m_CanPushCondition);
+ }
+
+ // unlock the mutex
+ pthread_mutex_unlock(&m_Mutex);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixQueue::Peek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixQueue::Peek(NPT_QueueItem*& item, NPT_Timeout timeout)
+{
+ struct timespec timed;
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ // get current time from system
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ now.tv_usec += timeout * 1000;
+ if (now.tv_usec >= 1000000) {
+ now.tv_sec += now.tv_usec / 1000000;
+ now.tv_usec = now.tv_usec % 1000000;
+ }
+
+ // setup timeout
+ timed.tv_sec = now.tv_sec;
+ timed.tv_nsec = now.tv_usec * 1000;
+ }
+
+ // lock the mutex that protects the list
+ if (pthread_mutex_lock(&m_Mutex)) {
+ return NPT_FAILURE;
+ }
+
+ NPT_Result result = NPT_SUCCESS;
+ NPT_List<NPT_QueueItem*>::Iterator head = m_Items.GetFirstItem();
+ if (timeout) {
+ while (!head) {
+ // no item in the list, wait for one
+ ++m_PoppersWaitingCount;
+ if (timeout == NPT_TIMEOUT_INFINITE) {
+ pthread_cond_wait(&m_CanPopCondition, &m_Mutex);
+ --m_PoppersWaitingCount;
+ } else {
+ int wait_res = pthread_cond_timedwait(&m_CanPopCondition,
+ &m_Mutex,
+ &timed);
+ --m_PoppersWaitingCount;
+ if (wait_res == ETIMEDOUT) {
+ result = NPT_ERROR_TIMEOUT;
+ break;
+ }
+ }
+
+ head = m_Items.GetFirstItem();
+ }
+ } else {
+ if (!head) result = NPT_ERROR_LIST_EMPTY;
+ }
+
+ item = head?*head:NULL;
+
+ // unlock the mutex
+ pthread_mutex_unlock(&m_Mutex);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_GenericQueue::CreateInstance
++---------------------------------------------------------------------*/
+NPT_GenericQueue*
+NPT_GenericQueue::CreateInstance(NPT_Cardinal max_items)
+{
+ NPT_LOG_FINER_1("NPT_GenericQueue::CreateInstance - queue max_items = %ld", max_items);
+ return new NPT_PosixQueue(max_items);
+}
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixSystem.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixSystem.cpp
new file mode 100644
index 0000000000..33e914ab0c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixSystem.cpp
@@ -0,0 +1,181 @@
+/*****************************************************************
+|
+| Neptune - System :: Posix Implementation
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_PosixSystem
++---------------------------------------------------------------------*/
+class NPT_PosixSystem
+{
+public:
+ // class variables
+ static NPT_PosixSystem System;
+
+ // methods
+ NPT_PosixSystem();
+ ~NPT_PosixSystem();
+
+ // members
+ pthread_mutex_t m_SleepMutex;
+ pthread_cond_t m_SleepCondition;
+};
+NPT_PosixSystem NPT_PosixSystem::System;
+
+/*----------------------------------------------------------------------
+| NPT_PosixSystem::NPT_PosixSystem
++---------------------------------------------------------------------*/
+NPT_PosixSystem::NPT_PosixSystem()
+{
+ pthread_mutex_init(&m_SleepMutex, NULL);
+ pthread_cond_init(&m_SleepCondition, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSystem::~NPT_PosixSystem
++---------------------------------------------------------------------*/
+NPT_PosixSystem::~NPT_PosixSystem()
+{
+ pthread_cond_destroy(&m_SleepCondition);
+ pthread_mutex_destroy(&m_SleepMutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetProcessId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetProcessId(NPT_UInt32& id)
+{
+ id = getpid();
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ struct timeval now_tv;
+
+ // get current time from system
+ if (gettimeofday(&now_tv, NULL)) {
+ now.m_Seconds = 0;
+ now.m_NanoSeconds = 0;
+ return NPT_FAILURE;
+ }
+
+ // convert format
+ now.m_Seconds = now_tv.tv_sec;
+ now.m_NanoSeconds = now_tv.tv_usec * 1000;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::Sleep
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::Sleep(const NPT_TimeInterval& duration)
+{
+ struct timespec time_req;
+ struct timespec time_rem;
+ int result;
+
+ // setup the time value
+ time_req.tv_sec = duration.m_Seconds;
+ time_req.tv_nsec = duration.m_NanoSeconds;
+
+ // sleep
+ do {
+ result = nanosleep(&time_req, &time_rem);
+ time_req = time_rem;
+ } while (result == -1 && errno == EINTR);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SleepUntil
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SleepUntil(const NPT_TimeStamp& when)
+{
+ struct timespec timeout;
+ struct timeval now;
+ int result;
+
+ // get current time from system
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ // setup timeout
+ timeout.tv_sec = now.tv_sec + when.m_Seconds;
+ timeout.tv_nsec = now.tv_usec * 1000 + when.m_NanoSeconds;
+
+ if (timeout.tv_nsec >= 1000000000) {
+ timeout.tv_sec += timeout.tv_nsec / 1000000000;
+ timeout.tv_nsec %= 1000000000;
+ }
+
+ // sleep
+ do {
+ result = pthread_cond_timedwait(&NPT_PosixSystem::System.m_SleepCondition,
+ &NPT_PosixSystem::System.m_SleepMutex,
+ &timeout);
+ if (result == ETIMEDOUT) {
+ return NPT_SUCCESS;
+ }
+ } while (result == EINTR);
+
+ return NPT_FAILURE;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SetRandomSeed
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SetRandomSeed(unsigned int seed)
+{
+ srand(seed);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetRandomInteger
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_System::GetRandomInteger()
+{
+ static bool seeded = false;
+ if (seeded == false) {
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ SetRandomSeed(now.m_NanoSeconds);
+ seeded = true;
+ }
+
+ return rand();
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptPosixThreads.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixThreads.cpp
new file mode 100644
index 0000000000..097a04d1db
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptPosixThreads.cpp
@@ -0,0 +1,578 @@
+/*****************************************************************
+|
+| Neptune - Threads :: Posix Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(__SYMBIAN32__)
+#include <stdio.h>
+#endif
+#include <pthread.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/time.h>
+#include <errno.h>
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptThreads.h"
+#include "NptLogging.h"
+#include "NptTime.h"
+#include "NptSystem.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.threads.posix")
+
+/*----------------------------------------------------------------------
+| NPT_PosixMutex
++---------------------------------------------------------------------*/
+class NPT_PosixMutex : public NPT_MutexInterface
+{
+public:
+ // methods
+ NPT_PosixMutex();
+ virtual ~NPT_PosixMutex();
+
+ // NPT_Mutex methods
+ virtual NPT_Result Lock();
+ virtual NPT_Result Unlock();
+
+private:
+ // members
+ pthread_mutex_t m_Mutex;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PosixMutex::NPT_PosixMutex
++---------------------------------------------------------------------*/
+NPT_PosixMutex::NPT_PosixMutex()
+{
+ pthread_mutex_init(&m_Mutex, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixMutex::~NPT_PosixMutex
++---------------------------------------------------------------------*/
+NPT_PosixMutex::~NPT_PosixMutex()
+{
+ pthread_mutex_destroy(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixMutex::Lock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixMutex::Lock()
+{
+ pthread_mutex_lock(&m_Mutex);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixMutex::Unlock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixMutex::Unlock()
+{
+ pthread_mutex_unlock(&m_Mutex);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Mutex::NPT_Mutex
++---------------------------------------------------------------------*/
+NPT_Mutex::NPT_Mutex()
+{
+ m_Delegate = new NPT_PosixMutex();
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable
++---------------------------------------------------------------------*/
+class NPT_PosixSharedVariable : public NPT_SharedVariableInterface
+{
+public:
+ // methods
+ NPT_PosixSharedVariable(int value);
+ ~NPT_PosixSharedVariable();
+ void SetValue(int value);
+ int GetValue();
+ NPT_Result WaitUntilEquals(int value, NPT_Timeout timeout);
+ NPT_Result WaitWhileEquals(int value, NPT_Timeout timeout);
+
+ private:
+ // members
+ volatile int m_Value;
+ pthread_mutex_t m_Mutex;
+ pthread_cond_t m_Condition;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::NPT_PosixSharedVariable
++---------------------------------------------------------------------*/
+NPT_PosixSharedVariable::NPT_PosixSharedVariable(int value) :
+ m_Value(value)
+{
+ pthread_mutex_init(&m_Mutex, NULL);
+ pthread_cond_init(&m_Condition, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::~NPT_PosixSharedVariable
++---------------------------------------------------------------------*/
+NPT_PosixSharedVariable::~NPT_PosixSharedVariable()
+{
+ pthread_cond_destroy(&m_Condition);
+ pthread_mutex_destroy(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::SetValue
++---------------------------------------------------------------------*/
+void
+NPT_PosixSharedVariable::SetValue(int value)
+{
+ pthread_mutex_lock(&m_Mutex);
+ m_Value = value;
+ pthread_cond_broadcast(&m_Condition);
+ pthread_mutex_unlock(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::GetValue
++---------------------------------------------------------------------*/
+int
+NPT_PosixSharedVariable::GetValue()
+{
+ // we assume that int read/write are atomic on the platform
+ return m_Value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::WaitUntilEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixSharedVariable::WaitUntilEquals(int value, NPT_Timeout timeout)
+{
+ NPT_Result result = NPT_SUCCESS;
+ struct timespec timed;
+
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ // get current time from system
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ now.tv_usec += timeout * 1000;
+ if (now.tv_usec >= 1000000) {
+ now.tv_sec += now.tv_usec / 1000000;
+ now.tv_usec = now.tv_usec % 1000000;
+ }
+
+ // setup timeout
+ timed.tv_sec = now.tv_sec;
+ timed.tv_nsec = now.tv_usec * 1000;
+ }
+
+ pthread_mutex_lock(&m_Mutex);
+ while (value != m_Value) {
+ if (timeout == NPT_TIMEOUT_INFINITE) {
+ pthread_cond_wait(&m_Condition, &m_Mutex);
+ } else {
+ int wait_res = pthread_cond_timedwait(&m_Condition, &m_Mutex, &timed);
+ if (wait_res == ETIMEDOUT) {
+ result = NPT_ERROR_TIMEOUT;
+ break;
+ }
+ }
+ }
+ pthread_mutex_unlock(&m_Mutex);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixSharedVariable::WaitWhileEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixSharedVariable::WaitWhileEquals(int value, NPT_Timeout timeout)
+{
+ NPT_Result result = NPT_SUCCESS;
+ struct timespec timed;
+
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ // get current time from system
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) {
+ return NPT_FAILURE;
+ }
+
+ now.tv_usec += timeout * 1000;
+ if (now.tv_usec >= 1000000) {
+ now.tv_sec += now.tv_usec / 1000000;
+ now.tv_usec = now.tv_usec % 1000000;
+ }
+
+ // setup timeout
+ timed.tv_sec = now.tv_sec;
+ timed.tv_nsec = now.tv_usec * 1000;
+ }
+
+ pthread_mutex_lock(&m_Mutex);
+ while (value == m_Value) {
+ if (timeout == NPT_TIMEOUT_INFINITE) {
+ pthread_cond_wait(&m_Condition, &m_Mutex);
+ } else {
+ int wait_res = pthread_cond_timedwait(&m_Condition, &m_Mutex, &timed);
+ if (wait_res == ETIMEDOUT) {
+ result = NPT_ERROR_TIMEOUT;
+ break;
+ }
+ }
+ }
+ pthread_mutex_unlock(&m_Mutex);
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SharedVariable::NPT_SharedVariable
++---------------------------------------------------------------------*/
+NPT_SharedVariable::NPT_SharedVariable(int value)
+{
+ m_Delegate = new NPT_PosixSharedVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable
++---------------------------------------------------------------------*/
+class NPT_PosixAtomicVariable : public NPT_AtomicVariableInterface
+{
+ public:
+ // methods
+ NPT_PosixAtomicVariable(int value);
+ ~NPT_PosixAtomicVariable();
+ int Increment();
+ int Decrement();
+ int GetValue();
+ void SetValue(int value);
+
+ private:
+ // members
+ volatile int m_Value;
+ pthread_mutex_t m_Mutex;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::NPT_PosixAtomicVariable
++---------------------------------------------------------------------*/
+NPT_PosixAtomicVariable::NPT_PosixAtomicVariable(int value) :
+ m_Value(value)
+{
+ pthread_mutex_init(&m_Mutex, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::~NPT_PosixAtomicVariable
++---------------------------------------------------------------------*/
+NPT_PosixAtomicVariable::~NPT_PosixAtomicVariable()
+{
+ pthread_mutex_destroy(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::Increment
++---------------------------------------------------------------------*/
+int
+NPT_PosixAtomicVariable::Increment()
+{
+ int value;
+
+ pthread_mutex_lock(&m_Mutex);
+ value = ++m_Value;
+ pthread_mutex_unlock(&m_Mutex);
+
+ return value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::Decrement
++---------------------------------------------------------------------*/
+int
+NPT_PosixAtomicVariable::Decrement()
+{
+ int value;
+
+ pthread_mutex_lock(&m_Mutex);
+ value = --m_Value;
+ pthread_mutex_unlock(&m_Mutex);
+
+ return value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::GetValue
++---------------------------------------------------------------------*/
+int
+NPT_PosixAtomicVariable::GetValue()
+{
+ // we assume that int read/write are atomic on the platform
+ return m_Value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixAtomicVariable::SetValue
++---------------------------------------------------------------------*/
+void
+NPT_PosixAtomicVariable::SetValue(int value)
+{
+ pthread_mutex_lock(&m_Mutex);
+ m_Value = value;
+ pthread_mutex_unlock(&m_Mutex);
+}
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariable::NPT_AtomicVariable
++---------------------------------------------------------------------*/
+NPT_AtomicVariable::NPT_AtomicVariable(int value)
+{
+ m_Delegate = new NPT_PosixAtomicVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread
++---------------------------------------------------------------------*/
+class NPT_PosixThread : public NPT_ThreadInterface
+{
+ public:
+ // methods
+ NPT_PosixThread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached);
+ ~NPT_PosixThread();
+ NPT_Result Start();
+ NPT_Result Wait(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+ private:
+ // methods
+ static void* EntryPoint(void* argument);
+
+ // NPT_Runnable methods
+ void Run();
+
+ // NPT_Interruptible methods
+ NPT_Result Interrupt() { return NPT_ERROR_NOT_IMPLEMENTED; }
+
+ // members
+ NPT_Thread* m_Delegator;
+ NPT_Runnable& m_Target;
+ bool m_Detached;
+ pthread_t m_ThreadId;
+ bool m_Joined;
+ NPT_PosixMutex m_JoinLock;
+ NPT_SharedVariable m_Done;
+};
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::NPT_PosixThread
++---------------------------------------------------------------------*/
+NPT_PosixThread::NPT_PosixThread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached) :
+ m_Delegator(delegator),
+ m_Target(target),
+ m_Detached(detached),
+ m_ThreadId(0),
+ m_Joined(false)
+{
+ NPT_LOG_FINE("NPT_PosixThread::NPT_PosixThread");
+ m_Done.SetValue(0);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::~NPT_PosixThread
++---------------------------------------------------------------------*/
+NPT_PosixThread::~NPT_PosixThread()
+{
+ NPT_LOG_FINE_1("NPT_PosixThread::~NPT_PosixThread %d\n", m_ThreadId);
+
+ if (!m_Detached) {
+ // we're not detached, and not in the Run() method, so we need to
+ // wait until the thread is done
+ Wait();
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::GetCurrentThreadId
++---------------------------------------------------------------------*/
+NPT_Thread::ThreadId
+NPT_Thread::GetCurrentThreadId()
+{
+ pthread_t pid = pthread_self();
+ return (NPT_Thread::ThreadId)((void*)pid);
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::EntryPoint
++---------------------------------------------------------------------*/
+void*
+NPT_PosixThread::EntryPoint(void* argument)
+{
+ NPT_PosixThread* thread = reinterpret_cast<NPT_PosixThread*>(argument);
+
+ NPT_LOG_FINE("NPT_PosixThread::EntryPoint - in =======================");
+
+ // get the thread ID from this context, because m_ThreadId may not yet
+ // have been set by the parent thread in the Start() method
+ thread->m_ThreadId = pthread_self();
+
+ // set random seed per thread
+ NPT_TimeStamp now;
+ NPT_System::GetCurrentTimeStamp(now);
+ NPT_System::SetRandomSeed((unsigned int)(now.m_NanoSeconds + (long)thread->m_ThreadId));
+
+ // run the thread
+ thread->Run();
+
+ // Logging here will cause a crash on exit because LogManager may already be destroyed
+ //NPT_LOG_FINE("NPT_PosixThread::EntryPoint - out ======================");
+
+ // we're done with the thread object
+ // if we're detached, we need to delete ourselves
+ if (thread->m_Detached) {
+ delete thread->m_Delegator;
+ } else {
+ // notify we're done
+ thread->m_Done.SetValue(1);
+ }
+
+ // done
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::Start
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixThread::Start()
+{
+ NPT_LOG_FINE("NPT_PosixThread::Start - creating thread");
+
+ pthread_attr_t *attributes = NULL;
+
+#if defined(NPT_CONFIG_THREAD_STACK_SIZE)
+ pthread_attr_t stack_size_attributes;
+ pthread_attr_init(&stack_size_attributes);
+ pthread_attr_setstacksize(&stack_size_attributes, NPT_CONFIG_THREAD_STACK_SIZE);
+ attributes = &stack_size_attributes;
+#endif
+
+ // use local copies of some of the object's members, because for
+ // detached threads, the object instance may have deleted itself
+ // before the pthread_create() function returns
+ bool detached = m_Detached;
+
+ // create the native thread
+ pthread_t thread_id;
+ int result = pthread_create(&thread_id, attributes, EntryPoint,
+ static_cast<NPT_PosixThread*>(this));
+ NPT_LOG_FINE_2("NPT_PosixThread::Start - id = %d, res=%d",
+ thread_id, result);
+ if (result != 0) {
+ // failed
+ return NPT_FAILURE;
+ } else {
+ // detach the thread if we're not joinable
+ if (detached) {
+ pthread_detach(thread_id);
+ } else {
+ // store the thread ID (NOTE: this is also done by the thread Run() method
+ // but it is necessary to do it from both contexts, because we don't know
+ // which one will need it first.)
+ m_ThreadId = thread_id;
+ }
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::Run
++---------------------------------------------------------------------*/
+void
+NPT_PosixThread::Run()
+{
+ m_Target.Run();
+}
+
+/*----------------------------------------------------------------------
+| NPT_PosixThread::Wait
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_PosixThread::Wait(NPT_Timeout timeout /* = NPT_TIMEOUT_INFINITE */)
+{
+ void* return_value;
+ int result;
+
+ // Note: Logging here will cause a crash on exit because LogManager may already be destroyed
+ // if this object is global or static as well
+ //NPT_LOG_FINE_1("NPT_PosixThread::Wait - waiting for id %d", m_ThreadId);
+
+ // check that we're not detached
+ if (m_ThreadId == 0 || m_Detached) {
+ return NPT_FAILURE;
+ }
+
+ // wait for the thread to finish
+ m_JoinLock.Lock();
+ if (m_Joined) {
+ //NPT_LOG_FINE_1("NPT_PosixThread::Wait - %d already joined", m_ThreadId);
+ result = 0;
+ } else {
+ //NPT_LOG_FINE_1("NPT_PosixThread::Wait - joining thread id %d", m_ThreadId);
+ if (timeout != NPT_TIMEOUT_INFINITE) {
+ result = m_Done.WaitUntilEquals(1, timeout);
+ if (NPT_FAILED(result)) {
+ result = -1;
+ goto timedout;
+ }
+ }
+
+ result = pthread_join(m_ThreadId, &return_value);
+ m_Joined = true;
+ }
+
+timedout:
+ m_JoinLock.Unlock();
+ if (result != 0) {
+ return NPT_FAILURE;
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(bool detached)
+{
+ m_Delegate = new NPT_PosixThread(this, *this, detached);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(NPT_Runnable& target, bool detached)
+{
+ m_Delegate = new NPT_PosixThread(this, target, detached);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Posix/NptSelectableMessageQueue.cpp b/lib/libUPnP/Neptune/Source/System/Posix/NptSelectableMessageQueue.cpp
new file mode 100644
index 0000000000..d453a6abb8
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Posix/NptSelectableMessageQueue.cpp
@@ -0,0 +1,84 @@
+/*****************************************************************
+|
+| Neptune - Selectable Message Queue
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <unistd.h>
+
+#include "NptSelectableMessageQueue.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue::NPT_SelectableMessageQueue
++---------------------------------------------------------------------*/
+NPT_SelectableMessageQueue::NPT_SelectableMessageQueue()
+{
+ if (pipe(m_Pipe) != 0) {
+ m_Pipe[0] = -1;
+ m_Pipe[1] = -1;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue::~NPT_SelectableMessageQueue
++---------------------------------------------------------------------*/
+NPT_SelectableMessageQueue::~NPT_SelectableMessageQueue()
+{
+ close(m_Pipe[0]);
+ close(m_Pipe[1]);
+}
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue::QueueMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SelectableMessageQueue::QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler)
+{
+ // first, queue the message
+ NPT_Result result = NPT_SimpleMessageQueue::QueueMessage(message, handler);
+
+ // then write a byte on the pipe to signal that there is a message
+ if (write(m_Pipe[1], "\0", 1) != 1) {
+ result = NPT_FAILURE;
+ }
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue::PumpMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SelectableMessageQueue::PumpMessage(NPT_Timeout timeout /* = NPT_TIMEOUT_INFINITE */)
+{
+ NPT_Result result = NPT_SimpleMessageQueue::PumpMessage(timeout);
+ if (NPT_SUCCEEDED(result)) {
+ // flush the event
+ FlushEvent();
+ }
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SelectableMessageQueue::FlushEvent
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_SelectableMessageQueue::FlushEvent()
+{
+ char buffer[1];
+ if (read(m_Pipe[0], buffer, 1) != 1) {
+ return NPT_FAILURE;
+ }
+
+ return NPT_SUCCESS;
+}
+
+
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdCTime.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdCTime.cpp
new file mode 100644
index 0000000000..c7159c19eb
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdCTime.cpp
@@ -0,0 +1,128 @@
+/*****************************************************************
+|
+| Neptune - Time: StdC Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <time.h>
+
+#include <stdio.h>
+#if !defined(_WIN32_WCE)
+#include <errno.h>
+#else
+#include <stdio.h>
+#define errno GetLastError()
+#endif
+
+#include "NptTime.h"
+#include "NptResults.h"
+#include "NptLogging.h"
+#include "NptSystem.h"
+#include "NptUtils.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.system.stdc.time")
+
+/*----------------------------------------------------------------------
+| compatibility wrappers
++---------------------------------------------------------------------*/
+#if !defined(NPT_CONFIG_HAVE_GMTIME_S)
+static int gmtime_s(struct tm* _tm, time_t* time)
+{
+ struct tm* _gmt = gmtime(time);
+
+#if defined(_WIN32_WCE)
+ if (_gmt == NULL) return ENOENT;
+#else
+ if (_gmt== NULL) return errno;
+#endif
+
+ *_tm = *_gmt;
+ return 0;
+}
+#endif // defined(NPT_CONFIG_HAVE_GMTIME_S
+
+#if !defined(NPT_CONFIG_HAVE_LOCALTIME_S)
+static int localtime_s(struct tm* _tm, time_t* time)
+{
+ struct tm* _local = localtime(time);
+
+#if defined(_WIN32_WCE)
+ if (_local == NULL) return ENOENT;
+#else
+ if (_local== NULL) return errno;
+#endif
+
+ *_tm = *_local;
+ return 0;
+}
+#endif // defined(NPT_CONFIG_HAVE_LOCALTIME_S
+
+
+/*----------------------------------------------------------------------
+| TmStructToNptLocalDate
++---------------------------------------------------------------------*/
+static void
+TmStructToNptLocalDate(const struct tm& t, NPT_LocalDate& date)
+{
+ date.year = t.tm_year+1900;
+ date.month = t.tm_mon+1;
+ date.day = t.tm_mday;
+ date.hours = t.tm_hour;
+ date.minutes = t.tm_min;
+ date.seconds = t.tm_sec;
+}
+
+/*----------------------------------------------------------------------
+| NPT_GetGMTDateFromTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Time::GetGMTDateFromTimeStamp(const NPT_TimeStamp& time, NPT_Date& date)
+{
+ time_t ltime;
+ struct tm gmt;
+
+ NPT_SetMemory(&gmt, 0, sizeof(gmt));
+
+ ltime = (time_t) time.m_Seconds;
+ int result = gmtime_s(&gmt, &ltime);
+ if (result != 0) return NPT_ERROR_ERRNO(result);
+
+ TmStructToNptLocalDate(gmt, date.local);
+ date.local.milliseconds = time.m_NanoSeconds/1000000;
+ date.timezone = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_GetLocalDate
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Time::GetLocalDate(NPT_LocalDate& today, NPT_TimeStamp& now)
+{
+ time_t ltime;
+ struct tm local;
+
+ NPT_SetMemory(&local, 0, sizeof(local));
+
+ /* get the current time stamp */
+ NPT_CHECK_SEVERE(NPT_System::GetCurrentTimeStamp(now));
+
+ ltime = (time_t) now.m_Seconds;
+ int result = localtime_s(&local, &ltime);
+ if (result != 0) return NPT_ERROR_ERRNO(result);
+
+ TmStructToNptLocalDate(local, today);
+ today.milliseconds = now.m_NanoSeconds/1000000;
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcConsole.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcConsole.cpp
new file mode 100644
index 0000000000..9ca088c283
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcConsole.cpp
@@ -0,0 +1,25 @@
+/*****************************************************************
+|
+| Neptune - Console Support: StdC Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+
+#include "NptConfig.h"
+#include "NptConsole.h"
+
+/*----------------------------------------------------------------------
+| NPT_Console::Output
++---------------------------------------------------------------------*/
+void
+NPT_Console::Output(const char* message)
+{
+ printf("%s", message);
+}
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcDebug.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcDebug.cpp
new file mode 100644
index 0000000000..e695077109
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcDebug.cpp
@@ -0,0 +1,30 @@
+/*****************************************************************
+|
+| File: NptStdcDebug.c
+|
+| Atomix - Debug Support: StdC Implementation
+|
+| (c) 2002-2009 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "NptConfig.h"
+#include "NptDefs.h"
+#include "NptTypes.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_DebugOuput
++---------------------------------------------------------------------*/
+void
+NPT_DebugOutput(const char* message)
+{
+ printf("%s", message);
+}
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
new file mode 100644
index 0000000000..8fd2091739
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
@@ -0,0 +1,51 @@
+/*****************************************************************
+|
+| Neptune - Environment variables: StdC Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+
+#include "NptConfig.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_GetEnvironment
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_GetEnvironment(const char* name, NPT_String& value)
+{
+ char* env;
+
+ /* default value */
+ value.SetLength(0);
+
+#if defined(NPT_CONFIG_HAVE_GETENV)
+ env = getenv(name);
+ if (env) {
+ value = env;
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+#elif defined(NPT_CONFIG_HAVE_DUPENV_S)
+ if (dupenv_s(&env, NULL, name) != 0) {
+ return NPT_FAILURE;
+ } else if (env != NULL) {
+ value = env;
+ free(env);
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+#else
+#error "no getenv or getenv_s available on this platform"
+#endif
+}
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcFile.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcFile.cpp
new file mode 100644
index 0000000000..ff0eddc265
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcFile.cpp
@@ -0,0 +1,511 @@
+/*****************************************************************
+|
+| Neptune - Files :: Standard C Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE64
+#define _FILE_OFFSET_BITS 64
+
+#include <stdio.h>
+#if !defined(_WIN32_WCE)
+#include <string.h>
+#include <sys/stat.h>
+#include <errno.h>
+#else
+#include <stdio.h>
+#define errno GetLastError()
+#endif
+
+#include "NptConfig.h"
+#include "NptUtils.h"
+#include "NptFile.h"
+#include "NptThreads.h"
+#include "NptInterfaces.h"
+#include "NptStrings.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_SHARE_H)
+#include <share.h>
+#endif
+
+#if defined(_WIN32)
+extern FILE *NPT_fsopen_utf8(const char* path, const char* mode, int sh_flags);
+extern FILE *NPT_fopen_utf8(const char* path, const char* mode);
+#define fopen NPT_fopen_utf8
+#define fopen_s NPT_fopen_s_utf8
+#define _fsopen NPT_fsopen_utf8
+#endif
+
+/*----------------------------------------------------------------------
+| compatibility wrappers
++---------------------------------------------------------------------*/
+#if !defined(NPT_CONFIG_HAVE_FOPEN_S)
+static int fopen_s(FILE** file,
+ const char* filename,
+ const char* mode)
+{
+ *file = fopen(filename, mode);
+
+#if defined(_WIN32_WCE)
+ if (*file == NULL) return ENOENT;
+#else
+ if (*file == NULL) return errno;
+#endif
+ return 0;
+}
+#endif // defined(NPT_CONFIG_HAVE_FOPEN_S
+
+/*----------------------------------------------------------------------
+| MapErrno
++---------------------------------------------------------------------*/
+static NPT_Result
+MapErrno(int err) {
+ switch (err) {
+ case EACCES: return NPT_ERROR_PERMISSION_DENIED;
+ case EPERM: return NPT_ERROR_PERMISSION_DENIED;
+ case ENOENT: return NPT_ERROR_NO_SUCH_FILE;
+#if defined(ENAMETOOLONG)
+ case ENAMETOOLONG: return NPT_ERROR_INVALID_PARAMETERS;
+#endif
+ case EBUSY: return NPT_ERROR_FILE_BUSY;
+ case EROFS: return NPT_ERROR_FILE_NOT_WRITABLE;
+ case ENOTDIR: return NPT_ERROR_FILE_NOT_DIRECTORY;
+ default: return NPT_ERROR_ERRNO(err);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileWrapper
++---------------------------------------------------------------------*/
+class NPT_StdcFileWrapper
+{
+public:
+ // constructors and destructor
+ NPT_StdcFileWrapper(FILE* file, const char* name) : m_File(file), m_Name(name) {}
+ ~NPT_StdcFileWrapper() {
+ if (m_File != NULL &&
+ m_File != stdin &&
+ m_File != stdout &&
+ m_File != stderr) {
+ fclose(m_File);
+ }
+ }
+
+ // members
+ FILE* m_File;
+ NPT_String m_Name;
+};
+
+typedef NPT_Reference<NPT_StdcFileWrapper> NPT_StdcFileReference;
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileStream
++---------------------------------------------------------------------*/
+class NPT_StdcFileStream
+{
+public:
+ // constructors and destructor
+ NPT_StdcFileStream(NPT_StdcFileReference file) :
+ m_FileReference(file) {}
+
+ // NPT_FileInterface methods
+ NPT_Result Seek(NPT_Position offset);
+ NPT_Result Tell(NPT_Position& offset);
+ NPT_Result Flush();
+
+protected:
+ // constructors and destructors
+ virtual ~NPT_StdcFileStream() {}
+
+ // members
+ NPT_StdcFileReference m_FileReference;
+};
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileStream::Seek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileStream::Seek(NPT_Position offset)
+{
+ size_t result;
+
+ result = NPT_fseek(m_FileReference->m_File, offset, SEEK_SET);
+ if (result == 0) {
+ return NPT_SUCCESS;
+ } else {
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileStream::Tell
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileStream::Tell(NPT_Position& offset)
+{
+ offset = 0;
+
+ NPT_Int64 pos = NPT_ftell(m_FileReference->m_File);
+ if (pos < 0) return NPT_FAILURE;
+
+ offset = pos;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileStream::Flush
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileStream::Flush()
+{
+ fflush(m_FileReference->m_File);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileInputStream
++---------------------------------------------------------------------*/
+class NPT_StdcFileInputStream : public NPT_InputStream,
+ private NPT_StdcFileStream
+
+{
+public:
+ // constructors and destructor
+ NPT_StdcFileInputStream(NPT_StdcFileReference& file) :
+ NPT_StdcFileStream(file) {}
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read);
+ NPT_Result Seek(NPT_Position offset) {
+ return NPT_StdcFileStream::Seek(offset);
+ }
+ NPT_Result Tell(NPT_Position& offset) {
+ return NPT_StdcFileStream::Tell(offset);
+ }
+ NPT_Result GetSize(NPT_LargeSize& size);
+ NPT_Result GetAvailable(NPT_LargeSize& available);
+};
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ size_t nb_read;
+
+ // check the parameters
+ if (buffer == NULL) {
+ return NPT_ERROR_INVALID_PARAMETERS;
+ }
+
+ // read from the file
+ nb_read = fread(buffer, 1, bytes_to_read, m_FileReference->m_File);
+ if (nb_read > 0) {
+ if (bytes_read) *bytes_read = (NPT_Size)nb_read;
+ return NPT_SUCCESS;
+ } else if (feof(m_FileReference->m_File)) {
+ if (bytes_read) *bytes_read = 0;
+ return NPT_ERROR_EOS;
+ } else {
+ if (bytes_read) *bytes_read = 0;
+ return NPT_ERROR_READ_FAILED;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileInputStream::GetSize
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileInputStream::GetSize(NPT_LargeSize& size)
+{
+ NPT_FileInfo file_info;
+ NPT_Result result = NPT_File::GetInfo(m_FileReference->m_Name, &file_info);
+ if (NPT_FAILED(result)) return result;
+ size = file_info.m_Size;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileInputStream::GetAvailable
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileInputStream::GetAvailable(NPT_LargeSize& available)
+{
+ NPT_Int64 offset = NPT_ftell(m_FileReference->m_File);
+ NPT_LargeSize size = 0;
+
+ if (NPT_SUCCEEDED(GetSize(size)) && offset >= 0 && (NPT_LargeSize)offset <= size) {
+ available = size - offset;
+ return NPT_SUCCESS;
+ } else {
+ available = 0;
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileOutputStream
++---------------------------------------------------------------------*/
+class NPT_StdcFileOutputStream : public NPT_OutputStream,
+ private NPT_StdcFileStream
+{
+public:
+ // constructors and destructor
+ NPT_StdcFileOutputStream(NPT_StdcFileReference& file) :
+ NPT_StdcFileStream(file) {}
+
+ // NPT_InputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written);
+ NPT_Result Seek(NPT_Position offset) {
+ return NPT_StdcFileStream::Seek(offset);
+ }
+ NPT_Result Tell(NPT_Position& offset) {
+ return NPT_StdcFileStream::Tell(offset);
+ }
+ NPT_Result Flush() {
+ return NPT_StdcFileStream::Flush();
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_StdcFileOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFileOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ size_t nb_written;
+
+ nb_written = fwrite(buffer, 1, bytes_to_write, m_FileReference->m_File);
+
+ if (nb_written > 0) {
+ if (bytes_written) *bytes_written = (NPT_Size)nb_written;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_written) *bytes_written = 0;
+ return NPT_ERROR_WRITE_FAILED;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile
++---------------------------------------------------------------------*/
+class NPT_StdcFile: public NPT_FileInterface
+{
+public:
+ // constructors and destructor
+ NPT_StdcFile(NPT_File& delegator);
+ ~NPT_StdcFile();
+
+ // NPT_FileInterface methods
+ NPT_Result Open(OpenMode mode);
+ NPT_Result Close();
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+
+private:
+ // members
+ NPT_File& m_Delegator;
+ OpenMode m_Mode;
+ NPT_StdcFileReference m_FileReference;
+};
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::NPT_StdcFile
++---------------------------------------------------------------------*/
+NPT_StdcFile::NPT_StdcFile(NPT_File& delegator) :
+ m_Delegator(delegator),
+ m_Mode(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::~NPT_StdcFile
++---------------------------------------------------------------------*/
+NPT_StdcFile::~NPT_StdcFile()
+{
+ Close();
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::Open
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFile::Open(NPT_File::OpenMode mode)
+{
+ FILE* file = NULL;
+
+ // check if we're already open
+ if (!m_FileReference.IsNull()) {
+ return NPT_ERROR_FILE_ALREADY_OPEN;
+ }
+
+ // store the mode
+ m_Mode = mode;
+
+ // check for special names
+ const char* name = (const char*)m_Delegator.GetPath();
+ if (NPT_StringsEqual(name, NPT_FILE_STANDARD_INPUT)) {
+ file = stdin;
+ } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_OUTPUT)) {
+ file = stdout;
+ } else if (NPT_StringsEqual(name, NPT_FILE_STANDARD_ERROR)) {
+ file = stderr;
+ } else {
+ // compute mode
+ const char* fmode = "";
+ if (mode & NPT_FILE_OPEN_MODE_WRITE) {
+ if (mode & NPT_FILE_OPEN_MODE_CREATE) {
+ if (mode & NPT_FILE_OPEN_MODE_TRUNCATE) {
+ /* write, read, create, truncate */
+ fmode = "w+b";
+ } else {
+ /* write, read, create */
+ fmode = "a+b";
+ }
+ } else {
+ if (mode & NPT_FILE_OPEN_MODE_TRUNCATE) {
+ /* write, read, truncate */
+ fmode = "w+b";
+ } else {
+ /* write, read */
+ fmode = "r+b";
+ }
+ }
+ } else {
+ /* read only */
+ fmode = "rb";
+ }
+
+ // open the file
+#if defined(NPT_CONFIG_HAVE_FSOPEN)
+ file = _fsopen(name, fmode, _SH_DENYWR);
+ int open_result = file == NULL ? ENOENT : 0;
+#else
+ int open_result = fopen_s(&file, name, fmode);
+#endif
+
+ // test the result of the open
+ if (open_result != 0) return MapErrno(open_result);
+ }
+
+ // unbuffer the file if needed
+ if ((mode & NPT_FILE_OPEN_MODE_UNBUFFERED) && file != NULL) {
+#if !defined(_WIN32_WCE)
+ setvbuf(file, NULL, _IONBF, 0);
+#endif
+ }
+
+ // create a reference to the FILE object
+ m_FileReference = new NPT_StdcFileWrapper(file, name);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::Close
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFile::Close()
+{
+ // release the file reference
+ m_FileReference = NULL;
+
+ // reset the mode
+ m_Mode = 0;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFile::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN;
+
+ // check that the mode is compatible
+ if (!(m_Mode & NPT_FILE_OPEN_MODE_READ)) {
+ return NPT_ERROR_FILE_NOT_READABLE;
+ }
+
+ // create a stream
+ stream = new NPT_StdcFileInputStream(m_FileReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_StdcFile::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_StdcFile::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_FileReference.IsNull()) return NPT_ERROR_FILE_NOT_OPEN;
+
+ // check that the mode is compatible
+ if (!(m_Mode & NPT_FILE_OPEN_MODE_WRITE)) {
+ return NPT_ERROR_FILE_NOT_WRITABLE;
+ }
+
+ // create a stream
+ stream = new NPT_StdcFileOutputStream(m_FileReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::NPT_File
++---------------------------------------------------------------------*/
+NPT_File::NPT_File(const char* path) : m_Path(path), m_IsSpecial(false)
+{
+ m_Delegate = new NPT_StdcFile(*this);
+
+ if (NPT_StringsEqual(path, NPT_FILE_STANDARD_INPUT) ||
+ NPT_StringsEqual(path, NPT_FILE_STANDARD_OUTPUT) ||
+ NPT_StringsEqual(path, NPT_FILE_STANDARD_ERROR)) {
+ m_IsSpecial = true;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::operator=
++---------------------------------------------------------------------*/
+NPT_File&
+NPT_File::operator=(const NPT_File& file)
+{
+ if (this != &file) {
+ delete m_Delegate;
+ m_Path = file.m_Path;
+ m_IsSpecial = file.m_IsSpecial;
+ m_Delegate = new NPT_StdcFile(*this);
+ }
+ return *this;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Symbian/NptSymbianSystem.cpp b/lib/libUPnP/Neptune/Source/System/Symbian/NptSymbianSystem.cpp
new file mode 100644
index 0000000000..efcb46152f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Symbian/NptSymbianSystem.cpp
@@ -0,0 +1,116 @@
+/*****************************************************************
+|
+| Neptune - System :: Win32 Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "e32cmn.h"
+#include "e32math.h"
+#include "sys/time.h"
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static TInt64 NPT_System_RandomGeneratorSeed = 0;
+
+
+/*----------------------------------------------------------------------
+| NPT_System::GetProcessId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetProcessId(NPT_UInt32& id)
+{
+ //id = getpid();
+ id = 0;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ struct timeval now_tv;
+
+ /* get current time from system */
+ if (gettimeofday(&now_tv, NULL)) {
+ now.m_Seconds = 0;
+ now.m_NanoSeconds = 0;
+ return NPT_FAILURE;
+ }
+
+ /* convert format */
+ now.m_Seconds = now_tv.tv_sec;
+ now.m_NanoSeconds = now_tv.tv_usec * 1000;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::Sleep
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::Sleep(const NPT_TimeInterval& duration)
+{
+ TTimeIntervalMicroSeconds32 milliseconds = 1000*duration.m_Seconds + duration.m_NanoSeconds/1000000;
+ User::After(milliseconds); /* FIXME: this doesn't behave like a normal sleep() where the processor idles. Need to use CTimer much more complicated logic. */
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SleepUntil
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SleepUntil(const NPT_TimeStamp& when)
+{
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ if (when > now) {
+ NPT_TimeInterval duration = when-now;
+ return Sleep(duration);
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SetRandomSeed
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SetRandomSeed(unsigned int seed)
+{
+ NPT_System_RandomGeneratorSeed = seed;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::NPT_System
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_System::GetRandomInteger()
+{
+ if (!NPT_System_RandomGeneratorSeed) {
+ TTime time;
+ time.HomeTime();
+
+ NPT_System::SetRandomSeed(time.Int64());
+ }
+
+ return Math::Rand(NPT_System_RandomGeneratorSeed);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Console.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Console.cpp
new file mode 100644
index 0000000000..59ac92e89e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Console.cpp
@@ -0,0 +1,28 @@
+/*****************************************************************
+|
+| Neptune - Console Support: Win32 Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+#include <stdio.h>
+
+#include "NptConfig.h"
+#include "NptConsole.h"
+
+/*----------------------------------------------------------------------
+| NPT_Console::Output
++---------------------------------------------------------------------*/
+void
+NPT_Console::Output(const char* message)
+{
+ OutputDebugString(message);
+ printf("%s", message);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Debug.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Debug.cpp
new file mode 100644
index 0000000000..c5b157df0f
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Debug.cpp
@@ -0,0 +1,36 @@
+/*****************************************************************
+|
+| Neptune - Debug Support: Win32 Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#if defined(_XBOX)
+#include <xtl.h>
+#else
+#include <windows.h>
+#endif
+
+#include "NptConfig.h"
+#include "NptDefs.h"
+#include "NptTypes.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_DebugOutput
++---------------------------------------------------------------------*/
+void
+NPT_DebugOutput(const char* message)
+{
+#if !defined(_WIN32_WCE)
+ OutputDebugString(message);
+#endif
+ printf("%s", message);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp
new file mode 100644
index 0000000000..caaf6d1903
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32DynamicLibraries.cpp
@@ -0,0 +1,146 @@
+/*****************************************************************
+ |
+ | Neptune - Dynamic Libraries :: Win32 Implementation
+ |
+ | (c) 2001-2008 Gilles Boccon-Gibod
+ | Author: Gilles Boccon-Gibod (bok@bok.net)
+ |
+ ****************************************************************/
+
+ /*----------------------------------------------------------------------
+ | includes
+ +---------------------------------------------------------------------*/
+#include "NptLogging.h"
+#include "NptDynamicLibraries.h"
+
+#include <windows.h>
+#include <assert.h>
+
+ /*----------------------------------------------------------------------
+ | logging
+ +---------------------------------------------------------------------*/
+ NPT_SET_LOCAL_LOGGER("neptune.win32.dynamic-libraries")
+
+/*----------------------------------------------------------------------
+| A2WHelper
++---------------------------------------------------------------------*/
+static LPWSTR A2WHelper(LPWSTR lpw, LPCSTR lpa, int nChars, UINT acp)
+{
+ int ret;
+
+ assert(lpa != NULL);
+ assert(lpw != NULL);
+ if (lpw == NULL || lpa == NULL) return NULL;
+
+ lpw[0] = '\0';
+ ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
+ if (ret == 0) {
+ assert(0);
+ return NULL;
+ }
+ return lpw;
+}
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+/* UNICODE support */
+#if !defined(_XBOX)
+#define NPT_WIN32_USE_CHAR_CONVERSION int _convert = 0; LPCWSTR _lpw = NULL; LPCSTR _lpa = NULL
+
+#define NPT_WIN32_A2W(lpa) (\
+ ((_lpa = lpa) == NULL) ? NULL : (\
+ _convert = (int)(strlen(_lpa)+1),\
+ (INT_MAX/2<_convert)? NULL : \
+ A2WHelper((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, CP_UTF8)))
+
+#else
+#define NPT_WIN32_USE_CHAR_CONVERSION
+#define NPT_WIN32_A2W(_s) (_s)
+#define LoadLibraryW LoadLibrary
+#define GetProcAddressW GetProcAddress
+#endif
+
+ /*----------------------------------------------------------------------
+ | NPT_Win32DynamicLibrary
+ +---------------------------------------------------------------------*/
+class NPT_Win32DynamicLibrary : public NPT_DynamicLibraryInterface
+{
+public:
+ // constructor and destructor
+ NPT_Win32DynamicLibrary(HMODULE library, const char* name) :
+ m_Library(library), m_Name(name) {}
+
+ // NPT_DynamicLibraryInterface methods
+ virtual NPT_Result FindSymbol(const char* name, void*& symbol);
+ virtual NPT_Result Unload();
+
+private:
+ // members
+ HMODULE m_Library;
+ NPT_String m_Name;
+};
+
+/*----------------------------------------------------------------------
+| NPT_DynamicLibrary::Load
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_DynamicLibrary::Load(const char* name, NPT_Flags flags, NPT_DynamicLibrary*& library)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+
+ NPT_COMPILER_UNUSED(flags);
+ if (name == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+
+ // default return value
+ library = NULL;
+
+ // load the lib
+ NPT_LOG_FINE_2("loading library %s, flags=%x", name, flags);
+ HMODULE handle = LoadLibraryW(NPT_WIN32_A2W(name));
+ if (handle == NULL) {
+ NPT_LOG_FINE("library not found");
+ return NPT_FAILURE;
+ }
+
+ // instantiate the object
+ NPT_LOG_FINE_1("library %s loaded", name);
+ library = new NPT_DynamicLibrary(new NPT_Win32DynamicLibrary(handle, name));
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32DynamicLibrary::FindSymbol
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32DynamicLibrary::FindSymbol(const char* name, void*& symbol)
+{
+ if (name == NULL) return NPT_ERROR_INVALID_PARAMETERS;
+ symbol = NULL;
+ if (m_Library == NULL) return NPT_ERROR_NO_SUCH_ITEM;
+
+ NPT_LOG_FINE_1("finding symbol %s", name);
+#if defined(_WIN32_WCE)
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ symbol = GetProcAddress(m_Library, NPT_WIN32_A2W(name));
+#else
+ symbol = GetProcAddress(m_Library, name);
+#endif
+ return symbol?NPT_SUCCESS:NPT_ERROR_NO_SUCH_ITEM;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32DynamicLibrary::Unload
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32DynamicLibrary::Unload()
+{
+ NPT_LOG_FINE_1("unloading library %s", (const char*)m_Name);
+ BOOL result = FreeLibrary(m_Library);
+ if (result) {
+ return NPT_SUCCESS;
+ } else {
+ return NPT_FAILURE;
+ }
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32File.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32File.cpp
new file mode 100644
index 0000000000..fd4d2b289d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32File.cpp
@@ -0,0 +1,412 @@
+/*****************************************************************
+|
+| Neptune - File :: Win32 Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptLogging.h"
+#include "NptFile.h"
+#include "NptUtils.h"
+
+#if defined(_XBOX)
+#include <xtl.h>
+#else
+#include <windows.h>
+#include <malloc.h>
+#include <limits.h>
+#endif
+#include <assert.h>
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+//NPT_SET_LOCAL_LOGGER("neptune.win32.file")
+
+/*----------------------------------------------------------------------
+| A2WHelper
++---------------------------------------------------------------------*/
+static LPWSTR A2WHelper(LPWSTR lpw, LPCSTR lpa, int nChars, UINT acp)
+{
+ int ret;
+
+ assert(lpa != NULL);
+ assert(lpw != NULL);
+ if (lpw == NULL || lpa == NULL) return NULL;
+
+ lpw[0] = '\0';
+ ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
+ if (ret == 0) {
+ assert(0);
+ return NULL;
+ }
+ return lpw;
+}
+
+/*----------------------------------------------------------------------
+| W2AHelper
++---------------------------------------------------------------------*/
+static LPSTR W2AHelper(LPSTR lpa, LPCWSTR lpw, int nChars, UINT acp)
+{
+ int ret;
+
+ assert(lpw != NULL);
+ assert(lpa != NULL);
+ if (lpa == NULL || lpw == NULL) return NULL;
+
+ lpa[0] = '\0';
+ ret = WideCharToMultiByte(acp, 0, lpw, -1, lpa, nChars, NULL, NULL);
+ if (ret == 0) {
+ assert(0);
+ return NULL;
+ }
+ return lpa;
+}
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+/* UNICODE support */
+#if !defined(_XBOX)
+#define NPT_WIN32_USE_CHAR_CONVERSION int _convert = 0; LPCWSTR _lpw = NULL; LPCSTR _lpa = NULL
+
+#define NPT_WIN32_A2W(lpa) (\
+ ((_lpa = lpa) == NULL) ? NULL : (\
+ _convert = (int)(strlen(_lpa)+1),\
+ (INT_MAX/2<_convert)? NULL : \
+ A2WHelper((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, CP_UTF8)))
+
+#define NPT_WIN32_W2A(lpw) (\
+ ((_lpw = lpw) == NULL) ? NULL : (\
+ (_convert = (lstrlenW(_lpw)+1), \
+ (_convert>INT_MAX/2) ? NULL : \
+ W2AHelper((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), CP_UTF8))))
+
+#else
+#define NPT_WIN32_USE_CHAR_CONVERSION
+#define NPT_WIN32_W2A(_s) (_s)
+#define NPT_WIN32_A2W(_s) (_s)
+#define GetFileAttributesW GetFileAttributes
+#define FindFirstFileW FindFirstFile
+#define FindNextFileW FindNextFile
+#define FindCloseW FindClose
+#define CreateDirectoryW CreateDirectoryA
+#define RemoveDirectoryW RemoveDirectoryA
+#define DeleteFileW DeleteFileA
+#define MoveFileW MoveFileA
+#define WIN32_FIND_DATAW WIN32_FIND_DATA
+#endif
+
+/*----------------------------------------------------------------------
+| MapError
++---------------------------------------------------------------------*/
+static NPT_Result
+MapError(DWORD err) {
+ switch (err) {
+ case ERROR_ALREADY_EXISTS: return NPT_ERROR_FILE_ALREADY_EXISTS;
+ case ERROR_PATH_NOT_FOUND:
+ case ERROR_FILE_NOT_FOUND:
+ case ERROR_INVALID_DRIVE:
+ case ERROR_BAD_PATHNAME:
+ case ERROR_BAD_NET_NAME:
+ case ERROR_FILENAME_EXCED_RANGE:
+ case ERROR_NO_MORE_FILES:
+ case ERROR_BAD_NETPATH: return NPT_ERROR_NO_SUCH_FILE;
+ case ERROR_LOCK_VIOLATION:
+ case ERROR_SEEK_ON_DEVICE:
+ case ERROR_CURRENT_DIRECTORY:
+ case ERROR_CANNOT_MAKE:
+ case ERROR_FAIL_I24:
+ case ERROR_NETWORK_ACCESS_DENIED:
+ case ERROR_DRIVE_LOCKED:
+ case ERROR_ACCESS_DENIED: return NPT_ERROR_PERMISSION_DENIED;
+ case ERROR_NOT_LOCKED:
+ case ERROR_LOCK_FAILED:
+ case ERROR_SHARING_VIOLATION: return NPT_ERROR_FILE_BUSY;
+ case ERROR_INVALID_FUNCTION: return NPT_ERROR_INTERNAL;
+ case ERROR_NOT_ENOUGH_QUOTA: return NPT_ERROR_OUT_OF_MEMORY;
+ case ERROR_ARENA_TRASHED:
+ case ERROR_NOT_ENOUGH_MEMORY:
+ case ERROR_INVALID_BLOCK: return NPT_ERROR_OUT_OF_MEMORY;
+ case ERROR_DISK_FULL: return NPT_ERROR_FILE_NOT_ENOUGH_SPACE;
+ case ERROR_TOO_MANY_OPEN_FILES: return NPT_ERROR_OUT_OF_RESOURCES;
+ case ERROR_INVALID_HANDLE:
+ case ERROR_INVALID_ACCESS:
+ case ERROR_INVALID_DATA: return NPT_ERROR_INVALID_PARAMETERS;
+ case ERROR_DIR_NOT_EMPTY: return NPT_ERROR_DIRECTORY_NOT_EMPTY;
+ case ERROR_NEGATIVE_SEEK: return NPT_ERROR_OUT_OF_RANGE;
+ default: return NPT_FAILURE;
+ }
+}
+
+#if defined(_WIN32_WCE)
+/*----------------------------------------------------------------------
+| NPT_stat_utf8
++---------------------------------------------------------------------*/
+int
+NPT_stat_utf8(const char* path, struct __stat64* info)
+{
+ return -1;
+}
+
+/*----------------------------------------------------------------------
+| NPT_getcwd_utf8
++---------------------------------------------------------------------*/
+char*
+NPT_getcwd_utf8(char* dir, int max_size)
+{
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_fopen_utf8
++---------------------------------------------------------------------*/
+FILE*
+NPT_fopen_utf8(const char* path, const char* mode)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ return _wfopen(NPT_WIN32_A2W(path), NPT_WIN32_A2W(mode));
+}
+#elif defined(_XBOX)
+#include <sys/stat.h>
+/*----------------------------------------------------------------------
+| NPT_stat_utf8
++---------------------------------------------------------------------*/
+int
+NPT_stat_utf8(const char* path, struct __stat64* info)
+{
+ return _stat64(path, info);
+}
+
+/*----------------------------------------------------------------------
+| NPT_getcwd_utf8
++---------------------------------------------------------------------*/
+char*
+NPT_getcwd_utf8(char* dir, unsigned int max_size)
+{
+ return NULL;
+}
+
+/*----------------------------------------------------------------------
+| NPT_fsopen_utf8
++---------------------------------------------------------------------*/
+FILE*
+NPT_fsopen_utf8(const char* path, const char* mode, int sh_flags)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ return _fsopen(path, mode, sh_flags);
+}
+#else
+#include <sys/stat.h>
+#include <direct.h>
+
+/*----------------------------------------------------------------------
+| NPT_stat_utf8
++---------------------------------------------------------------------*/
+int
+NPT_stat_utf8(const char* path, struct __stat64* info)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ return _wstat64(NPT_WIN32_A2W(path), info);
+}
+
+/*----------------------------------------------------------------------
+| NPT_getcwd_utf8
++---------------------------------------------------------------------*/
+char*
+NPT_getcwd_utf8(char* dir, unsigned int max_size)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ WCHAR* wdir = (WCHAR*)alloca(2*(max_size+1));
+ WCHAR* result = _wgetcwd(wdir, max_size);
+ if (result == NULL) return NULL;
+ char* converted = NPT_WIN32_W2A(result);
+ NPT_CopyString(dir, converted);
+ return dir;
+}
+
+/*----------------------------------------------------------------------
+| NPT_fsopen_utf8
++---------------------------------------------------------------------*/
+FILE*
+NPT_fsopen_utf8(const char* path, const char* mode, int sh_flags)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ return _wfsopen(NPT_WIN32_A2W(path), NPT_WIN32_A2W(mode + NPT_String(", ccs=UNICODE")), sh_flags);
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_FilePath::Separator
++---------------------------------------------------------------------*/
+const NPT_String NPT_FilePath::Separator("\\");
+
+/*----------------------------------------------------------------------
+| NPT_File::GetRoots
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetRoots(NPT_List<NPT_String>& roots)
+{
+ roots.Clear();
+#if defined(_WIN32_WCE) || defined(_XBOX)
+ return NPT_ERROR_NOT_IMPLEMENTED;
+#else
+ DWORD drives = GetLogicalDrives();
+ for (unsigned int i=0; i<26; i++) {
+ if (drives & (1<<i)) {
+ char drive_name[4] = {'A'+i, ':', '\\', 0};
+ roots.Add(drive_name);
+ }
+ }
+ return NPT_SUCCESS;
+#endif
+}
+
+#if defined(_WIN32_WCE)
+/*----------------------------------------------------------------------
+| NPT_File::GetWorkingDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetWorkingDir(NPT_String& path)
+{
+ path.SetLength(0);
+ return NPT_ERROR_NOT_IMPLEMENTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::GetInfo
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::GetInfo(const char* path, NPT_FileInfo* info)
+{
+ return NPT_ERROR_NOT_IMPLEMENTED;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_File::CreateDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::CreateDir(const char* path)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ BOOL result = ::CreateDirectoryW(NPT_WIN32_A2W(path), NULL);
+ if (result == 0) {
+ return MapError(GetLastError());
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::RemoveFile
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::RemoveFile(const char* path)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ BOOL result = ::DeleteFileW(NPT_WIN32_A2W(path));
+ if (result == 0) {
+ return MapError(GetLastError());
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::RemoveDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::RemoveDir(const char* path)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ BOOL result = RemoveDirectoryW(NPT_WIN32_A2W(path));
+ if (result == 0) {
+ return MapError(GetLastError());
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::Rename
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::Rename(const char* from_path, const char* to_path)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+ BOOL result = MoveFileW(NPT_WIN32_A2W(from_path), NPT_WIN32_A2W(to_path));
+ if (result == 0) {
+ return MapError(GetLastError());
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File_ProcessFindData
++---------------------------------------------------------------------*/
+static bool
+NPT_File_ProcessFindData(WIN32_FIND_DATAW* find_data)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+
+ // discard system specific files/shortcuts
+ if (NPT_StringsEqual(NPT_WIN32_W2A(find_data->cFileName), ".") ||
+ NPT_StringsEqual(NPT_WIN32_W2A(find_data->cFileName), "..")) {
+ return false;
+ }
+
+ return true;
+}
+
+/*----------------------------------------------------------------------
+| NPT_File::ListDir
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_File::ListDir(const char* path,
+ NPT_List<NPT_String>& entries,
+ NPT_Ordinal start /* = 0 */,
+ NPT_Cardinal max /* = 0 */)
+{
+ NPT_WIN32_USE_CHAR_CONVERSION;
+
+ // default return value
+ entries.Clear();
+
+ // check the arguments
+ if (path == NULL || path[0] == '\0') return NPT_ERROR_INVALID_PARAMETERS;
+
+ // construct a path name with a \* wildcard at the end
+ NPT_String path_pattern = path;
+ if (path_pattern.EndsWith("\\") || path_pattern.EndsWith("/")) {
+ path_pattern += "*";
+ } else {
+ path_pattern += "\\*";
+ }
+
+ // list the entries
+ WIN32_FIND_DATAW find_data;
+ HANDLE find_handle = FindFirstFileW(NPT_WIN32_A2W(path_pattern.GetChars()), &find_data);
+ if (find_handle == INVALID_HANDLE_VALUE) return MapError(GetLastError());
+ NPT_Cardinal count = 0;
+ do {
+ if (NPT_File_ProcessFindData(&find_data)) {
+ // continue if we still have entries to skip
+ if (start > 0) {
+ --start;
+ continue;
+ }
+ entries.Add(NPT_WIN32_W2A(find_data.cFileName));
+
+ // stop when we have reached the maximum requested
+ if (max && ++count == max) return NPT_SUCCESS;
+ }
+ } while (FindNextFileW(find_handle, &find_data));
+ DWORD last_error = GetLastError();
+ FindClose(find_handle);
+ if (last_error != ERROR_NO_MORE_FILES) return MapError(last_error);
+
+ return NPT_SUCCESS;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32HttpProxy.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32HttpProxy.cpp
new file mode 100644
index 0000000000..c9729c4c52
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32HttpProxy.cpp
@@ -0,0 +1,43 @@
+/*****************************************************************
+|
+| Neptune - HTTP Proxy :: WinHttp Implementation
+|
+| (c) 2001-2007 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+//#include <Winhttp.h>
+#include "NptResults.h"
+#include "NptHttp.h"
+#include "NptThreads.h"
+
+#if 0 // not implemented yet
+HINTERNET NPT_Win32HttpHandle = INVALID_HANDLE_VALUE;
+NPT_Lock NPT_Win32HttpLock;
+
+/*----------------------------------------------------------------------
+| NPT_HttpProxySelector::GetSystemDefault
++---------------------------------------------------------------------*/
+NPT_HttpProxySelector*
+NPT_HttpProxySelector::GetSystemDefault()
+{
+ NPT_AutoLock lock(NPT_Win32HttpLock);
+
+ if (NPT_Win32HttpHandle == INVALID_HANDLE_VALUE) {
+ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG config;
+ BOOL result = WinHttpGetIEProxyConfigForCurrentUser(&config);
+ }
+
+ return NULL;
+}
+#else
+NPT_HttpProxySelector*
+NPT_HttpProxySelector::GetSystemDefault()
+{
+ return NULL;
+}
+#endif
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp
new file mode 100644
index 0000000000..921fc1af68
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.cpp
@@ -0,0 +1,183 @@
+/*****************************************************************
+|
+| Neptune - Win32 Message Queue
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptWin32MessageQueue.h"
+
+/*----------------------------------------------------------------------
+| platform adaptation
++---------------------------------------------------------------------*/
+#if defined(_WIN32_WCE)
+#define GetWindowLongPtr GetWindowLong
+#define SetWindowLongPtr SetWindowLong
+#endif
+
+/*----------------------------------------------------------------------
+| constants
++---------------------------------------------------------------------*/
+const int NPT_WIN32_MESSAGE_ID_BASE = WM_USER + 9200;
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue
++---------------------------------------------------------------------*/
+NPT_Win32WindowMessageQueue::NPT_Win32WindowMessageQueue()
+{
+ // create a hidden window to process our incoming messages
+ WNDCLASS wclass;
+
+ // compute a unique class name
+ m_ClassName[0] = 'N';
+ m_ClassName[1] = 'P';
+ m_ClassName[2] = 'T';
+ m_ClassName[3] = 'H';
+ m_ClassName[4] = 'W';
+ NPT_String tid = NPT_String::FromInteger(GetCurrentThreadId());
+ for (unsigned int i=0; i<=tid.GetLength(); i++) {
+ m_ClassName[5+i] = tid.GetChars()[i];
+ }
+
+ // register a window class
+ wclass.style = 0;
+ wclass.lpfnWndProc = NPT_Win32WindowMessageQueue::WindowProcedure;
+ wclass.cbClsExtra = 0;
+ wclass.cbWndExtra = 0;
+ wclass.hInstance = GetModuleHandle(NULL);
+ wclass.hIcon = NULL;
+ wclass.hCursor = NULL;
+ wclass.hbrBackground = NULL;
+ wclass.lpszMenuName = NULL;
+ wclass.lpszClassName = m_ClassName;
+
+ // register the class and ignore any error because we might
+ // be registering the class more than once
+ RegisterClass(&wclass);
+
+ // create the hidden window
+ m_WindowHandle = CreateWindow(
+ wclass.lpszClassName, // pointer to registered class name
+ TEXT(""), // pointer to window name
+ 0, // window style
+ 0, // horizontal position of window
+ 0, // vertical position of window
+ 0, // window width
+ 0, // window height
+ NULL, // handle to parent or owner window
+ NULL, // handle to menu or child-window identifier
+ wclass.hInstance, // handle to application instance
+ NULL);
+
+ // set a pointer to ourself as user data */
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable: 4244) // we have to test for this because SetWindowLongPtr
+ // is incorrectly defined, so we'll get a C4244 warning
+#endif // _MSC_VER
+ if (m_WindowHandle) {
+ SetWindowLongPtr(m_WindowHandle, GWL_USERDATA, NPT_POINTER_TO_LONG(this));
+ }
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif // _MSC_VER
+ m_hInstance = wclass.hInstance;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue
++---------------------------------------------------------------------*/
+NPT_Win32WindowMessageQueue::~NPT_Win32WindowMessageQueue()
+{
+ // remove ourself as user data to ensure we're not called anymore
+ SetWindowLongPtr(m_WindowHandle, GWL_USERDATA, 0);
+
+ // destroy the hidden window
+ DestroyWindow(m_WindowHandle);
+
+ // unregister the window class
+ UnregisterClass(m_ClassName, m_hInstance);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue::WindowProcedure
++---------------------------------------------------------------------*/
+LRESULT CALLBACK
+NPT_Win32WindowMessageQueue::WindowProcedure(HWND window,
+ UINT message,
+ WPARAM wparam,
+ LPARAM lparam)
+{
+ // if it is a windows message, just pass it along
+ if (message != (UINT) NPT_WIN32_MESSAGE_ID_BASE) {
+ return DefWindowProc(window, message, wparam, lparam);
+ }
+
+ // dispatch the message to the handler
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable: 4312) // we have to test for this because GetWindowLongPtr
+ // is incorrectly defined, so we'll get a C4244 warning
+#endif // _MSC_VER
+ NPT_Win32WindowMessageQueue* queue = reinterpret_cast<NPT_Win32WindowMessageQueue *>(GetWindowLongPtr(window, GWL_USERDATA));
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif // _MSC_VER
+ if (queue == NULL) {
+ return 0;
+ }
+ queue->HandleMessage(reinterpret_cast<NPT_Message*>(lparam),
+ reinterpret_cast<NPT_MessageHandler*>(wparam));
+ return 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue::PumpMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32WindowMessageQueue::PumpMessage(NPT_Timeout)
+{
+ // you cannot pump messages on this type of queue, since they will
+ // be pumped by the main windows message loop
+ return NPT_ERROR_NOT_SUPPORTED;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue::QueueMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32WindowMessageQueue::QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler)
+{
+ int result;
+
+ result = ::PostMessage(m_WindowHandle,
+ NPT_WIN32_MESSAGE_ID_BASE,
+ (WPARAM)handler,
+ (LPARAM)message);
+
+ if (result == 0) return NPT_FAILURE;
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue::HandleMessage
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32WindowMessageQueue::HandleMessage(NPT_Message* message,
+ NPT_MessageHandler* handler)
+{
+ NPT_Result result = NPT_FAILURE;
+
+ if (message && handler) {
+ result = handler->HandleMessage(message);
+ }
+ delete message;
+ return result;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h
new file mode 100644
index 0000000000..a5f846b016
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32MessageQueue.h
@@ -0,0 +1,49 @@
+/*****************************************************************
+|
+| Neptune - Win32 Message Queue
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+#ifndef _NPT_WIN32_MESSAGE_QUEUE_
+#define _NPT_WIN32_MESSAGE_QUEUE_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+#include <TCHAR.h>
+#include "NptStrings.h"
+#include "NptMessaging.h"
+#include "NptSimpleMessageQueue.h"
+
+/*----------------------------------------------------------------------
+| NPT_Win32WindowMessageQueue
++---------------------------------------------------------------------*/
+class NPT_Win32WindowMessageQueue : public NPT_MessageQueue
+{
+public:
+ NPT_Win32WindowMessageQueue();
+ ~NPT_Win32WindowMessageQueue();
+
+ // NPT_MessageQueue methods
+ virtual NPT_Result PumpMessage(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ virtual NPT_Result QueueMessage(NPT_Message* message,
+ NPT_MessageHandler* handler);
+
+ NPT_Result HandleMessage(NPT_Message* message, NPT_MessageHandler* handler);
+
+private:
+ static LRESULT CALLBACK WindowProcedure(HWND window,
+ UINT message,
+ WPARAM wparam,
+ LPARAM lparam);
+ HWND m_WindowHandle;
+ TCHAR m_ClassName[16];
+ HINSTANCE m_hInstance;
+};
+
+#endif // _NPT_WIN32_MESSAGE_QUEUE_
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.cpp
new file mode 100644
index 0000000000..4f8be9e9d1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.cpp
@@ -0,0 +1,253 @@
+/*****************************************************************
+|
+| Neptune - Network :: Winsock Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#define STRICT
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include "NptNetwork.h"
+#include "NptWin32Network.h"
+
+/*----------------------------------------------------------------------
+| static initializer
++---------------------------------------------------------------------*/
+NPT_WinsockSystem::NPT_WinsockSystem() {
+ WORD wVersionRequested;
+ WSADATA wsaData;
+ wVersionRequested = MAKEWORD(2, 2);
+ /*wVersionRequested = MAKEWORD(1, 1);*/
+ WSAStartup( wVersionRequested, &wsaData );
+}
+NPT_WinsockSystem::~NPT_WinsockSystem() {
+ WSACleanup();
+}
+NPT_WinsockSystem NPT_WinsockSystem::Initializer;
+
+#if defined(_WIN32_WCE)
+// don't use the SIO_GET_INTERFACE_LIST on Windows CE, it is
+// hopelessly broken, and will crash your application.
+#define NPT_NETWORK_USE_IP_HELPER_API
+#else
+#define NPT_NETWORK_USE_SIO_GET_INTERFACE_LIST
+#endif
+
+#if defined(NPT_NETWORK_USE_SIO_GET_INTERFACE_LIST)
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ // create a socket to talk to the TCP/IP stack
+ SOCKET net;
+ if((net = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0)) == INVALID_SOCKET) {
+ return NPT_FAILURE;
+ }
+
+ // get a list of interfaces
+ INTERFACE_INFO query[32]; // get up to 32 interfaces
+ DWORD bytes_returned;
+ int io_result = WSAIoctl(net,
+ SIO_GET_INTERFACE_LIST,
+ NULL, 0,
+ &query, sizeof(query),
+ &bytes_returned,
+ NULL, NULL);
+ if (io_result == SOCKET_ERROR) {
+ closesocket(net);
+ return NPT_FAILURE;
+ }
+
+ // we don't need the socket anymore
+ closesocket(net);
+
+ // Display interface information
+ int interface_count = (bytes_returned/sizeof(INTERFACE_INFO));
+ unsigned int iface_index = 0;
+ for (int i=0; i<interface_count; i++) {
+ SOCKADDR_IN* address;
+ NPT_Flags flags = 0;
+
+ // primary address
+ address = (SOCKADDR_IN*)&query[i].iiAddress;
+ NPT_IpAddress primary_address(ntohl(address->sin_addr.s_addr));
+
+ // netmask
+ address = (SOCKADDR_IN*)&query[i].iiNetmask;
+ NPT_IpAddress netmask(ntohl(address->sin_addr.s_addr));
+
+ // broadcast address
+ address = (SOCKADDR_IN*)&query[i].iiBroadcastAddress;
+ NPT_IpAddress broadcast_address(ntohl(address->sin_addr.s_addr));
+
+ {
+ // broadcast address is incorrect
+ unsigned char addr[4];
+ for(int i=0; i<4; i++) {
+ addr[i] = (primary_address.AsBytes()[i] & netmask.AsBytes()[i]) |
+ ~netmask.AsBytes()[i];
+ }
+ broadcast_address.Set(addr);
+ }
+
+ // ignore interfaces that are not up
+ if (!(query[i].iiFlags & IFF_UP)) {
+ continue;
+ }
+ if (query[i].iiFlags & IFF_BROADCAST) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_BROADCAST;
+ }
+ if (query[i].iiFlags & IFF_MULTICAST) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_MULTICAST;
+ }
+ if (query[i].iiFlags & IFF_LOOPBACK) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_LOOPBACK;
+ }
+ if (query[i].iiFlags & IFF_POINTTOPOINT) {
+ flags |= NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT;
+ }
+
+ // mac address (no support for this for now)
+ NPT_MacAddress mac;
+
+ // create an interface object
+ char iface_name[5];
+ iface_name[0] = 'i';
+ iface_name[1] = 'f';
+ iface_name[2] = '0'+(iface_index/10);
+ iface_name[3] = '0'+(iface_index%10);
+ iface_name[4] = '\0';
+ NPT_NetworkInterface* iface = new NPT_NetworkInterface(iface_name, mac, flags);
+
+ // set the interface address
+ NPT_NetworkInterfaceAddress iface_address(
+ primary_address,
+ broadcast_address,
+ NPT_IpAddress::Any,
+ netmask);
+ iface->AddAddress(iface_address);
+
+ // add the interface to the list
+ interfaces.Add(iface);
+
+ // increment the index (used for generating the name
+ iface_index++;
+ }
+
+ return NPT_SUCCESS;
+}
+#elif defined(NPT_NETWORK_USE_IP_HELPER_API)
+// Use the IP Helper API
+#include <iphlpapi.h>
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ IP_ADAPTER_ADDRESSES* iface_list = NULL;
+ ULONG size = sizeof(IP_ADAPTER_INFO);
+
+ // get the interface table
+ for(;;) {
+ iface_list = (IP_ADAPTER_ADDRESSES*)malloc(size);
+ DWORD result = GetAdaptersAddresses(AF_INET,
+ 0,
+ NULL,
+ iface_list, &size);
+ if (result == NO_ERROR) {
+ break;
+ } else {
+ if (result == ERROR_BUFFER_OVERFLOW) {
+ // free and try again
+ free(iface_list);
+ } else {
+ return NPT_FAILURE;
+ }
+ }
+ }
+
+ // iterate over the interfaces
+ for (IP_ADAPTER_ADDRESSES* iface = iface_list; iface; iface = iface->Next) {
+ // skip this interface if it is not up
+ if (iface->OperStatus != IfOperStatusUp) continue;
+
+ // get the interface type and mac address
+ NPT_MacAddress::Type mac_type;
+ switch (iface->IfType) {
+ case IF_TYPE_ETHERNET_CSMACD: mac_type = NPT_MacAddress::TYPE_ETHERNET; break;
+ case IF_TYPE_SOFTWARE_LOOPBACK: mac_type = NPT_MacAddress::TYPE_LOOPBACK; break;
+ case IF_TYPE_PPP: mac_type = NPT_MacAddress::TYPE_PPP; break;
+ default: mac_type = NPT_MacAddress::TYPE_UNKNOWN; break;
+ }
+ NPT_MacAddress mac(mac_type, iface->PhysicalAddress, iface->PhysicalAddressLength);
+
+ // compute interface flags
+ NPT_Flags flags = 0;
+ if (!(iface->Flags & IP_ADAPTER_NO_MULTICAST)) flags |= NPT_NETWORK_INTERFACE_FLAG_MULTICAST;
+ if (iface->IfType == IF_TYPE_SOFTWARE_LOOPBACK) flags |= NPT_NETWORK_INTERFACE_FLAG_LOOPBACK;
+ if (iface->IfType == IF_TYPE_PPP) flags |= NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT;
+
+ // compute the unicast address (only the first one is supported for now)
+ NPT_IpAddress primary_address;
+ if (iface->FirstUnicastAddress) {
+ if (iface->FirstUnicastAddress->Address.lpSockaddr == NULL) continue;
+ if (iface->FirstUnicastAddress->Address.iSockaddrLength != sizeof(SOCKADDR_IN)) continue;
+ SOCKADDR_IN* address = (SOCKADDR_IN*)iface->FirstUnicastAddress->Address.lpSockaddr;
+ if (address->sin_family != AF_INET) continue;
+ primary_address.Set(ntohl(address->sin_addr.s_addr));
+ }
+ NPT_IpAddress broadcast_address; // not supported yet
+ NPT_IpAddress netmask; // not supported yet
+
+ // convert the interface name to UTF-8
+ // BUG in Wine: FriendlyName is NULL
+ unsigned int iface_name_length = (unsigned int)iface->FriendlyName?wcslen(iface->FriendlyName):0;
+ char* iface_name = new char[4*iface_name_length+1];
+ int result = WideCharToMultiByte(
+ CP_UTF8, 0, iface->FriendlyName, iface_name_length,
+ iface_name, 4*iface_name_length+1,
+ NULL, NULL);
+ if (result > 0) {
+ iface_name[result] = '\0';
+ } else {
+ iface_name[0] = '\0';
+ }
+
+ // create an interface descriptor
+ NPT_NetworkInterface* iface_object = new NPT_NetworkInterface(iface_name, mac, flags);
+ NPT_NetworkInterfaceAddress iface_address(
+ primary_address,
+ broadcast_address,
+ NPT_IpAddress::Any,
+ netmask);
+ iface_object->AddAddress(iface_address);
+
+ // cleanup
+ delete[] iface_name;
+
+ // add the interface to the list
+ interfaces.Add(iface_object);
+ }
+
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>&)
+{
+ return NPT_SUCCESS;
+}
+#endif
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.h b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.h
new file mode 100644
index 0000000000..1fc7695879
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Network.h
@@ -0,0 +1,20 @@
+/*****************************************************************
+|
+| Neptune - Network :: Winsock Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| static initializer
++---------------------------------------------------------------------*/
+class NPT_WinsockSystem {
+public:
+ static NPT_WinsockSystem Initializer;
+ ~NPT_WinsockSystem();
+
+private:
+ NPT_WinsockSystem();
+};
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp
new file mode 100644
index 0000000000..1ca9bf4c72
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Queue.cpp
@@ -0,0 +1,216 @@
+/*****************************************************************
+|
+| Neptune - Queue :: Win32 Implementation
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(_XBOX)
+#include <xtl.h>
+#else
+#include <windows.h>
+#endif
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptQueue.h"
+#include "NptThreads.h"
+#include "NptList.h"
+#include "NptDebug.h"
+#include "NptWin32Threads.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+//NPT_SET_LOCAL_LOGGER("neptune.queue.win32")
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue
++---------------------------------------------------------------------*/
+class NPT_Win32Queue : public NPT_GenericQueue
+{
+public:
+ // methods
+ NPT_Win32Queue(NPT_Cardinal max_items);
+ ~NPT_Win32Queue();
+ NPT_Result Push(NPT_QueueItem* item, NPT_Timeout timeout);
+ NPT_Result Pop(NPT_QueueItem*& item, NPT_Timeout timeout);
+ NPT_Result Peek(NPT_QueueItem*& item, NPT_Timeout timeout);
+
+
+private:
+ // members
+ NPT_Cardinal m_MaxItems;
+ NPT_Win32CriticalSection m_Mutex;
+ NPT_Win32Event* m_CanPushCondition;
+ NPT_Win32Event* m_CanPopCondition;
+ NPT_List<NPT_QueueItem*> m_Items; // should be volatile ?
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue::NPT_Win32Queue
++---------------------------------------------------------------------*/
+NPT_Win32Queue::NPT_Win32Queue(NPT_Cardinal max_items) :
+ m_MaxItems(max_items)
+{
+ m_CanPushCondition = new NPT_Win32Event(true, true);
+ m_CanPopCondition = new NPT_Win32Event(true, false);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue::~NPT_Win32Queue()
++---------------------------------------------------------------------*/
+NPT_Win32Queue::~NPT_Win32Queue()
+{
+ // destroy resources
+ delete m_CanPushCondition;
+ delete m_CanPopCondition;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue::Push
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Queue::Push(NPT_QueueItem* item, NPT_Timeout timeout)
+{
+ // lock the mutex that protects the list
+ NPT_CHECK(m_Mutex.Lock());
+
+ // check that we have not exceeded the max
+ if (m_MaxItems) {
+ while (m_Items.GetItemCount() >= m_MaxItems) {
+ // we must wait until some items have been removed
+
+ // reset the condition to indicate that the queue is full
+ m_CanPushCondition->Reset();
+
+ // unlock the mutex so that another thread can pop
+ m_Mutex.Unlock();
+
+ // wait for the condition to signal that we can push
+ NPT_Result result = m_CanPushCondition->Wait(timeout);
+ if (NPT_FAILED(result)) return result;
+
+ // relock the mutex so that we can check the list again
+ NPT_CHECK(m_Mutex.Lock());
+ }
+ }
+
+ // add the item to the list
+ m_Items.Add(item);
+
+ // wake up the threads waiting to pop
+ m_CanPopCondition->Signal();
+
+ // unlock the mutex
+ m_Mutex.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue::Pop
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Queue::Pop(NPT_QueueItem*& item, NPT_Timeout timeout)
+{
+ // default value
+ item = NULL;
+
+ // lock the mutex that protects the list
+ NPT_CHECK(m_Mutex.Lock());
+
+ NPT_Result result;
+ if (timeout) {
+ while ((result = m_Items.PopHead(item)) == NPT_ERROR_LIST_EMPTY) {
+ // no item in the list, wait for one
+
+ // reset the condition to indicate that the queue is empty
+ m_CanPopCondition->Reset();
+
+ // unlock the mutex so that another thread can push
+ m_Mutex.Unlock();
+
+ // wait for the condition to signal that we can pop
+ NPT_Result result = m_CanPopCondition->Wait(timeout);
+ if (NPT_FAILED(result)) return result;
+
+ // relock the mutex so that we can check the list again
+ NPT_CHECK(m_Mutex.Lock());
+ }
+ } else {
+ result = m_Items.PopHead(item);
+ }
+
+ if (m_MaxItems && (result == NPT_SUCCESS)) {
+ // wake up the threads waiting to push
+ m_CanPushCondition->Signal();
+ }
+
+ // unlock the mutex
+ m_Mutex.Unlock();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Queue::Peek
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Queue::Peek(NPT_QueueItem*& item, NPT_Timeout timeout)
+{
+ // default value
+ item = NULL;
+
+ // lock the mutex that protects the list
+ NPT_CHECK(m_Mutex.Lock());
+
+ NPT_Result result = NPT_SUCCESS;
+ NPT_List<NPT_QueueItem*>::Iterator head = m_Items.GetFirstItem();
+ if (timeout) {
+ while (!head) {
+ // no item in the list, wait for one
+
+ // reset the condition to indicate that the queue is empty
+ m_CanPopCondition->Reset();
+
+ // unlock the mutex so that another thread can push
+ m_Mutex.Unlock();
+
+ // wait for the condition to signal that we can pop
+ NPT_Result result = m_CanPopCondition->Wait(timeout);
+ if (NPT_FAILED(result)) return result;
+
+ // relock the mutex so that we can check the list again
+ NPT_CHECK(m_Mutex.Lock());
+
+ // try again
+ head = m_Items.GetFirstItem();
+ }
+ } else {
+ if (!head) result = NPT_ERROR_LIST_EMPTY;
+ }
+
+ if (head) item = *head;
+
+ // unlock the mutex
+ m_Mutex.Unlock();
+
+ return result;
+}
+
+/*----------------------------------------------------------------------
+| NPT_GenericQueue::CreateInstance
++---------------------------------------------------------------------*/
+NPT_GenericQueue*
+NPT_GenericQueue::CreateInstance(NPT_Cardinal max_items)
+{
+ return new NPT_Win32Queue(max_items);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp
new file mode 100644
index 0000000000..8edd0ff0a0
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32SerialPort.cpp
@@ -0,0 +1,337 @@
+/*****************************************************************
+|
+| Neptune - Serial Ports :: Win32 Implementation
+|
+| (c) 2001-2007 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+
+#include "NptUtils.h"
+#include "NptSerialPort.h"
+#include "NptStrings.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| NPT_Win32HandletWrapper
++---------------------------------------------------------------------*/
+class NPT_Win32HandleWrapper
+{
+public:
+ // constructors and destructor
+ NPT_Win32HandleWrapper(HANDLE handle) : m_Handle(handle) {}
+ ~NPT_Win32HandleWrapper() {
+ CloseHandle(m_Handle);
+ }
+
+ // methods
+ HANDLE GetHandle() { return m_Handle; }
+
+private:
+ // members
+ HANDLE m_Handle;
+};
+
+typedef NPT_Reference<NPT_Win32HandleWrapper> NPT_Win32HandleReference;
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPortStream
++---------------------------------------------------------------------*/
+class NPT_Win32SerialPortStream
+{
+public:
+ // constructors and destructor
+ NPT_Win32SerialPortStream(NPT_Win32HandleReference handle) :
+ m_HandleReference(handle) {}
+
+protected:
+ // constructors and destructors
+ virtual ~NPT_Win32SerialPortStream() {}
+
+ // members
+ NPT_Win32HandleReference m_HandleReference;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPortInputStream
++---------------------------------------------------------------------*/
+class NPT_Win32SerialPortInputStream : public NPT_InputStream,
+ private NPT_Win32SerialPortStream
+
+{
+public:
+ // constructors and destructor
+ NPT_Win32SerialPortInputStream(NPT_Win32HandleReference& handle) :
+ NPT_Win32SerialPortStream(handle) {}
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read);
+ NPT_Result Seek(NPT_Position /* offset */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result Tell(NPT_Position& /* offset */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result GetSize(NPT_LargeSize& /* size */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result GetAvailable(NPT_LargeSize& /* available */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPortInputStream::Read
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPortInputStream::Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read)
+{
+ DWORD nb_read = 0;
+ BOOL result = ReadFile(m_HandleReference->GetHandle(),
+ buffer,
+ bytes_to_read,
+ &nb_read,
+ NULL);
+ if (result == TRUE) {
+ if (bytes_read) *bytes_read = nb_read;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_read) *bytes_read = 0;
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPortOutputStream
++---------------------------------------------------------------------*/
+class NPT_Win32SerialPortOutputStream : public NPT_OutputStream,
+ private NPT_Win32SerialPortStream
+{
+public:
+ // constructors and destructor
+ NPT_Win32SerialPortOutputStream(NPT_Win32HandleReference& handle) :
+ NPT_Win32SerialPortStream(handle) {}
+
+ // NPT_InputStream methods
+ NPT_Result Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written);
+ NPT_Result Seek(NPT_Position /* offset */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+ NPT_Result Tell(NPT_Position& /* offset */) {
+ return NPT_ERROR_NOT_SUPPORTED;
+ }
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPortOutputStream::Write
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPortOutputStream::Write(const void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written)
+{
+ DWORD nb_written = 0;
+
+ BOOL result = WriteFile(m_HandleReference->GetHandle(),
+ buffer,
+ bytes_to_write,
+ &nb_written,
+ NULL);
+ if (result == TRUE) {
+ if (bytes_written) *bytes_written = nb_written;
+ return NPT_SUCCESS;
+ } else {
+ if (bytes_written) *bytes_written = 0;
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort
++---------------------------------------------------------------------*/
+class NPT_Win32SerialPort: public NPT_SerialPortInterface
+{
+public:
+ // constructors and destructor
+ NPT_Win32SerialPort(const char* name);
+ ~NPT_Win32SerialPort();
+
+ // NPT_SerialPortInterface methods
+ NPT_Result Open(unsigned int speed,
+ NPT_SerialPortStopBits stop_bits = NPT_SERIAL_PORT_STOP_BITS_1,
+ NPT_SerialPortFlowControl flow_control = NPT_SERIAL_PORT_FLOW_CONTROL_NONE,
+ NPT_SerialPortParity parity = NPT_SERIAL_PORT_PARITY_NONE);
+ NPT_Result Close();
+ NPT_Result GetInputStream(NPT_InputStreamReference& stream);
+ NPT_Result GetOutputStream(NPT_OutputStreamReference& stream);
+
+private:
+ // members
+ NPT_String m_Name;
+ NPT_Win32HandleReference m_HandleReference;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::NPT_Win32SerialPort
++---------------------------------------------------------------------*/
+NPT_Win32SerialPort::NPT_Win32SerialPort(const char* name) :
+ m_Name(name)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::~NPT_Win32SerialPort
++---------------------------------------------------------------------*/
+NPT_Win32SerialPort::~NPT_Win32SerialPort()
+{
+ Close();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::Open
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPort::Open(unsigned int speed,
+ NPT_SerialPortStopBits stop_bits,
+ NPT_SerialPortFlowControl flow_control,
+ NPT_SerialPortParity parity)
+{
+ // check if we're already open
+ if (!m_HandleReference.IsNull()) {
+ return NPT_ERROR_SERIAL_PORT_ALREADY_OPEN;
+ }
+
+ HANDLE handle = CreateFile(m_Name,
+ GENERIC_READ | GENERIC_WRITE,
+ 0,
+ 0,
+ OPEN_EXISTING,
+ 0,
+ 0);
+ if (handle == INVALID_HANDLE_VALUE) {
+ return NPT_ERROR_NO_SUCH_SERIAL_PORT;
+ }
+
+ // set the parameters
+ DCB dcb;
+ NPT_SetMemory(&dcb, 0, sizeof(dcb));
+ dcb.DCBlength = sizeof(DCB);
+ if (!GetCommState(handle, &dcb)) {
+ CloseHandle(handle);
+ return NPT_FAILURE;
+ }
+ dcb.fBinary = TRUE;
+ dcb.BaudRate = speed;
+ switch (stop_bits) {
+ case NPT_SERIAL_PORT_STOP_BITS_1: dcb.StopBits = ONESTOPBIT; break;
+ case NPT_SERIAL_PORT_STOP_BITS_1_5: dcb.StopBits = ONE5STOPBITS; break;
+ case NPT_SERIAL_PORT_STOP_BITS_2: dcb.StopBits = TWOSTOPBITS; break;
+ }
+ switch (flow_control) {
+ case NPT_SERIAL_PORT_FLOW_CONTROL_NONE:
+ dcb.fOutX = dcb.fOutxCtsFlow = dcb.fOutxDsrFlow = FALSE;
+ dcb.fInX = dcb.fDsrSensitivity = FALSE;
+ dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ dcb.fDtrControl = DTR_CONTROL_DISABLE;
+ break;
+
+ case NPT_SERIAL_PORT_FLOW_CONTROL_HARDWARE:
+ dcb.fOutX = dcb.fOutxDsrFlow = FALSE;
+ dcb.fOutxCtsFlow = TRUE;
+ dcb.fInX = dcb.fDsrSensitivity = FALSE;
+ dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
+ dcb.fDtrControl = DTR_CONTROL_DISABLE;
+ break;
+
+ case NPT_SERIAL_PORT_FLOW_CONTROL_XON_XOFF:
+ dcb.fOutX = TRUE;
+ dcb.fOutxCtsFlow = dcb.fOutxDsrFlow = FALSE;
+ dcb.fInX = TRUE;
+ dcb.fDsrSensitivity = FALSE;
+ dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ dcb.fDtrControl = DTR_CONTROL_DISABLE;
+ break;
+ }
+ switch (parity) {
+ case NPT_SERIAL_PORT_PARITY_NONE: dcb.fParity = FALSE; dcb.Parity = NOPARITY; break;
+ case NPT_SERIAL_PORT_PARITY_EVEN: dcb.fParity = TRUE; dcb.Parity = EVENPARITY; break;
+ case NPT_SERIAL_PORT_PARITY_ODD: dcb.fParity = TRUE; dcb.Parity = ODDPARITY; break;
+ case NPT_SERIAL_PORT_PARITY_MARK: dcb.fParity = TRUE; dcb.Parity = MARKPARITY; break;
+ }
+ if (!SetCommState(handle, &dcb)) {
+ CloseHandle(handle);
+ return NPT_FAILURE;
+ }
+
+ // create a reference to the FILE object
+ m_HandleReference = new NPT_Win32HandleWrapper(handle);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::Close
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPort::Close()
+{
+ // release the file reference
+ m_HandleReference = NULL;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::GetInputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPort::GetInputStream(NPT_InputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_HandleReference.IsNull()) return NPT_ERROR_SERIAL_PORT_NOT_OPEN;
+
+ // create a stream
+ stream = new NPT_Win32SerialPortInputStream(m_HandleReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SerialPort::GetOutputStream
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SerialPort::GetOutputStream(NPT_OutputStreamReference& stream)
+{
+ // default value
+ stream = NULL;
+
+ // check that the file is open
+ if (m_HandleReference.IsNull()) return NPT_ERROR_SERIAL_PORT_NOT_OPEN;
+
+ // create a stream
+ stream = new NPT_Win32SerialPortOutputStream(m_HandleReference);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SerialPort::NPT_SerialPort
++---------------------------------------------------------------------*/
+NPT_SerialPort::NPT_SerialPort(const char* name)
+{
+ m_Delegate = new NPT_Win32SerialPort(name);
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32System.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32System.cpp
new file mode 100644
index 0000000000..6388392c54
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32System.cpp
@@ -0,0 +1,138 @@
+/*****************************************************************
+|
+| Neptune - System :: Win32 Implementation
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(_XBOX)
+#include <xtl.h>
+#else
+#include <windows.h>
+#endif
+
+#if !defined(_WIN32_WCE)
+#include <sys/timeb.h>
+#endif
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptSystem.h"
+#include "NptResults.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_System::GetProcessId
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetProcessId(NPT_UInt32& id)
+{
+ //id = getpid();
+ id = 0;
+ return NPT_SUCCESS;
+}
+
+#if defined(_WIN32_WCE)
+/*----------------------------------------------------------------------
+| NPT_System::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ SYSTEMTIME stime;
+ FILETIME ftime;
+ __int64 time64;
+ GetSystemTime(&stime);
+ SystemTimeToFileTime(&stime, &ftime);
+
+ /* convert to 64-bits 100-nanoseconds value */
+ time64 = (((unsigned __int64)ftime.dwHighDateTime)<<32) | ((unsigned __int64)ftime.dwLowDateTime);
+ time64 -= 116444736000000000; /* convert from the Windows epoch (Jan. 1, 1601) to the
+ * Unix epoch (Jan. 1, 1970) */
+
+ now.m_Seconds = (NPT_Int32)(time64/10000000);
+ now.m_NanoSeconds = 100*(NPT_Int32)(time64-((unsigned __int64)now.m_Seconds*10000000));
+
+ return NPT_SUCCESS;
+}
+#else
+/*----------------------------------------------------------------------
+| NPT_System::GetCurrentTimeStamp
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::GetCurrentTimeStamp(NPT_TimeStamp& now)
+{
+ struct _timeb time_stamp;
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+ _ftime_s(&time_stamp);
+#else
+ _ftime(&time_stamp);
+#endif
+ now.m_Seconds = (long)time_stamp.time;
+ now.m_NanoSeconds = (long)time_stamp.millitm*1000000;
+
+ return NPT_SUCCESS;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_System::Sleep
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::Sleep(const NPT_TimeInterval& duration)
+{
+ DWORD milliseconds = 1000*duration.m_Seconds + duration.m_NanoSeconds/1000000;
+ ::Sleep(milliseconds);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SleepUntil
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SleepUntil(const NPT_TimeStamp& when)
+{
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ if (when > now) {
+ NPT_TimeInterval duration = when-now;
+ return Sleep(duration);
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::SetRandomSeed
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_System::SetRandomSeed(unsigned int seed)
+{
+ srand(seed);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_System::NPT_System
++---------------------------------------------------------------------*/
+NPT_UInt32
+NPT_System::GetRandomInteger()
+{
+ static bool seeded = false;
+ if (seeded == false) {
+ NPT_TimeStamp now;
+ GetCurrentTimeStamp(now);
+ srand(now.m_NanoSeconds);
+ seeded = true;
+ }
+
+ return rand();
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.cpp b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.cpp
new file mode 100644
index 0000000000..46b4a18e91
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.cpp
@@ -0,0 +1,590 @@
+/*****************************************************************
+|
+| Neptune - Threads :: Win32 Implementation
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#if defined(_XBOX)
+#include <xtl.h>
+#else
+#include <windows.h>
+#if !defined(_WIN32_WCE)
+#include <process.h>
+#endif
+#endif
+
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptThreads.h"
+#include "NptDebug.h"
+#include "NptResults.h"
+#include "NptWin32Threads.h"
+#include "NptTime.h"
+#include "NptSystem.h"
+#include "NptLogging.h"
+
+/*----------------------------------------------------------------------
+| logging
++---------------------------------------------------------------------*/
+NPT_SET_LOCAL_LOGGER("neptune.threads.win32")
+
+/*----------------------------------------------------------------------
+| configuration macros
++---------------------------------------------------------------------*/
+#if defined(_WIN32_WCE) || defined(_XBOX)
+#define NPT_WIN32_USE_CREATE_THREAD
+#endif
+
+#if defined(NPT_WIN32_USE_CREATE_THREAD)
+#define _beginthreadex(security, stack_size, start_proc, arg, flags, pid) \
+CreateThread(security, stack_size, (LPTHREAD_START_ROUTINE) start_proc, \
+ arg, flags, (LPDWORD)pid)
+#define _endthreadex ExitThread
+#endif
+
+/*----------------------------------------------------------------------
+| NPT_Win32Mutex::NPT_Win32Mutex
++---------------------------------------------------------------------*/
+NPT_Win32Mutex::NPT_Win32Mutex()
+{
+ m_Handle = CreateMutex(NULL, FALSE, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Mutex::~NPT_Win32Mutex
++---------------------------------------------------------------------*/
+NPT_Win32Mutex::~NPT_Win32Mutex()
+{
+ CloseHandle(m_Handle);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Mutex::Lock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Mutex::Lock()
+{
+ DWORD result = WaitForSingleObject(m_Handle, INFINITE);
+ if (result == WAIT_OBJECT_0) {
+ return NPT_SUCCESS;
+ } else {
+ return NPT_FAILURE;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Mutex::Unlock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Mutex::Unlock()
+{
+ ReleaseMutex(m_Handle);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Mutex::NPT_Mutex
++---------------------------------------------------------------------*/
+NPT_Mutex::NPT_Mutex()
+{
+ m_Delegate = new NPT_Win32Mutex();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32CriticalSection::NPT_Win32CriticalSection
++---------------------------------------------------------------------*/
+NPT_Win32CriticalSection::NPT_Win32CriticalSection()
+{
+ InitializeCriticalSection(&m_CriticalSection);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32CriticalSection::~NPT_Win32CriticalSection
++---------------------------------------------------------------------*/
+NPT_Win32CriticalSection::~NPT_Win32CriticalSection()
+{
+ DeleteCriticalSection(&m_CriticalSection);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32CriticalSection::Lock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32CriticalSection::Lock()
+{
+ EnterCriticalSection(&m_CriticalSection);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32CriticalSection::Unlock
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32CriticalSection::Unlock()
+{
+ LeaveCriticalSection(&m_CriticalSection);
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event::NPT_Win32Event
++---------------------------------------------------------------------*/
+NPT_Win32Event::NPT_Win32Event(bool manual /* = false */, bool initial /* = false */)
+{
+ m_Event = CreateEvent(NULL, (manual==true)?TRUE:FALSE, (initial==true)?TRUE:FALSE, NULL);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event::~NPT_Win32Event
++---------------------------------------------------------------------*/
+NPT_Win32Event::~NPT_Win32Event()
+{
+ CloseHandle(m_Event);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event::Wait
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Event::Wait(NPT_Timeout timeout)
+{
+ if (m_Event) {
+ DWORD result = WaitForSingleObject(m_Event, timeout==NPT_TIMEOUT_INFINITE?INFINITE:timeout);
+ if (result == WAIT_TIMEOUT) {
+ return NPT_ERROR_TIMEOUT;
+ }
+ if (result != WAIT_OBJECT_0 && result != WAIT_ABANDONED) {
+ return NPT_FAILURE;
+ }
+ }
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event::Signal
++---------------------------------------------------------------------*/
+void
+NPT_Win32Event::Signal()
+{
+ SetEvent(m_Event);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event::Reset
++---------------------------------------------------------------------*/
+void
+NPT_Win32Event::Reset()
+{
+ ResetEvent(m_Event);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable
++---------------------------------------------------------------------*/
+class NPT_Win32SharedVariable : public NPT_SharedVariableInterface
+{
+ public:
+ // methods
+ NPT_Win32SharedVariable(int value);
+ ~NPT_Win32SharedVariable();
+ void SetValue(int value);
+ int GetValue();
+ NPT_Result WaitUntilEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ NPT_Result WaitWhileEquals(int value, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+ private:
+ // members
+ volatile int m_Value;
+ NPT_Mutex m_Lock;
+ NPT_Win32Event m_Event;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::NPT_Win32SharedVariable
++---------------------------------------------------------------------*/
+NPT_Win32SharedVariable::NPT_Win32SharedVariable(int value) :
+ m_Value(value)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::~NPT_Win32SharedVariable
++---------------------------------------------------------------------*/
+NPT_Win32SharedVariable::~NPT_Win32SharedVariable()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::SetValue
++---------------------------------------------------------------------*/
+void
+NPT_Win32SharedVariable::SetValue(int value)
+{
+ m_Lock.Lock();
+ if (value != m_Value) {
+ m_Value = value;
+ m_Event.Signal();
+ }
+ m_Lock.Unlock();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::GetValue
++---------------------------------------------------------------------*/
+int
+NPT_Win32SharedVariable::GetValue()
+{
+ // reading an integer should be atomic on all Win32 platforms
+ return m_Value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::WaitUntilEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SharedVariable::WaitUntilEquals(int value, NPT_Timeout timeout)
+{
+ do {
+ m_Lock.Lock();
+ if (m_Value == value) {
+ break;
+ }
+ m_Lock.Unlock();
+ {
+ NPT_Result result = m_Event.Wait(timeout);
+ if (NPT_FAILED(result)) return result;
+ }
+ } while (1);
+
+ m_Lock.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32SharedVariable::WaitWhileEquals
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32SharedVariable::WaitWhileEquals(int value, NPT_Timeout timeout)
+{
+ do {
+ m_Lock.Lock();
+ if (m_Value != value) {
+ break;
+ }
+ m_Lock.Unlock();
+ {
+ NPT_Result result = m_Event.Wait(timeout);
+ if (NPT_FAILED(result)) return result;
+ }
+ } while (1);
+
+ m_Lock.Unlock();
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_SharedVariable::NPT_SharedVariable
++---------------------------------------------------------------------*/
+NPT_SharedVariable::NPT_SharedVariable(int value)
+{
+ m_Delegate = new NPT_Win32SharedVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable
++---------------------------------------------------------------------*/
+class NPT_Win32AtomicVariable : public NPT_AtomicVariableInterface
+{
+ public:
+ // methods
+ NPT_Win32AtomicVariable(int value);
+ ~NPT_Win32AtomicVariable();
+ int Increment();
+ int Decrement();
+ void SetValue(int value);
+ int GetValue();
+
+ private:
+ // members
+ volatile LONG m_Value;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::NPT_Win32AtomicVariable
++---------------------------------------------------------------------*/
+NPT_Win32AtomicVariable::NPT_Win32AtomicVariable(int value) :
+ m_Value(value)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::~NPT_Win32AtomicVariable
++---------------------------------------------------------------------*/
+NPT_Win32AtomicVariable::~NPT_Win32AtomicVariable()
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::Increment
++---------------------------------------------------------------------*/
+int
+NPT_Win32AtomicVariable::Increment()
+{
+ return InterlockedIncrement(const_cast<LONG*>(&m_Value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::Decrement
++---------------------------------------------------------------------*/
+int
+NPT_Win32AtomicVariable::Decrement()
+{
+ return InterlockedDecrement(const_cast<LONG*>(&m_Value));
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::SetValue
++---------------------------------------------------------------------*/
+void
+NPT_Win32AtomicVariable::SetValue(int value)
+{
+ m_Value = value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32AtomicVariable::GetValue
++---------------------------------------------------------------------*/
+int
+NPT_Win32AtomicVariable::GetValue()
+{
+ return m_Value;
+}
+
+/*----------------------------------------------------------------------
+| NPT_AtomicVariable::NPT_AtomicVariable
++---------------------------------------------------------------------*/
+NPT_AtomicVariable::NPT_AtomicVariable(int value)
+{
+ m_Delegate = new NPT_Win32AtomicVariable(value);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread
++---------------------------------------------------------------------*/
+class NPT_Win32Thread : public NPT_ThreadInterface
+{
+ public:
+ // methods
+ NPT_Win32Thread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached);
+ ~NPT_Win32Thread();
+ NPT_Result Start();
+ NPT_Result Wait(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+
+ private:
+ // methods
+ static unsigned int __stdcall EntryPoint(void* argument);
+
+ // NPT_Runnable methods
+ void Run();
+
+ // NPT_Interruptible methods
+ NPT_Result Interrupt() { return NPT_ERROR_NOT_IMPLEMENTED; }
+
+ // members
+ NPT_Thread* m_Delegator;
+ NPT_Runnable& m_Target;
+ bool m_Detached;
+ HANDLE m_ThreadHandle;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::NPT_Win32Thread
++---------------------------------------------------------------------*/
+NPT_Win32Thread::NPT_Win32Thread(NPT_Thread* delegator,
+ NPT_Runnable& target,
+ bool detached) :
+ m_Delegator(delegator),
+ m_Target(target),
+ m_Detached(detached),
+ m_ThreadHandle(0)
+{
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::~NPT_Win32Thread
++---------------------------------------------------------------------*/
+NPT_Win32Thread::~NPT_Win32Thread()
+{
+ if (!m_Detached) {
+ // we're not detached, and not in the Run() method, so we need to
+ // wait until the thread is done
+ Wait();
+ }
+
+ // close the thread handle
+ if (m_ThreadHandle) {
+ CloseHandle(m_ThreadHandle);
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::EntryPoint
++---------------------------------------------------------------------*/
+unsigned int __stdcall
+NPT_Win32Thread::EntryPoint(void* argument)
+{
+ NPT_Win32Thread* thread = reinterpret_cast<NPT_Win32Thread*>(argument);
+
+ NPT_LOG_FINER("thread in =======================");
+
+ // set random seed per thread
+ NPT_TimeStamp now;
+ NPT_System::GetCurrentTimeStamp(now);
+ NPT_System::SetRandomSeed(now.m_NanoSeconds + ::GetCurrentThreadId());
+
+ // set a default name
+ #pragma pack(push,8)
+ struct THREADNAME_INFO
+ {
+ DWORD dwType; // must be 0x1000
+ LPCSTR szName; // pointer to name (in same addr space)
+ DWORD dwThreadID; // thread ID (-1 caller thread)
+ DWORD dwFlags; // reserved for future use, most be zero
+ } info;
+ #pragma pack(pop)
+ info.dwType = 0x1000;
+ info.szName = "Neptune Thread";
+ info.dwThreadID = GetCurrentThreadId();
+ info.dwFlags = 0;
+ __try
+ {
+ RaiseException(0x406d1388, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR *)&info);
+ }
+ __except(EXCEPTION_EXECUTE_HANDLER)
+ {
+ }
+
+ // run the thread
+ thread->Run();
+
+ // if the thread is detached, delete it
+ if (thread->m_Detached) {
+ delete thread->m_Delegator;
+ }
+
+ // done
+ return 0;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::Start
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Thread::Start()
+{
+ if (m_ThreadHandle > 0) {
+ // failed
+ NPT_LOG_WARNING("thread already started !");
+ return NPT_ERROR_INVALID_STATE;
+ }
+
+ NPT_LOG_FINER("creating thread");
+
+ // create the native thread
+#if defined(_WIN32_WCE)
+ DWORD thread_id;
+#else
+ unsigned int thread_id;
+#endif
+ // create a stack local variable 'detached', as this object
+ // may already be deleted when _beginthreadex returns and
+ // before we get to call detach on the given thread
+ bool detached = m_Detached;
+
+ HANDLE thread_handle = (HANDLE)
+ _beginthreadex(NULL,
+ NPT_CONFIG_THREAD_STACK_SIZE,
+ EntryPoint,
+ reinterpret_cast<void*>(this),
+ 0,
+ &thread_id);
+ if (thread_handle == 0) {
+ // failed
+ return NPT_FAILURE;
+ }
+
+ if (detached) {
+ CloseHandle(thread_handle);
+ } else {
+ m_ThreadHandle = thread_handle;
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::Run
++---------------------------------------------------------------------*/
+void
+NPT_Win32Thread::Run()
+{
+ m_Target.Run();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Win32Thread::Wait
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Win32Thread::Wait(NPT_Timeout timeout /* = NPT_TIMEOUT_INFINITE */)
+{
+ // check that we're not detached
+ if (m_ThreadHandle == 0 || m_Detached) {
+ return NPT_FAILURE;
+ }
+
+ // wait for the thread to finish
+ // Logging here will cause a crash on exit because LogManager may already be destroyed
+ DWORD result = WaitForSingleObject(m_ThreadHandle,
+ timeout==NPT_TIMEOUT_INFINITE?INFINITE:timeout);
+ if (result != WAIT_OBJECT_0) {
+ return NPT_FAILURE;
+ } else {
+ return NPT_SUCCESS;
+ }
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::GetCurrentThreadId
++---------------------------------------------------------------------*/
+NPT_Thread::ThreadId
+NPT_Thread::GetCurrentThreadId()
+{
+ return ::GetCurrentThreadId();
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(bool detached)
+{
+ m_Delegate = new NPT_Win32Thread(this, *this, detached);
+}
+
+/*----------------------------------------------------------------------
+| NPT_Thread::NPT_Thread
++---------------------------------------------------------------------*/
+NPT_Thread::NPT_Thread(NPT_Runnable& target, bool detached)
+{
+ m_Delegate = new NPT_Win32Thread(this, target, detached);
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.h b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.h
new file mode 100644
index 0000000000..e8f32cc00c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Win32/NptWin32Threads.h
@@ -0,0 +1,73 @@
+/*****************************************************************
+|
+| Neptune - Threads :: Win32 Implementation
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptTypes.h"
+#include "NptThreads.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| NPT_Win32Mutex
++---------------------------------------------------------------------*/
+class NPT_Win32Mutex : public NPT_MutexInterface
+{
+public:
+ // methods
+ NPT_Win32Mutex();
+ virtual ~NPT_Win32Mutex();
+
+ // NPT_Mutex methods
+ virtual NPT_Result Lock();
+ virtual NPT_Result Unlock();
+
+private:
+ // members
+ HANDLE m_Handle;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32Event
++---------------------------------------------------------------------*/
+class NPT_Win32Event
+{
+public:
+ // methods
+ NPT_Win32Event(bool manual = false, bool initial = false);
+ virtual ~NPT_Win32Event();
+
+ virtual NPT_Result Wait(NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+ virtual void Signal();
+ virtual void Reset();
+
+private:
+ // members
+ HANDLE m_Event;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Win32CriticalSection
++---------------------------------------------------------------------*/
+class NPT_Win32CriticalSection
+{
+public:
+ // methods
+ NPT_Win32CriticalSection();
+ ~NPT_Win32CriticalSection();
+
+ // NPT_Mutex methods
+ NPT_Result Lock();
+ NPT_Result Unlock();
+
+private:
+ // members
+ CRITICAL_SECTION m_CriticalSection;
+};
diff --git a/lib/libUPnP/Neptune/Source/System/WinCE/NptWinCeUtils.h b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinCeUtils.h
new file mode 100644
index 0000000000..5ec28b9ea6
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinCeUtils.h
@@ -0,0 +1,92 @@
+/*****************************************************************
+|
+| Neptune - Windows CE Utils
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+
+#ifndef _NPT_WINCE_UTILS_H_
+#define _NPT_WINCE_UTILS_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+
+/*----------------------------------------------------------------------
+| fix windows macros
++---------------------------------------------------------------------*/
+#if defined(CreateDirectory)
+#undef CreateDirectory
+#endif
+
+#if defined(DeleteFile)
+#undef DeleteFile
+#endif
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+
+/*----------------------------------------------------------------------
+| A2WHelper
++---------------------------------------------------------------------*/
+static LPWSTR A2WHelper(LPWSTR lpw, LPCSTR lpa, int nChars, UINT acp)
+{
+ int ret;
+
+ assert(lpa != NULL);
+ assert(lpw != NULL);
+ if (lpw == NULL || lpa == NULL) return NULL;
+
+ lpw[0] = '\0';
+ ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars);
+ if (ret == 0) {
+ assert(0);
+ return NULL;
+ }
+ return lpw;
+}
+
+/*----------------------------------------------------------------------
+| W2AHelper
++---------------------------------------------------------------------*/
+static LPSTR W2AHelper(LPSTR lpa, LPCWSTR lpw, int nChars, UINT acp)
+{
+ int ret;
+
+ assert(lpw != NULL);
+ assert(lpa != NULL);
+ if (lpa == NULL || lpw == NULL) return NULL;
+
+ lpa[0] = '\0';
+ ret = WideCharToMultiByte(acp, 0, lpw, -1, lpa, nChars, NULL, NULL);
+ if (ret == 0) {
+ assert(0);
+ return NULL;
+ }
+ return lpa;
+}
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define USES_CONVERSION int _convert = 0; LPCWSTR _lpw = NULL; LPCSTR _lpa = NULL
+
+#define A2W(lpa) (\
+ ((_lpa = lpa) == NULL) ? NULL : (\
+ _convert = (strlen(_lpa)+1),\
+ (INT_MAX/2<_convert)? NULL : \
+ A2WHelper((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, CP_UTF8)))
+
+#define W2A(lpw) (\
+ ((_lpw = lpw) == NULL) ? NULL : (\
+ (_convert = (lstrlenW(_lpw)+1), \
+ (_convert>INT_MAX/2) ? NULL : \
+ W2AHelper((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), CP_UTF8))))
+
+#endif /* _NPT_WINCE_UTILS_H_ */ \ No newline at end of file
diff --git a/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceConsole.cpp b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceConsole.cpp
new file mode 100644
index 0000000000..0ffabf863b
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceConsole.cpp
@@ -0,0 +1,26 @@
+/*****************************************************************
+|
+| Neptune - Console Support: Windows CE Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+
+#include "NptConfig.h"
+#include "NptConsole.h"
+
+/*----------------------------------------------------------------------
+| NPT_Console::Output
++---------------------------------------------------------------------*/
+void
+NPT_Console::Output(const char* message)
+{
+ printf("%s", message);
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceEnvironment.cpp b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceEnvironment.cpp
new file mode 100644
index 0000000000..8dceefee50
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceEnvironment.cpp
@@ -0,0 +1,63 @@
+/*****************************************************************
+|
+| Neptune - Environment variables: Windows CE Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+
+#include "NptConfig.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_GetEnvironment
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_GetEnvironment(const char* name, NPT_String& value)
+{
+ HKEY key = NULL;
+ DWORD type;
+ WCHAR* name_w;
+ DWORD name_length;
+ DWORD value_length;
+ NPT_Result result;
+
+ // default value
+ value.SetLength(0);
+
+ // convert name to unicode
+ name_length = NPT_StringLength(name);
+ name_w = new WCHAR[(name_length+1)];
+ MultiByteToWideChar(CP_UTF8, 0, name, -1, name_w, name_length+1);
+
+ if (RegOpenKeyEx(HKEY_CURRENT_USER,
+ _T("Software\\Axiomatic\\Neptune\\Environment"),
+ 0, KEY_ALL_ACCESS, &key) == ERROR_SUCCESS) {
+ if (RegQueryValueEx(key, name_w, 0, &type, (PBYTE)NULL, &value_length ) == ERROR_SUCCESS) {
+ // convert to UTF-8
+
+ WCHAR* value_w = new WCHAR[(value_length+1)];
+ int value_size = 4*value_length+1;
+ value.Reserve(value_size);
+
+ if (RegQueryValueEx(key, name_w, 0, &type, (PBYTE)value_w, &value_length ) == ERROR_SUCCESS) {
+ value_size = WideCharToMultiByte(CP_UTF8, 0, value_w, value_length, value.UseChars(), value_size, NULL, FALSE);
+ value.SetLength(value_size);
+ }
+
+ delete[] value_w;
+ result = NPT_SUCCESS;
+ }
+ }
+
+ delete[] name_w;
+
+ return result;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceMain.cpp b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceMain.cpp
new file mode 100644
index 0000000000..1a8916733d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/WinCE/NptWinceMain.cpp
@@ -0,0 +1,47 @@
+/*****************************************************************
+|
+| Neptune - Utils : WinCE Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <windows.h>
+
+/*----------------------------------------------------------------------
+| _tmain
++---------------------------------------------------------------------*/
+extern int main(int argc, char** argv);
+
+int
+_tmain(int argc, wchar_t** argv, wchar_t** envp)
+{
+ char** argv_utf8 = new char*[1+argc];
+ int i;
+ int result;
+
+ // allocate and convert args
+ for (i=0; i<argc; i++) {
+ unsigned int arg_length = wcslen(argv[i]);
+ argv_utf8[i] = new char[4*arg_length+1];
+ WideCharToMultiByte(CP_UTF8, 0, argv[i], -1, argv_utf8[i], 4*arg_length+1, 0, 0);
+ }
+
+ // terminate the array
+ argv_utf8[argc] = NULL;
+
+ // call the real main
+ result = main(argc, argv_utf8);
+
+ // cleanup
+ for (i=0; i<argc; i++) {
+ delete [] argv_utf8[i];
+ }
+ delete[] argv_utf8;
+
+ return result;
+}
diff --git a/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.cpp b/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.cpp
new file mode 100644
index 0000000000..5f748a685e
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.cpp
@@ -0,0 +1,97 @@
+/*****************************************************************
+|
+| Neptune - Network :: Xbox Winsock Implementation
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <xtl.h>
+#include <winsockx.h>
+
+#include "NptNetwork.h"
+#include "NptXboxNetwork.h"
+
+/*----------------------------------------------------------------------
+| static initializer
++---------------------------------------------------------------------*/
+NPT_WinsockSystem::NPT_WinsockSystem() {
+ XNetStartupParams xnsp;
+ memset(&xnsp, 0, sizeof(xnsp));
+ xnsp.cfgSizeOfStruct = sizeof(XNetStartupParams);
+ xnsp.cfgFlags = XNET_STARTUP_BYPASS_SECURITY;
+
+ // create more memory for networking
+ xnsp.cfgPrivatePoolSizeInPages = 64; // == 256kb, default = 12 (48kb)
+ xnsp.cfgEnetReceiveQueueLength = 16; // == 32kb, default = 8 (16kb)
+ xnsp.cfgIpFragMaxSimultaneous = 16; // default = 4
+ xnsp.cfgIpFragMaxPacketDiv256 = 32; // == 8kb, default = 8 (2kb)
+ xnsp.cfgSockMaxSockets = 64; // default = 64
+ xnsp.cfgSockDefaultRecvBufsizeInK = 128; // default = 16
+ xnsp.cfgSockDefaultSendBufsizeInK = 128; // default = 16
+
+ INT err = XNetStartup(&xnsp);
+
+ WORD wVersionRequested;
+ WSADATA wsaData;
+ wVersionRequested = MAKEWORD(2, 2);
+ WSAStartup( wVersionRequested, &wsaData );
+}
+NPT_WinsockSystem::~NPT_WinsockSystem() {
+ WSACleanup();
+ XNetCleanup();
+}
+NPT_WinsockSystem NPT_WinsockSystem::Initializer;
+
+/*----------------------------------------------------------------------
+| NPT_NetworkInterface::GetNetworkInterfaces
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces)
+{
+ XNADDR xna;
+ DWORD state;
+ do {
+ state = XNetGetTitleXnAddr(&xna);
+ Sleep(100);
+ } while (state == XNET_GET_XNADDR_PENDING);
+
+ if (state & XNET_GET_XNADDR_STATIC || state & XNET_GET_XNADDR_DHCP) {
+ NPT_IpAddress primary_address(ntohl(xna.ina.s_addr));
+ NPT_IpAddress netmask; /* no support for netmask */
+ NPT_IpAddress broadcast_address(ntohl(xna.ina.s_addr));
+ NPT_Flags flags = NPT_NETWORK_INTERFACE_FLAG_BROADCAST;
+
+ NPT_MacAddress mac;
+ if (state & XNET_GET_XNADDR_ETHERNET) {
+ mac.SetAddress(NPT_MacAddress::TYPE_ETHERNET, xna.abEnet, 6);
+ }
+
+ // create an interface object
+ char iface_name[5];
+ iface_name[0] = 'i';
+ iface_name[1] = 'f';
+ iface_name[2] = '0';
+ iface_name[3] = '0';
+ iface_name[4] = '\0';
+ NPT_NetworkInterface* iface = new NPT_NetworkInterface(iface_name, mac, flags);
+
+ // set the interface address
+ NPT_NetworkInterfaceAddress iface_address(
+ primary_address,
+ broadcast_address,
+ NPT_IpAddress::Any,
+ netmask);
+ iface->AddAddress(iface_address);
+
+ // add the interface to the list
+ interfaces.Add(iface);
+ }
+
+ return NPT_SUCCESS;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.h b/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.h
new file mode 100644
index 0000000000..4a5ff46b86
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/Xbox/NptXboxNetwork.h
@@ -0,0 +1,19 @@
+/*****************************************************************
+|
+| Neptune - Network :: Xbox Winsock Implementation
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| static initializer
++---------------------------------------------------------------------*/
+class NPT_WinsockSystem {
+public:
+ static NPT_WinsockSystem Initializer;
+private:
+ NPT_WinsockSystem();
+ ~NPT_WinsockSystem();
+};
diff --git a/lib/libUPnP/Neptune/Source/Tests/Arrays1/ArraysTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Arrays1/ArraysTest1.cpp
new file mode 100644
index 0000000000..1e1b79aa23
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Arrays1/ArraysTest1.cpp
@@ -0,0 +1,200 @@
+/*****************************************************************
+|
+| Arrays Test Program 1
+|
+| (c) 2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static unsigned int A_Count = 0;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+class A {
+public:
+ A() : _a(0), _b(0), _c(&_a) {
+ //printf("A::A()\n");
+ A_Count++;
+ }
+ A(int a, char b) : _a(a), _b(b), _c(&_a) {
+ //printf("A::A(%d, %d)\n", a, b);
+ A_Count++;
+ }
+ A(const A& other) : _a(other._a), _b(other._b), _c(&_a) {
+ //printf("A::A(copy: a=%d, b=%d)\n", _a, _b);
+ A_Count++;
+ }
+ ~A() {
+ //printf("A::~A(), a=%d, b=%d\n", _a, _b);
+ A_Count--;
+ }
+ bool Check() { return _c == &_a; }
+ bool operator==(const A& other) {
+ return _a == other._a && _b == other._b;
+ }
+ int _a;
+ char _b;
+ int* _c;
+};
+
+#define CHECK(x) { \
+ if (!(x)) { \
+ printf("TEST FAILED line %d\n", __LINE__); \
+ return 1; \
+ } \
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ NPT_Result res;
+ NPT_Array<int> a;
+ a.Add(7);
+ CHECK(a[0] == 7);
+
+ NPT_Array<A> a_array;
+ a_array.Add(A(1,2));
+ a_array.Add(A(3,4));
+ a_array.Reserve(100);
+ a_array.Add(A(4,5));
+
+ CHECK(A_Count == 3);
+ NPT_Array<A> b_array = a_array;
+ CHECK(A_Count == 6);
+ CHECK(b_array.GetItemCount() == a_array.GetItemCount());
+ CHECK(b_array == a_array);
+ CHECK(a_array[0] == b_array[0]);
+ b_array[0] = A(7,8);
+ CHECK(A_Count == 6);
+ CHECK(!(a_array[0] == b_array[0]));
+
+ a_array.Resize(2);
+ CHECK(A_Count == 5);
+ CHECK(a_array.GetItemCount() == 2);
+ b_array.Resize(5);
+ CHECK(A_Count == 7);
+ CHECK(b_array[4]._a == 0);
+ CHECK(b_array[4]._b == 0);
+
+ a_array.Resize(6, A(9,10));
+ CHECK(A_Count == 11);
+ CHECK(a_array.GetItemCount() == 6);
+ CHECK(a_array[5] == A(9,10));
+
+ for (NPT_Ordinal i=0; i<a_array.GetItemCount(); i++) {
+ a_array[i].Check();
+ }
+ for (NPT_Ordinal i=0; i<b_array.GetItemCount(); i++) {
+ b_array[i].Check();
+ }
+
+ res = a_array.Erase(&a_array[6]);
+ CHECK(res != NPT_SUCCESS);
+ a_array.Erase(&a_array[2]);
+ CHECK(a_array.GetItemCount() == 5);
+ CHECK(A_Count == 10);
+ CHECK(a_array[4] == A(9,10));
+
+ a_array.Insert(a_array.GetItem(1), A(3, 110), 1);
+ CHECK(a_array.GetItemCount() == 6);
+ CHECK(A_Count == 11);
+ CHECK(a_array[1] == A(3,110));
+ CHECK(a_array[5] == A(9,10));
+
+ a_array.Erase(1, 3);
+ CHECK(a_array.GetItemCount() == 3);
+ CHECK(A_Count == 8);
+ CHECK(a_array[2] == A(9,10));
+
+ a_array.Insert(a_array.GetFirstItem(), A(34, 0), 4);
+ CHECK(a_array.GetItemCount() == 7);
+ CHECK(A_Count == 12);
+ CHECK(a_array[6] == A(9,10));
+
+ a_array.Insert(a_array.GetItem(5), A(116, 'e'), 200);
+ CHECK(a_array.GetItemCount() == 207);
+ CHECK(a_array[206] == A(9,10));
+
+ a_array.Clear();
+ a_array.Insert(a_array.GetFirstItem(), A(1, 'c'));
+ CHECK(a_array.GetItemCount() == 1);
+ CHECK(a_array[0] == A(1,'c'));
+
+ a_array.Insert(a_array.GetItem(1), A(2, 'd'));
+ CHECK(a_array.GetItemCount() == 2);
+ CHECK(a_array[0] == A(1,'c'));
+ CHECK(a_array[1] == A(2,'d'));
+
+ NPT_Array<int>* int_array = new NPT_Array<int>(100);
+ CHECK(int_array->GetItemCount() == 0);
+ int_array->Add(1);
+ int_array->Add(2);
+ CHECK(int_array->GetItemCount() == 2);
+ CHECK((*int_array)[0] == 1);
+ CHECK((*int_array)[1] == 2);
+ int_array->Clear();
+ CHECK(int_array->GetItemCount() == 0);
+ delete int_array;
+
+ NPT_Array<A*> c_array;
+ A* o = new A(3, 2);
+ c_array.Add(o);
+ CHECK(c_array.GetItemCount() == 1);
+ for (int i=0; i<4; i++) {
+ c_array.Insert(0,new A(55,'a'));
+ }
+
+ CHECK(c_array.Contains(o));
+ A* a66 = new A(66, 'b');
+ CHECK(!c_array.Contains(a66));
+
+ A** ai = c_array.Find(NPT_ObjectComparator<A*>(o));
+ CHECK(ai);
+ CHECK(**ai == *o);
+ c_array.Erase(ai);
+ delete o;
+ CHECK(c_array.GetItemCount() == 4);
+
+ c_array.Apply(NPT_ObjectDeleter<A>());
+
+ NPT_Array<int> i_array;
+ CHECK(NPT_SUCCEEDED(i_array.Resize(4, 0)));
+ CHECK(i_array.GetItemCount() == 4);
+ i_array[0] = 3;
+ i_array[1] = 7;
+ i_array[2] = 9;
+ i_array[3] = 12;
+
+ NPT_Array<int> j_array = i_array;
+ CHECK(i_array == j_array);
+ i_array[2] = 7;
+ CHECK(i_array != j_array);
+ CHECK(!(i_array == j_array));
+ i_array[2] = 9;
+ CHECK(i_array == j_array);
+ j_array.Add(12);
+ CHECK(i_array != j_array);
+ CHECK(!(i_array == j_array));
+
+ NPT_Array<int> k_array;
+ k_array.Add(1);
+ k_array = i_array;
+ CHECK(k_array == i_array);
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/BufferedStreams1/BufferedStreamsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/BufferedStreams1/BufferedStreamsTest1.cpp
new file mode 100644
index 0000000000..f7b69f4f8b
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/BufferedStreams1/BufferedStreamsTest1.cpp
@@ -0,0 +1,57 @@
+/*****************************************************************
+|
+| BufferedStreams Test Program 1
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include <stdlib.h>
+
+#if defined(_DEBUG) && defined(WIN32)
+#include <crtdbg.h>
+#endif
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(_DEBUG) && defined(WIN32)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+#if 0
+ const char* b0 = "";
+ const char* b1 = "\n";
+ const char* b2 = "\r";
+ const char* b3 = "\r\n";
+ const char* b4 = "0\r1\r\r2\r\r\r" // only \r, up to 3
+ "3\n4\n\n5\n\n\n" // only \n, up to 3
+ "6\r\n7\n\r" // one \r and one \n
+ "8\r\n\r9\r\r\na\n\r\r" // two \r and one \n
+ "b\n\r\nc\n\n\rd\r\n\n" // two \n and one \r
+ ;
+ const char* b5 = "aaa\r";
+ const char* b6 = "aaa\n";
+ const char* b7 = "aaa\r\n";
+
+ printf("BufferedInputStream test1 passed\n");
+#endif
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/FileTest1/FileTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/FileTest1/FileTest1.cpp
new file mode 100644
index 0000000000..a1830798ad
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/FileTest1/FileTest1.cpp
@@ -0,0 +1,340 @@
+/*****************************************************************
+|
+| File Test Program 1
+|
+| (c) 2005-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| CreateNewFile
++---------------------------------------------------------------------*/
+NPT_Result
+CreateNewFile(const char* filename, NPT_Size chunk_count, NPT_Size chunk_size=1)
+{
+ NPT_File file(filename);
+ NPT_CHECK(file.Open(NPT_FILE_OPEN_MODE_CREATE|NPT_FILE_OPEN_MODE_WRITE|NPT_FILE_OPEN_MODE_TRUNCATE));
+ NPT_OutputStreamReference out;
+ file.GetOutputStream(out);
+ unsigned char* chunk_buffer = new unsigned char[chunk_size];
+ for (unsigned int i=0; i<chunk_size; i++) {
+ chunk_buffer[i] = (unsigned char)i;
+ }
+ for (unsigned int i=0; i<chunk_count; i++) {
+ NPT_ASSERT(NPT_SUCCEEDED(out->WriteFully(chunk_buffer, chunk_size)));
+ }
+ delete[] chunk_buffer;
+ file.Close();
+ out = NULL;
+
+ NPT_FileInfo info;
+ NPT_Result result = NPT_File::GetInfo(filename, &info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Size == (NPT_LargeSize)chunk_count*(NPT_LargeSize)chunk_size);
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ NPT_Result result;
+ NPT_FileInfo info;
+
+ NPT_ASSERT(NPT_File::GetInfo("foobar.doesnotexist", NULL) == NPT_ERROR_NO_SUCH_FILE);
+ NPT_ASSERT(!NPT_File::Exists("foobar.doesnotexist"));
+
+ // test special names
+ NPT_File file(NPT_FILE_STANDARD_INPUT);
+ NPT_ASSERT(NPT_SUCCEEDED(file.GetInfo(info)));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_SPECIAL);
+ file = NPT_File(NPT_FILE_STANDARD_OUTPUT);
+
+ NPT_ASSERT(NPT_SUCCEEDED(file.GetInfo(info)));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_SPECIAL);
+ file = NPT_File(NPT_FILE_STANDARD_ERROR);
+ NPT_ASSERT(NPT_SUCCEEDED(file.GetInfo(info)));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_SPECIAL);
+
+ if (NPT_File::Exists("foobar.file1")) {
+ result = NPT_File::RemoveFile("foobar.file1");
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ }
+
+ result = CreateNewFile("foobar.file1", 9);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(NPT_File::Exists("foobar.file1"));
+ result = NPT_File::GetInfo("foobar.file1", &info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_REGULAR);
+ NPT_ASSERT(info.m_Size == 9);
+
+ {
+ NPT_File f1("foobar.file1");
+ result = f1.GetInfo(info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_REGULAR);
+ NPT_ASSERT(info.m_Size == 9);
+ }
+ {
+ NPT_File f1("foobar.file1");
+ NPT_LargeSize size;
+ result = f1.GetSize(size);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(size == 9);
+ }
+
+ {
+ NPT_File f1("foobar.file1");
+ result = f1.Rename("foobar.file1-r");
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(f1.GetPath() == "foobar.file1-r");
+ }
+ NPT_ASSERT(NPT_File::Exists("foobar.file1-r"));
+ result = NPT_File::GetInfo("foobar.file1-r", &info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_REGULAR);
+ NPT_ASSERT(info.m_Size == 9);
+
+ // dirs
+ NPT_ASSERT(!NPT_File::Exists("foobar.dir"));
+ result = NPT_File::CreateDir("foobar.dir");
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ result = NPT_File::GetInfo("foobar.dir", &info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY);
+ {
+ NPT_File f1("foobar.dir");
+ result = f1.GetInfo(info);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY);
+ }
+
+ NPT_String dirname = "foobar.dir";
+ NPT_String fname;
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file1";
+ result = CreateNewFile(fname, 1);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file2";
+ result = CreateNewFile(fname, 2);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file3";
+ result = CreateNewFile(fname, 3);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+
+ NPT_List<NPT_String> entries;
+ result = NPT_File::ListDir("foobar.dir", entries);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(entries.GetItemCount() == 3);
+
+ result = NPT_File::RemoveFile("foobar.dir");
+ NPT_ASSERT(NPT_FAILED(result));
+ result = NPT_File::RemoveDir("foobar.dir");
+ NPT_ASSERT(result == NPT_ERROR_DIRECTORY_NOT_EMPTY);
+
+ result = NPT_File::Rename("foobar.dir", "foobar.dir-r");
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+
+ dirname = "foobar.dir-r";
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file1";
+ result = NPT_File::RemoveFile(fname);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file2";
+ result = NPT_File::RemoveFile(fname);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ fname = dirname;
+ fname += NPT_FilePath::Separator;
+ fname += "file3";
+ result = NPT_File::RemoveFile(fname);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+
+ result = NPT_File::RemoveDir("foobar.dir-r");
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(!NPT_File::Exists("foobar.dir-r"));
+
+ // paths
+ NPT_String test;
+ test = NPT_FilePath::BaseName("");
+ NPT_ASSERT(test == "");
+ test = NPT_FilePath::BaseName("a");
+ NPT_ASSERT(test == "a");
+ test = NPT_FilePath::BaseName("a"+NPT_FilePath::Separator+"b");
+ NPT_ASSERT(test == "b");
+ test = NPT_FilePath::BaseName("a"+NPT_FilePath::Separator+"b"+NPT_FilePath::Separator);
+ NPT_ASSERT(test == "");
+ test = NPT_FilePath::BaseName(NPT_FilePath::Separator+"a");
+ NPT_ASSERT(test == "a");
+ test = NPT_FilePath::BaseName(NPT_FilePath::Separator);
+ NPT_ASSERT(test == "");
+
+ test = NPT_FilePath::DirName("");
+ NPT_ASSERT(test == "");
+ test = NPT_FilePath::DirName("a");
+ NPT_ASSERT(test == "");
+ test = NPT_FilePath::DirName("a"+NPT_FilePath::Separator+"b");
+ NPT_ASSERT(test == "a");
+ test = NPT_FilePath::DirName("a"+NPT_FilePath::Separator+"b"+NPT_FilePath::Separator);
+ NPT_ASSERT(test == "a"+NPT_FilePath::Separator+"b");
+ test = NPT_FilePath::DirName(NPT_FilePath::Separator+"a");
+ NPT_ASSERT(test == NPT_FilePath::Separator);
+ test = NPT_FilePath::DirName(NPT_FilePath::Separator);
+ NPT_ASSERT(test == NPT_FilePath::Separator);
+
+ // small files
+ result = CreateNewFile("small.bin", 0x100, 0x107);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+
+ file = NPT_File("small.bin");
+ result = file.Open(NPT_FILE_OPEN_MODE_READ);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_InputStreamReference input;
+ file.GetInputStream(input);
+ NPT_Position position;
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == 0);
+ NPT_LargeSize large_size = (NPT_LargeSize)0x107 * (NPT_LargeSize)0x100;
+ result = input->Seek(large_size-0x107);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == large_size-0x107);
+ unsigned char* buffer = new unsigned char[0x107];
+ result = input->ReadFully(buffer, 0x107);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == large_size);
+ for (unsigned int i=0; i<0x107; i++) {
+ NPT_ASSERT(buffer[i] == (unsigned char)i);
+ }
+ file.Close();
+ NPT_File::RemoveFile(file.GetPath());
+
+ // large files
+ if (argc == 2) {
+ result = CreateNewFile(argv[1], 0x10000, 0x10007);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+
+ NPT_String new_name = argv[1];
+ new_name += ".renamed";
+ result = NPT_File::Rename(argv[1], new_name);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ file = NPT_File(new_name);
+ result = file.Open(NPT_FILE_OPEN_MODE_READ);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ file.GetInputStream(input);
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == 0);
+ large_size = (NPT_LargeSize)0x10007 * (NPT_LargeSize)0x10000;
+ result = input->Seek(large_size-0x10007);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == large_size-0x10007);
+ buffer = new unsigned char[0x10007];
+ result = input->ReadFully(buffer, 0x10007);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ result = input->Tell(position);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(position == large_size);
+ for (unsigned int i=0; i<0x10007; i++) {
+ NPT_ASSERT(buffer[i] == (unsigned char)i);
+ }
+ file.Close();
+ NPT_File::RemoveFile(new_name);
+ }
+
+ // test dynamic size
+ //NPT_LargeSize size;
+ unsigned char buff[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
+ const char* filename = "pi.\xCF\x80.test";
+ NPT_TimeInterval wait(2.0f);
+
+ if (argc > 1) {
+ filename = argv[1];
+ }
+
+ NPT_File file1(filename);
+ NPT_OutputStreamReference output;
+
+ NPT_ASSERT(NPT_SUCCEEDED(file1.Open(NPT_FILE_OPEN_MODE_CREATE | NPT_FILE_OPEN_MODE_WRITE | NPT_FILE_OPEN_MODE_READ | NPT_FILE_OPEN_MODE_TRUNCATE)));
+ NPT_ASSERT(NPT_SUCCEEDED(file1.GetSize(size)));
+ NPT_ASSERT(size == 0);
+ NPT_ASSERT(NPT_SUCCEEDED(file1.GetOutputStream(output)));
+ NPT_ASSERT(NPT_SUCCEEDED(file1.GetInputStream(input)));
+ NPT_ASSERT(NPT_SUCCEEDED(output->Tell(position)));
+ NPT_ASSERT(position == 0);
+ NPT_ASSERT(NPT_SUCCEEDED(input->Tell(position)));
+ NPT_ASSERT(position == 0);
+ NPT_ASSERT(NPT_SUCCEEDED(output->WriteFully(buff, 16)));
+ output->Flush();
+ NPT_System::Sleep(wait);
+ NPT_ASSERT(NPT_SUCCEEDED(file1.GetSize(size)));
+ NPT_ASSERT(size == 16);
+ NPT_ASSERT(NPT_SUCCEEDED(output->Tell(position)));
+ NPT_ASSERT(NPT_SUCCEEDED(input->GetSize(size)));
+ NPT_ASSERT(size == 16);
+ NPT_ASSERT(position == 16);
+ NPT_ASSERT(NPT_SUCCEEDED(input->Tell(position)));
+ NPT_ASSERT(position == 16);
+ NPT_ASSERT(NPT_SUCCEEDED(output->Seek(8)));
+ NPT_ASSERT(NPT_SUCCEEDED(output->Tell(position)));
+ NPT_ASSERT(position == 8);
+
+ NPT_File file2(filename);
+ NPT_InputStreamReference input2;
+
+ NPT_ASSERT(NPT_SUCCEEDED(file2.Open(NPT_FILE_OPEN_MODE_READ)));
+ NPT_ASSERT(NPT_SUCCEEDED(file2.GetSize(size)));
+ NPT_ASSERT(size == 16);
+ NPT_ASSERT(NPT_SUCCEEDED(file2.GetInputStream(input2)));
+ NPT_ASSERT(NPT_SUCCEEDED(input2->GetSize(size)));
+ NPT_ASSERT(size == 16);
+ NPT_ASSERT(NPT_SUCCEEDED(input2->Tell(position)));
+ NPT_ASSERT(position == 0);
+ NPT_ASSERT(NPT_SUCCEEDED(input2->Seek(8)));
+ NPT_ASSERT(NPT_SUCCEEDED(input2->Tell(position)));
+ NPT_ASSERT(position == 8);
+
+ NPT_ASSERT(NPT_SUCCEEDED(output->WriteFully(buff, 16)));
+ output->Flush();
+ NPT_System::Sleep(wait);
+ NPT_ASSERT(NPT_SUCCEEDED(file2.GetSize(size)));
+ NPT_ASSERT(size == 24);
+ NPT_ASSERT(NPT_SUCCEEDED(output->Tell(position)));
+ NPT_ASSERT(position == 24);
+ NPT_ASSERT(NPT_SUCCEEDED(input->Tell(position)));
+ NPT_ASSERT(position == 24);
+
+ NPT_ASSERT(NPT_SUCCEEDED(input2->GetSize(size)));
+ NPT_ASSERT(size == 24);
+ NPT_ASSERT(NPT_SUCCEEDED(input2->Seek(20)));
+ NPT_ASSERT(NPT_SUCCEEDED(input2->Read(buff, 4, NULL)));
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/FileTest2/FileTest2.cpp b/lib/libUPnP/Neptune/Source/Tests/FileTest2/FileTest2.cpp
new file mode 100644
index 0000000000..ee1a462124
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/FileTest2/FileTest2.cpp
@@ -0,0 +1,114 @@
+/*****************************************************************
+|
+| File Test Program 2
+|
+| (c) 2005-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| FileTypeName
++---------------------------------------------------------------------*/
+static const char*
+FileTypeName(NPT_FileInfo::FileType type)
+{
+ switch (type) {
+ case NPT_FileInfo::FILE_TYPE_NONE: return "NONE";
+ case NPT_FileInfo::FILE_TYPE_REGULAR: return "REGULAR";
+ case NPT_FileInfo::FILE_TYPE_DIRECTORY: return "DIRECTORY";
+ case NPT_FileInfo::FILE_TYPE_SPECIAL: return "SPECIAL";
+ case NPT_FileInfo::FILE_TYPE_OTHER: return "OTHER";
+ default: return "??";
+ }
+}
+
+/*----------------------------------------------------------------------
+| WalkDir
++---------------------------------------------------------------------*/
+static NPT_Result
+WalkDir(const char* path, unsigned int indent)
+{
+ NPT_FileInfo info;
+ NPT_Result result = NPT_File::GetInfo(path, &info);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "ERROR: NPT_File::GetInfo(\"%s\") returned %d (%s)\n",
+ path, result, NPT_ResultText(result));
+ return result;
+ }
+ if (info.m_Type != NPT_FileInfo::FILE_TYPE_DIRECTORY) {
+ fprintf(stderr, "WARNING: %s is not a directory\n", path);
+ return NPT_SUCCESS; // not fatal
+ }
+
+ NPT_List<NPT_String> entries;
+ result = NPT_File::ListDir(path, entries);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "WARNING: NPT_File::ListDirectory returned %d (%s)\n",
+ result, NPT_ResultText(result));
+ return NPT_SUCCESS; // not fatal
+ }
+
+ for (NPT_List<NPT_String>::Iterator entries_iterator = entries.GetFirstItem();
+ entries_iterator;
+ ++entries_iterator) {
+ if (*entries_iterator == "." || *entries_iterator == "..") continue;
+
+ NPT_String child = path;
+ child += NPT_FilePath::Separator;
+ child += *entries_iterator;
+ result = NPT_File::GetInfo(child, &info);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "WARNING: NPT_File::GetInfo(%s) returned %d (%s)\n",
+ child.GetChars(), result, NPT_ResultText(result));
+ continue;
+ }
+ for (unsigned int i=0; i<indent; i++) {
+ printf(" ");
+ }
+ printf("%s: type=%s", child.GetChars(), FileTypeName(info.m_Type));
+ if (info.m_Type != NPT_FileInfo::FILE_TYPE_DIRECTORY) printf(" size=%lld", info.m_Size);
+ if (info.m_AttributesMask & NPT_FILE_ATTRIBUTE_READ_ONLY &&
+ info.m_Attributes & NPT_FILE_ATTRIBUTE_READ_ONLY) {
+ printf(" RO");
+ }
+ if (info.m_AttributesMask & NPT_FILE_ATTRIBUTE_LINK &&
+ info.m_Attributes & NPT_FILE_ATTRIBUTE_LINK) {
+ printf(" LINK");
+ }
+ printf("\n");
+ if (info.m_Type == NPT_FileInfo::FILE_TYPE_DIRECTORY) {
+ result = WalkDir(child, indent+1);
+ if (NPT_FAILED(result)) return result;
+ }
+ }
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ if (argc != 2) {
+ fprintf(stderr,
+ "ERROR: root directory name not specified\n"
+ "usage: filetest2 <root_path>\n");
+ return 1;
+ }
+
+ WalkDir(argv[1], 0);
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/HttpClient1/HttpClientTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/HttpClient1/HttpClientTest1.cpp
new file mode 100644
index 0000000000..ae495c0d60
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/HttpClient1/HttpClientTest1.cpp
@@ -0,0 +1,283 @@
+/*****************************************************************
+|
+| HTTP Client Test Program 1
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#ifdef __GCCE__
+#include <staticlibinit_gcce.h>
+#endif
+
+#define TEST_URL
+#if defined(TEST_URL)
+/*----------------------------------------------------------------------
+| TestUrlParser
++---------------------------------------------------------------------*/
+static void
+TestUrlParser(const char* url)
+{
+ NPT_HttpUrl url_object(url);
+ NPT_Debug("Parsing URL: '%s'\n", url ? url : "null");
+ if (url_object.IsValid()) {
+ NPT_Debug(" --> host=%s, port=%d, path=%s\n",
+ (const char*)url_object.GetHost(),
+ url_object.GetPort(),
+ (const char*)url_object.GetPath());
+ } else {
+ NPT_Debug(" --> Invalid URL\n");
+ }
+}
+#endif
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+typedef enum {
+ SHOW_MODE_LOAD,
+ SHOW_MODE_STREAM_BLOCKING
+} ShowMode;
+
+/*----------------------------------------------------------------------
+| ShowResponse
++---------------------------------------------------------------------*/
+static void
+ShowResponse(NPT_HttpResponse* response, ShowMode mode)
+{
+ // show response info
+ NPT_Debug("RESPONSE: protocol=%s, code=%d, reason=%s\n",
+ response->GetProtocol().GetChars(),
+ response->GetStatusCode(),
+ response->GetReasonPhrase().GetChars());
+
+ // show headers
+ NPT_HttpHeaders& headers = response->GetHeaders();
+ NPT_List<NPT_HttpHeader*>::Iterator header = headers.GetHeaders().GetFirstItem();
+ while (header) {
+ NPT_Debug("%s: %s\n",
+ (const char*)(*header)->GetName(),
+ (const char*)(*header)->GetValue());
+ ++header;
+ }
+
+ // show entity
+ NPT_HttpEntity* entity = response->GetEntity();
+ if (entity != NULL) {
+ NPT_Debug("ENTITY: length=%lld, type=%s, encoding=%s\n",
+ entity->GetContentLength(),
+ entity->GetContentType().GetChars(),
+ entity->GetContentEncoding().GetChars());
+
+ switch (mode) {
+ case SHOW_MODE_LOAD: {
+ NPT_DataBuffer body;
+ NPT_Result result =entity->Load(body);
+ if (NPT_FAILED(result)) {
+ NPT_Debug("ERROR: failed to load entity (%d)\n", result);
+ } else {
+ NPT_Debug("BODY: loaded %d bytes\n", (int)body.GetDataSize());
+
+ // dump the body
+ NPT_OutputStreamReference output;
+ NPT_File standard_out(NPT_FILE_STANDARD_OUTPUT);
+ standard_out.Open(NPT_FILE_OPEN_MODE_WRITE);
+ standard_out.GetOutputStream(output);
+ output->Write(body.GetData(), body.GetDataSize());
+ }
+ break;
+ }
+
+ case SHOW_MODE_STREAM_BLOCKING: {
+ NPT_DataBuffer buffer(4096);
+ NPT_Result result;
+ NPT_InputStreamReference input;
+ entity->GetInputStream(input);
+ do {
+ NPT_Size bytes_read = 0;
+ result = input->Read(buffer.UseData(), 4096, &bytes_read);
+ NPT_Debug("read %d bytes\n", bytes_read);
+ } while (NPT_SUCCEEDED(result));
+ break;
+ }
+ }
+ }
+}
+
+#define TEST_GET
+#if defined(TEST_GET)
+/*----------------------------------------------------------------------
+| TestHttpGet
++---------------------------------------------------------------------*/
+static void
+TestHttpGet(const char* arg, ShowMode mode)
+{
+ NPT_HttpUrl url(arg);
+ NPT_HttpRequest request(url, NPT_HTTP_METHOD_GET);
+ NPT_HttpClient client;
+ NPT_HttpResponse* response;
+
+ NPT_Result result = client.SendRequest(request, response);
+ NPT_Debug("SendRequest returned %d\n", result);
+ if (NPT_FAILED(result)) return;
+
+ ShowResponse(response, mode);
+
+ delete response;
+}
+#endif
+
+#define TEST_CHUNKED
+#if defined(TEST_CHUNKED)
+/*----------------------------------------------------------------------
+| TestHttpChunked
++---------------------------------------------------------------------*/
+static void
+TestHttpChunked(const char* arg)
+{
+ NPT_HttpUrl url(arg);
+ NPT_HttpRequest request(url, NPT_HTTP_METHOD_GET);
+ request.SetProtocol(NPT_HTTP_PROTOCOL_1_1);
+ NPT_HttpClient client;
+ NPT_HttpResponse* response;
+
+ NPT_Result result = client.SendRequest(request, response);
+ NPT_Debug("SendRequest returned %d\n", result);
+ if (NPT_FAILED(result)) return;
+
+ ShowResponse(response, SHOW_MODE_STREAM_BLOCKING);
+
+ delete response;
+}
+#endif
+
+//#define TEST_PROXY
+#if defined(TEST_PROXY)
+/*----------------------------------------------------------------------
+| TestHttpGetWithProxy
++---------------------------------------------------------------------*/
+static void
+TestHttpGetWithProxy(const char* arg)
+{
+ NPT_HttpUrl url(arg);
+ NPT_HttpRequest request(url, NPT_HTTP_METHOD_GET);
+ NPT_HttpClient client;
+ NPT_HttpResponse* response;
+
+ client.SetProxy("proxy", 8080);
+ NPT_Result result = client.SendRequest(request, response);
+ NPT_Debug("SendRequest returned %d\n", result);
+ if (NPT_FAILED(result)) return;
+
+ ShowResponse(response);
+
+ delete response;
+}
+#endif
+
+#if defined(TEST_POST)
+/*----------------------------------------------------------------------
+| TestHttpPost
++---------------------------------------------------------------------*/
+static void
+TestHttpPost(const char* arg)
+{
+ NPT_HttpUrl url(arg);
+ NPT_HttpRequest request(url, NPT_HTTP_METHOD_POST);
+ NPT_HttpClient client;
+ NPT_HttpResponse* response;
+
+ NPT_HttpEntity* body_entity = new NPT_HttpEntity();
+ NPT_InputStreamReference body_stream(new NPT_MemoryStream((void*)"hello blabla", 12));
+ body_entity->SetInputStream(body_stream);
+
+ request.SetEntity(body_entity);
+ NPT_Result result = client.SendRequest(request, response);
+ NPT_Debug("SendRequest returned %d\n", result);
+ if (NPT_FAILED(result)) return;
+
+ ShowResponse(response);
+
+ delete response;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ // check args
+#if 1
+ if (argc != 2) {
+ NPT_Debug("HttpClient: missing URL argument\n");
+ return -1;
+ }
+#endif
+
+#if defined(TEST_URL)
+ // test URL parsing
+ TestUrlParser(NULL);
+ TestUrlParser("");
+ TestUrlParser("http");
+ TestUrlParser("http:/");
+ TestUrlParser("http://");
+ TestUrlParser("http://foo");
+ TestUrlParser("http://foo.bar");
+ TestUrlParser("http://foo.bar:");
+ TestUrlParser("http://foo.bar:1");
+ TestUrlParser("http://foo.bar:176");
+ TestUrlParser("http://foo.bar:176a");
+ TestUrlParser("http://foo.bar:176/");
+ TestUrlParser("http://foo.bar:176/blabla");
+ TestUrlParser("http://foo.bar:176/blabla/blibli");
+ TestUrlParser("http://foo.bar:176/blabla/blibli/");
+ TestUrlParser("http://foo.bar/");
+ TestUrlParser("http://foo.bar/blabla");
+#endif
+
+#if defined(TEST_CHUNKED)
+ TestHttpChunked("http://www.bok.net/cgi-bin/test/test-chunked.cgi");
+#endif
+
+#if defined(TEST_PROXY)
+ TestHttpGetWithProxy(argv[1]);
+#else
+ TestHttpGet(argv[1], SHOW_MODE_LOAD);
+ TestHttpGet(argv[1], SHOW_MODE_STREAM_BLOCKING);
+#endif
+
+#if defined(TEST_POST)
+ TestHttpPost(argv[1]);
+#endif
+
+#if defined(WIN32) && defined(_DEBUG)
+ _CrtDumpMemoryLeaks();
+#endif
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/HttpServer1/HttpServerTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/HttpServer1/HttpServerTest1.cpp
new file mode 100644
index 0000000000..2537f71edd
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/HttpServer1/HttpServerTest1.cpp
@@ -0,0 +1,272 @@
+/*****************************************************************
+|
+| HTTP Server Test Program 1
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+bool KillRequest = false;
+
+/*----------------------------------------------------------------------
+| KillHandler
++---------------------------------------------------------------------*/
+class KillHandler : public NPT_HttpRequestHandler
+{
+public:
+ NPT_Result SetupResponse(NPT_HttpRequest& /*request*/,
+ const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response) {
+ NPT_HttpEntity* entity = response.GetEntity();
+ entity->SetContentType("text/html");
+ entity->SetInputStream("<html><body>Bye Bye!</body></html>");
+ KillRequest = true;
+
+ return NPT_SUCCESS;
+ }
+};
+
+/*----------------------------------------------------------------------
+| TestHandler1
++---------------------------------------------------------------------*/
+class TestHandler1 : public NPT_HttpRequestHandler
+{
+public:
+ TestHandler1(bool chunked = false) : m_Chunked(chunked) {}
+ NPT_Result SetupResponse(NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse& response) {
+ NPT_String msg = "<HTML>";
+ msg += "PATH=";
+ msg += request.GetUrl().GetPath();
+ msg += "<P><B>Local Address:</B> ";
+ msg += context.GetLocalAddress().ToString();
+ msg += "<P>";
+ msg += "<B>Remote Address:</B> ";
+ msg += context.GetRemoteAddress().ToString();
+ msg += "<P><UL>";
+ if (request.GetUrl().HasQuery()) {
+ NPT_UrlQuery query(request.GetUrl().GetQuery());
+ for (NPT_List<NPT_UrlQuery::Field>::Iterator it = query.GetFields().GetFirstItem();
+ it;
+ ++it) {
+ NPT_UrlQuery::Field& field = *it;
+ msg += "<LI>";
+ msg += field.m_Name;
+ msg += " = ";
+ msg += field.m_Value;
+ msg += " </LI>";
+
+ // check for a 'delay' field
+ if (field.m_Name == "delay") {
+ NPT_UInt32 delay = 0;
+ field.m_Value.ToInteger(delay);
+ NPT_Debug("DELAY: %d seconds\n", delay);
+ NPT_System::Sleep(NPT_TimeInterval((float)delay));
+ }
+ }
+ }
+ msg += "</UL></HTML>";
+
+
+ if (request.GetMethod() == NPT_HTTP_METHOD_POST) {
+ NPT_DataBuffer request_body;
+ request.GetEntity()->Load(request_body);
+ NPT_Debug("REQUEST: body = %d bytes\n", request_body.GetDataSize());
+ NPT_Debug("REQUEST: content type = %s\n", request.GetEntity()->GetContentType().GetChars());
+ if (request.GetEntity()->GetContentType().StartsWith("text") ||
+ request.GetEntity()->GetContentType() == "application/x-www-form-urlencoded") {
+ NPT_String body_string;
+ body_string.Assign((char*)request_body.GetData(), request_body.GetDataSize());
+ NPT_Debug("%s", body_string.GetChars());
+ }
+ }
+
+ NPT_HttpEntity* entity = response.GetEntity();
+ entity->SetContentType("text/html");
+ entity->SetInputStream(msg);
+
+ if (m_Chunked) {
+ entity->SetTransferEncoding(NPT_HTTP_TRANSFER_ENCODING_CHUNKED);
+ entity->SetContentLength(0);
+ }
+
+ return NPT_SUCCESS;
+ }
+
+ bool m_Chunked;
+};
+
+/*----------------------------------------------------------------------
+| TestHandler2
++---------------------------------------------------------------------*/
+class TestHandler2 : public NPT_HttpRequestHandler
+{
+public:
+ NPT_Result SetupResponse(NPT_HttpRequest& /*request*/,
+ const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response) {
+ NPT_HttpEntity* entity = response.GetEntity();
+ entity->SetContentType("text/html");
+ return NPT_SUCCESS;
+ }
+
+ NPT_Result SendResponseBody(const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& /*response*/,
+ NPT_OutputStream& output) {
+ output.WriteString("<html><body>\r\n");
+ for (unsigned int i=0; i<30; i++) {
+ output.WriteString("Line ");
+ output.WriteString(NPT_String::FromInteger(i).GetChars());
+ output.WriteString("\r\n");
+ output.Flush();
+ NPT_System::Sleep(NPT_TimeInterval(0.2f));
+ }
+ output.WriteString("</body></html>\r\n");
+ return NPT_SUCCESS;
+ }
+};
+
+/*----------------------------------------------------------------------
+| ChunkedHandler
++---------------------------------------------------------------------*/
+class ChunkedHandler : public NPT_HttpRequestHandler
+{
+public:
+ NPT_Result SetupResponse(NPT_HttpRequest& /*request*/,
+ const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& response) {
+ NPT_HttpEntity* entity = response.GetEntity();
+ entity->SetContentType("text/html");
+ entity->SetTransferEncoding("chunked");
+ response.SetProtocol(NPT_HTTP_PROTOCOL_1_1);
+ return NPT_SUCCESS;
+ }
+
+ NPT_Result SendResponseBody(const NPT_HttpRequestContext& /*context*/,
+ NPT_HttpResponse& /*response*/,
+ NPT_OutputStream& output) {
+ NPT_HttpChunkedOutputStream chunker(output);
+ chunker.WriteString("<html><body>\r\n");
+ for (unsigned int i=0; i<30; i++) {
+ NPT_String line = "Line ";
+ line += NPT_String::FromInteger(i).GetChars();
+ chunker.WriteString(line.GetChars());
+ chunker.Flush();
+ NPT_System::Sleep(NPT_TimeInterval(0.2f));
+ }
+ chunker.WriteString("</body></html>\r\n");
+ return NPT_SUCCESS;
+ }
+};
+
+/*----------------------------------------------------------------------
+| TestHttp
++---------------------------------------------------------------------*/
+static NPT_Result
+TestHttp()
+{
+ NPT_HttpServer server(1234);
+ NPT_InputStreamReference input;
+ NPT_OutputStreamReference output;
+ NPT_HttpRequestContext context;
+
+ NPT_HttpStaticRequestHandler* static_handler = new NPT_HttpStaticRequestHandler(
+ "<html><body>"
+ "<h1>Neptune HTTP Server Test 1</h1>"
+ "<a href='/files-autodir'>List files working directory (autodir)</a><br>"
+ "<a href='/files'>List files working directory (no autodir)</a><br>"
+ "<a href='/test1'>Test 1</a><br>"
+ "<a href='/test2'>Test 2</a><br>"
+ "<a href='/chunked1'>Chunked 1</a><br>"
+ "<a href='/chunked2'>Chunked 2</a><br>"
+ "<a href='/kill'>Kill Test Server</a><br>"
+ "</body></html>",
+ "text/html");
+ server.AddRequestHandler(static_handler, "/", false);
+
+ KillHandler* kill_handler = new KillHandler();
+ server.AddRequestHandler(kill_handler, "/kill", false);
+
+ TestHandler1* test_handler1 = new TestHandler1();
+ server.AddRequestHandler(test_handler1, "/test1", false);
+
+ TestHandler2* test_handler2 = new TestHandler2();
+ server.AddRequestHandler(test_handler2, "/test2", false);
+
+ ChunkedHandler* chunked_handler1 = new ChunkedHandler();
+ server.AddRequestHandler(chunked_handler1, "/chunked1", false);
+
+ TestHandler1* chunked_handler2 = new TestHandler1(true);
+ server.AddRequestHandler(chunked_handler2, "/chunked2", false);
+
+ NPT_String cwd;
+ NPT_File::GetWorkingDir(cwd);
+ NPT_HttpFileRequestHandler* file_handler_autodir = new NPT_HttpFileRequestHandler("/files-autodir", cwd.GetChars(), true);
+ server.AddRequestHandler(file_handler_autodir, "/files-autodir", true);
+ NPT_HttpFileRequestHandler* file_handler_noautodir = new NPT_HttpFileRequestHandler("/files", cwd.GetChars(), false);
+ server.AddRequestHandler(file_handler_noautodir, "/files", true);
+
+ do {
+ NPT_Console::Output("Test HTTP server waiting for connection on port 1234...\n");
+ NPT_Result result = server.WaitForNewClient(input,
+ output,
+ &context);
+ NPT_Console::OutputF("WaitForNewClient returned %d (%s)\n", result, NPT_ResultText(result));
+ if (NPT_FAILED(result)) return result;
+
+ result = server.RespondToClient(input, output, context);
+ NPT_Console::OutputF("RespondToClient returned %d (%s)\n", result, NPT_ResultText(result));
+
+ input = NULL;
+ output = NULL;
+ } while (!KillRequest);
+
+ NPT_Console::OutputF("Killing Server\n");
+
+ delete static_handler;
+ delete test_handler1;
+ delete test_handler2;
+ delete file_handler_autodir;
+ delete file_handler_noautodir;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ TestHttp();
+
+#if defined(WIN32) && defined(_DEBUG)
+ _CrtDumpMemoryLeaks();
+#endif
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Lists1/ListsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Lists1/ListsTest1.cpp
new file mode 100644
index 0000000000..5f28244236
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Lists1/ListsTest1.cpp
@@ -0,0 +1,184 @@
+/*****************************************************************
+|
+| Lists Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static unsigned int A_Count = 0;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+class A {
+public:
+ A() : _a(0), _b(0), _c(&_a) {
+ printf("A::A()\n");
+ A_Count++;
+ }
+ A(int a, char b) : _a(a), _b(b), _c(&_a) {
+ printf("A::A(%d, %d)\n", a, b);
+ A_Count++;
+ }
+ A(const A& other) : _a(other._a), _b(other._b), _c(&_a) {
+ printf("A::A(copy: a=%d, b=%d)\n", _a, _b);
+ A_Count++;
+ }
+ ~A() {
+ printf("A::~A(), a=%d, b=%d\n", _a, _b);
+ A_Count--;
+ }
+ bool Check() { return _c == &_a; }
+ bool operator==(const A& other) const {
+ return _a == other._a && _b == other._b;
+ }
+ int _a;
+ char _b;
+ int* _c;
+};
+
+static int ApplyCounter = 0;
+class Test1 {
+public:
+ NPT_Result operator()(const A& a) const {
+ ApplyCounter++;
+ A aa(3,4);
+ if (a == aa) return NPT_ERROR_OUT_OF_MEMORY;
+ return NPT_SUCCESS;
+ }
+};
+
+#define CHECK(x) { \
+ if (!(x)) { \
+ printf("TEST FAILED line %d\n", __LINE__); \
+ return 1; \
+ } \
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ NPT_List<A> a_list;
+ a_list.Add(A(1,2));
+ a_list.Add(A(2,3));
+ a_list.Add(A(3,4));
+ CHECK(a_list.GetItemCount() == 3);
+ CHECK(a_list.Contains(A(2,3)));
+ CHECK(!a_list.Contains(A(7,8)));
+ A a;
+ CHECK(NPT_SUCCEEDED(a_list.PopHead(a)));
+ CHECK(a == A(1,2));
+ CHECK(a_list.GetItemCount() == 2);
+ CHECK(NPT_SUCCEEDED(a_list.Get(0, a)));
+ CHECK(a == A(2,3));
+ A* pa = NULL;
+ CHECK(NPT_SUCCEEDED(a_list.Get(0,pa)));
+ CHECK(pa != NULL);
+ CHECK(*pa == A(2,3));
+ CHECK(a_list.GetItem(1) == ++a_list.GetFirstItem());
+
+ a_list.Clear();
+ CHECK(a_list.GetItemCount() == 0);
+ a_list.Insert(a_list.GetFirstItem(), A(7,9));
+ CHECK(a_list.GetItemCount() == 1);
+ CHECK(*a_list.GetFirstItem() == A(7,9));
+
+ a_list.Add(A(1, 2));
+ CHECK(a_list.GetItemCount() == 2);
+ CHECK(A_Count == 3);
+ CHECK(*a_list.GetFirstItem() == A(7,9));
+ CHECK(*a_list.GetLastItem() == A(1,2));
+
+ a_list.Insert(a_list.GetLastItem(), A(3,4));
+ CHECK(a_list.GetItemCount() == 3);
+ CHECK(*a_list.GetLastItem() == A(1,2));
+
+ // test ApplyUntil
+ ApplyCounter = 0;
+ bool applied;
+ NPT_Result result = a_list.ApplyUntil(Test1(), NPT_UntilResultEquals(NPT_ERROR_OUT_OF_MEMORY), &applied);
+ CHECK(applied == true);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(ApplyCounter == 2);
+
+ ApplyCounter = 0;
+ result = a_list.ApplyUntil(Test1(), NPT_UntilResultNotEquals(NPT_SUCCESS), &applied);
+ CHECK(applied == true);
+ CHECK(result == NPT_ERROR_OUT_OF_MEMORY);
+ CHECK(ApplyCounter == 2);
+
+ ApplyCounter = 0;
+ result = a_list.ApplyUntil(Test1(), NPT_UntilResultEquals(NPT_FAILURE), &applied);
+ CHECK(applied == false);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(ApplyCounter == 3);
+
+ a_list.Insert(NPT_List<A>::Iterator(NULL), A(3,4));
+ CHECK(a_list.GetItemCount() == 4);
+ CHECK(*a_list.GetLastItem() == A(3,4));
+
+ a_list.Insert(a_list.GetFirstItem(), A(7,8));
+ CHECK(a_list.GetItemCount() == 5);
+ CHECK(*a_list.GetFirstItem() == A(7,8));
+
+ a_list.Insert(a_list.GetItem(2), A(9,10));
+ CHECK(a_list.GetItemCount() == 6);
+ CHECK(*a_list.GetItem(2) == A(9,10));
+
+ a_list.Erase(a_list.GetItem(1));
+ CHECK(a_list.GetItemCount() == 5);
+ CHECK(*a_list.GetItem(1) == A(9,10));
+ CHECK(A_Count == 1+a_list.GetItemCount());
+
+ NPT_List<int> i1_list;
+ NPT_List<int> i2_list;
+ CHECK(i1_list == i2_list);
+ i1_list.Add(3);
+ CHECK(i1_list != i2_list);
+ CHECK(!(i1_list == i2_list));
+ i2_list.Add(3);
+ CHECK(i1_list == i2_list);
+ i2_list.Add(4);
+ CHECK(i1_list != i2_list);
+ i1_list.Add(4);
+ i1_list.Add(5);
+ i2_list.Add(6);
+ CHECK(i1_list != i2_list);
+
+
+ // NPT_Stack test
+ NPT_Stack<int> i_stack;
+ int i=0;
+ CHECK(NPT_FAILED(i_stack.Pop(i)));
+ CHECK(NPT_FAILED(i_stack.Peek(i)));
+ CHECK(NPT_SUCCEEDED(i_stack.Push(4)));
+ CHECK(NPT_SUCCEEDED(i_stack.Push(5)));
+ CHECK(NPT_SUCCEEDED(i_stack.Push(6)));
+ CHECK(NPT_SUCCEEDED(i_stack.Pop(i)));
+ CHECK(i == 6);
+ CHECK(NPT_SUCCEEDED(i_stack.Peek(i)));
+ CHECK(i == 5);
+ CHECK(NPT_SUCCEEDED(i_stack.Pop(i)));
+ CHECK(i == 5);
+ CHECK(NPT_SUCCEEDED(i_stack.Pop(i)));
+ CHECK(i == 4);
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Logging1/LoggingTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Logging1/LoggingTest1.cpp
new file mode 100644
index 0000000000..97ddadca83
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Logging1/LoggingTest1.cpp
@@ -0,0 +1,181 @@
+/*****************************************************************
+|
+| File: LoggingTest.c
+|
+| Atomix Tests - Logging Test
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+NPT_DEFINE_LOGGER(MyLogger, "neptune.test.my")
+NPT_DEFINE_LOGGER(FooLogger, "neptune.test.foo")
+NPT_SET_LOCAL_LOGGER("neptune.test")
+
+/*----------------------------------------------------------------------
+| TestCheck functions
++---------------------------------------------------------------------*/
+static NPT_Result TestCheck(void)
+{
+ NPT_CHECK_L(NPT_LOG_LEVEL_WARNING, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckSevere(void)
+{
+ NPT_CHECK_SEVERE(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckWarning(void)
+{
+ NPT_CHECK_WARNING(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckInfo(void)
+{
+ NPT_CHECK_INFO(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFine(void)
+{
+ NPT_CHECK_FINE(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFiner(void)
+{
+ NPT_CHECK_FINER(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFinest(void)
+{
+ NPT_CHECK_FINEST(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+
+static NPT_Result TestCheckL(void)
+{
+ NPT_CHECK_LL(FooLogger, NPT_LOG_LEVEL_WARNING, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckSevereL(void)
+{
+ NPT_CHECK_SEVERE(NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckWarningL(void)
+{
+ NPT_CHECK_WARNING_L(FooLogger, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckInfoL(void)
+{
+ NPT_CHECK_INFO_L(FooLogger, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFineL(void)
+{
+ NPT_CHECK_FINE_L(FooLogger, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFinerL(void)
+{
+ NPT_CHECK_FINER_L(FooLogger, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+static NPT_Result TestCheckFinestL(void)
+{
+ NPT_CHECK_FINEST_L(FooLogger, NPT_FAILURE);
+ NPT_LOG_SEVERE("###");
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| TestLargeBuffer
++---------------------------------------------------------------------*/
+static void
+TestLargeBuffer(void)
+{
+ char* buffer = new char[32768];
+ int i;
+ for (i=0; i<32768; i++) {
+ buffer[i] = 'a';
+ }
+ buffer[32767] = 0;
+ NPT_LOG_SEVERE(buffer);
+ delete[] buffer;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int, char**)
+{
+ NPT_LOG_L(MyLogger, NPT_LOG_LEVEL_WARNING, "blabla");
+ NPT_LOG_L2(MyLogger, NPT_LOG_LEVEL_WARNING, "blabla %d %d", 8, 9);
+
+ NPT_LOG(NPT_LOG_LEVEL_WARNING, "blibli");
+ NPT_LOG_2(NPT_LOG_LEVEL_INFO, "fofo %d %d", 5, 7);
+
+ NPT_LOG_SEVERE("this is severe!");
+ NPT_LOG_SEVERE_1("this is severe (%d)", 9);
+
+ NPT_LOG_SEVERE_L(MyLogger, "this is severe!");
+ NPT_LOG_SEVERE_L1(MyLogger, "this is severe (%d)", 9);
+
+ NPT_LOG_SEVERE_L(FooLogger, "this is severe!");
+ NPT_LOG_SEVERE_L1(FooLogger, "this is severe (%d)", 9);
+
+ NPT_LOG_SEVERE("severe");
+ NPT_LOG_WARNING("warning");
+ NPT_LOG_INFO("info");
+ NPT_LOG_FINE("fine");
+ NPT_LOG_FINER("finer");
+ NPT_LOG_FINEST("finest");
+
+ NPT_LOG_SEVERE_L(FooLogger, "severe");
+ NPT_LOG_WARNING_L(FooLogger, "warning");
+ NPT_LOG_INFO_L(FooLogger, "info");
+ NPT_LOG_FINE_L(FooLogger, "fine");
+ NPT_LOG_FINER_L(FooLogger, "finer");
+ NPT_LOG_FINEST_L(FooLogger, "finest");
+
+ TestLargeBuffer();
+
+ TestCheck();
+ TestCheckSevere();
+ TestCheckWarning();
+ TestCheckInfo();
+ TestCheckFine();
+ TestCheckFiner();
+ TestCheckFinest();
+
+ TestCheckL();
+ TestCheckSevereL();
+ TestCheckWarningL();
+ TestCheckInfoL();
+ TestCheckFineL();
+ TestCheckFinerL();
+ TestCheckFinestL();
+
+ return 0;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Tests/Logging2/LoggingTest2.cpp b/lib/libUPnP/Neptune/Source/Tests/Logging2/LoggingTest2.cpp
new file mode 100644
index 0000000000..fb10d38310
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Logging2/LoggingTest2.cpp
@@ -0,0 +1,59 @@
+/*****************************************************************
+|
+| File: LoggingTest2.c
+|
+| Atomix Tests - Logging Test
+|
+| (c) 2002-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int, char**)
+{
+ NPT_LogManager::GetDefault().Configure("plist:hop.level=INFO;");
+
+ NPT_HttpLoggerConfigurator* server = new NPT_HttpLoggerConfigurator();
+ server->Start();
+
+ NPT_Logger* loggers[16];
+ loggers[ 0] = NPT_LogManager::GetLogger("test.log.one");
+ loggers[ 1] = NPT_LogManager::GetLogger("test.log.two");
+ loggers[ 2] = NPT_LogManager::GetLogger("test.log.three");
+ loggers[ 3] = NPT_LogManager::GetLogger("test.foo.bla.bli");
+ loggers[ 4] = NPT_LogManager::GetLogger("test.bar");
+ loggers[ 5] = NPT_LogManager::GetLogger("test.bar.one");
+ loggers[ 6] = NPT_LogManager::GetLogger("test.bar.two");
+ loggers[ 7] = NPT_LogManager::GetLogger("test.bar.three");
+ loggers[ 8] = NPT_LogManager::GetLogger("hop");
+ loggers[ 9] = NPT_LogManager::GetLogger("hop.hop.hop.boom");
+ loggers[10] = NPT_LogManager::GetLogger("kiki");
+ loggers[11] = NPT_LogManager::GetLogger("koko");
+ loggers[12] = NPT_LogManager::GetLogger("kaka.coucou");
+ loggers[13] = NPT_LogManager::GetLogger("kaka.test.coucou");
+ loggers[14] = NPT_LogManager::GetLogger("kaka.kaka");
+ loggers[15] = NPT_LogManager::GetLogger("kuku");
+
+ for (;;) {
+ NPT_System::Sleep(NPT_TimeInterval(1.0f));
+ for (unsigned int i=0; i<sizeof(loggers)/sizeof(loggers[0]); i++) {
+ int level = NPT_System::GetRandomInteger()%800;
+ NPT_LOG_L2(loggers[i], level, "hello from logger %d, level %d", i, level);
+ }
+ }
+
+ server->Wait();
+ delete server;
+
+ return 0;
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Tests/Maps1/MapsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Maps1/MapsTest1.cpp
new file mode 100644
index 0000000000..772e91d80d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Maps1/MapsTest1.cpp
@@ -0,0 +1,146 @@
+/*****************************************************************
+|
+| Maps Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| globals
++---------------------------------------------------------------------*/
+static unsigned int A_Count = 0;
+
+/*----------------------------------------------------------------------
+| types
++---------------------------------------------------------------------*/
+class A {
+public:
+ A() : _a(0), _b(0), _c(&_a) {
+ printf("A::A()\n");
+ A_Count++;
+ }
+ A(int a, char b) : _a(a), _b(b), _c(&_a) {
+ A_Count++;
+ }
+ A(const A& other) : _a(other._a), _b(other._b), _c(&_a) {
+ A_Count++;
+ }
+ ~A() {
+ A_Count--;
+ }
+ bool Check() { return _c == &_a; }
+ bool operator==(const A& other) const {
+ return _a == other._a && _b == other._b;
+ }
+ int _a;
+ char _b;
+ int* _c;
+};
+
+#define CHECK(x) { \
+ if (!(x)) { \
+ printf("TEST FAILED line %d\n", __LINE__); \
+ return 1; \
+ } \
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ NPT_Map<NPT_String,A> a_map;
+ A* a = NULL;
+
+ CHECK(a_map.GetEntryCount() == 0);
+ CHECK(a_map.HasKey("hello") == false);
+ CHECK(!a_map.HasValue(A(1,2)));
+ CHECK(NPT_FAILED(a_map.Get("bla", a)));
+ CHECK(a == NULL);
+
+ a_map.Put("hello", A(1,2));
+ CHECK(a_map.GetEntryCount() == 1);
+ CHECK(NPT_SUCCEEDED(a_map.Get("hello", a)));
+ CHECK(*a == A(1,2));
+ CHECK(a_map.HasKey("hello"));
+ CHECK(a_map.HasValue(A(1,2)));
+ CHECK(a_map["hello"] == A(1,2));
+
+ CHECK(a_map["bla"] == A());
+ CHECK(a_map.GetEntryCount() == 2);
+ a_map["bla"] = A(3,4);
+ CHECK(a_map["bla"] == A(3,4));
+ CHECK(a_map.GetEntryCount() == 2);
+
+ NPT_Map<NPT_String,A> b_map;
+ b_map["hello"] = A(1,2);
+ b_map["bla"] = A(3,4);
+ CHECK(a_map == b_map);
+
+ NPT_Map<NPT_String,A> c_map = a_map;
+ CHECK(c_map["hello"] == a_map["hello"]);
+ CHECK(c_map["bla"] == a_map["bla"]);
+
+ CHECK(NPT_SUCCEEDED(a_map.Put("bla", A(5,6))));
+ CHECK(NPT_SUCCEEDED(a_map.Get("bla", a)));
+ CHECK(*a == A(5,6));
+ CHECK(NPT_FAILED(a_map.Get("youyou", a)));
+
+ b_map.Clear();
+ CHECK(b_map.GetEntryCount() == 0);
+
+ a_map["youyou"] = A(6,7);
+ CHECK(NPT_FAILED(a_map.Erase("coucou")));
+ CHECK(NPT_SUCCEEDED(a_map.Erase("bla")));
+ CHECK(!a_map.HasKey("bla"));
+
+ CHECK(!(a_map == c_map));
+ CHECK(c_map != a_map);
+
+ c_map = a_map;
+ NPT_Map<NPT_String,A> d_map(c_map);
+ CHECK(d_map == c_map);
+
+ NPT_Map<int,int> i_map;
+ i_map[5] = 6;
+ i_map[6] = 7;
+ i_map[9] = 0;
+ CHECK(i_map[0] == 0 || i_map[0] != 0); // unknown value (will cause a valgrind warning)
+ CHECK(i_map.GetEntryCount() == 4);
+
+ NPT_Map<NPT_String,A> a1_map;
+ NPT_Map<NPT_String,A> a2_map;
+ a1_map["hello"] = A(1,2);
+ a1_map["bla"] = A(2,3);
+ a1_map["youyou"]= A(3,4);
+ a2_map["bla"] = A(2,3);
+ a2_map["youyou"]= A(3,4);
+ a2_map["hello"] = A(1,2);
+ CHECK(a1_map == a2_map);
+ a1_map["foo"] = A(0,0);
+ CHECK(a1_map != a2_map);
+ a2_map["foo"] = A(0,0);
+ CHECK(a1_map == a2_map);
+ a2_map["foo"] = A(7,8);
+ CHECK(a1_map != a2_map);
+ a2_map["foo"] = A(0,0);
+ a1_map["bir"] = A(0,0);
+ a2_map["bar"] = A(0,0);
+ CHECK(a1_map.GetEntryCount() == a2_map.GetEntryCount());
+ CHECK(a1_map != a2_map);
+ CHECK(!(a1_map == a2_map));
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp
new file mode 100644
index 0000000000..4e768b0bc6
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Messages1/MessagesTest1.cpp
@@ -0,0 +1,408 @@
+/*****************************************************************
+|
+| Messages Test Program 1
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdio.h>
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| FooServerMessageHandler
++---------------------------------------------------------------------*/
+class FooServerMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(FooServerMessageHandler)
+
+ // destructor
+ virtual ~FooServerMessageHandler() {}
+
+ // methods
+ virtual void OnBarCmd1(NPT_MessageReceiver* /*receiver*/, int /*info*/) {}
+ virtual void OnBarCmd2(NPT_MessageReceiver* /*receiver*/,
+ int /*info1*/, int /*info2*/) { }
+ virtual void OnBarCmd3(NPT_MessageReceiver* /*receiver*/,
+ int /*info1*/, int /*info2*/, int /*info3*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooServerMessageHandler)
+
+/*----------------------------------------------------------------------
+| FooServerMessage
++---------------------------------------------------------------------*/
+class FooServerMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(FooServerMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ FooServerMessageHandler* specific = NPT_DYNAMIC_CAST(FooServerMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+
+NPT_Message::Type FooServerMessage::MessageType = "FooServer Message";
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd1Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd1Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd1Message(NPT_MessageReceiver* receiver, int info) :
+ m_Receiver(receiver), m_Info(info) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd1(m_Receiver, m_Info);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd2Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd2Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd2Message(NPT_MessageReceiver* receiver,
+ int info1, int info2) :
+ m_Receiver(receiver), m_Info1(info1), m_Info2(info2) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd2(m_Receiver, m_Info1, m_Info2);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info1;
+ int m_Info2;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd3Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd3Message : public FooServerMessage
+{
+public:
+ FooServerBarCmd3Message(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3) :
+ m_Receiver(receiver), m_Info1(info1), m_Info2(info2), m_Info3(info3) {}
+ NPT_Result Deliver(FooServerMessageHandler* handler) {
+ handler->OnBarCmd3(m_Receiver, m_Info1, m_Info2, m_Info3);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Info1;
+ int m_Info2;
+ int m_Info3;
+};
+
+/*----------------------------------------------------------------------
+| FooServerBarCmd4Message
++---------------------------------------------------------------------*/
+class FooServerBarCmd4Message : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ FooServerBarCmd4Message() {}
+};
+NPT_Message::Type FooServerBarCmd4Message::MessageType = "FooServerBarCmd4 Message";
+
+/*----------------------------------------------------------------------
+| FooClientMessageHandler
++---------------------------------------------------------------------*/
+class FooClientMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(FooClientMessageHandler)
+
+ // destructor
+ virtual ~FooClientMessageHandler() {}
+
+ // methods
+ virtual void OnBarNotification1(int /*info*/) {}
+ virtual void OnBarNotification2(int /*info1*/, int /*info2*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooClientMessageHandler)
+
+/*----------------------------------------------------------------------
+| FooClientMessage
++---------------------------------------------------------------------*/
+class FooClientMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(FooClientMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ FooClientMessageHandler* specific = NPT_DYNAMIC_CAST(FooClientMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+NPT_Message::Type FooClientMessage::MessageType = "FooClient Message";
+
+/*----------------------------------------------------------------------
+| FooClientBarNotification1Message
++---------------------------------------------------------------------*/
+class FooClientBarNotification1Message : public FooClientMessage
+{
+public:
+ FooClientBarNotification1Message(int info) : m_Info(info) {}
+ NPT_Result Deliver(FooClientMessageHandler* handler) {
+ handler->OnBarNotification1(m_Info);
+ return NPT_SUCCESS;
+ }
+
+private:
+ int m_Info;
+};
+
+/*----------------------------------------------------------------------
+| FooServer
++---------------------------------------------------------------------*/
+class FooServer : public NPT_Thread,
+ public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public FooServerMessageHandler
+{
+public:
+ FooServer();
+
+ // message posting wrappers
+ NPT_Result DoBarCmd1(NPT_MessageReceiver* receiver, int info);
+ NPT_Result DoBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2);
+ NPT_Result DoBarCmd3(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3);
+ NPT_Result DoBarCmd4();
+
+ // NPT_Runnable methods (from NPT_Thread)
+ void Run();
+
+ // NPT_MessageHandler methods
+ void OnMessage(NPT_Message* message);
+ NPT_Result HandleMessage(NPT_Message* message);
+
+ // NPT_FooServerMessageHandler methods
+ void OnBarCmd1(NPT_MessageReceiver* receiver, int info);
+ void OnBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2);
+
+private:
+ // members
+ NPT_SimpleMessageQueue* m_MessageQueue;
+};
+
+/*----------------------------------------------------------------------
+| FooServer::FooServer
++---------------------------------------------------------------------*/
+FooServer::FooServer()
+{
+ // create the message queue
+ m_MessageQueue = new NPT_SimpleMessageQueue();
+
+ // attach to the message queue
+ SetQueue(m_MessageQueue);
+ SetHandler(this);
+
+ // start the thread
+ Start();
+}
+
+/*----------------------------------------------------------------------
+| FooServer::Run
++---------------------------------------------------------------------*/
+void
+FooServer::Run()
+{
+ printf("FooServer::Run - begin\n");
+ while (m_MessageQueue->PumpMessage() == NPT_SUCCESS) {};
+ printf("FooServer::Run - end\n");
+}
+
+/*----------------------------------------------------------------------
+| FooServer::HandleMessage
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::HandleMessage(NPT_Message* message)
+{
+ // a handler typically does not implement this method unless it
+ // needs to catch all messages before they are dispatched
+ printf("FooServer::HandleMessage (%s)\n", message->GetType());
+ return NPT_MessageHandler::HandleMessage(message);
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnMessage
++---------------------------------------------------------------------*/
+void
+FooServer::OnMessage(NPT_Message* message)
+{
+ printf("FooServer::OnMessage (%s)\n", message->GetType());
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnBarCmd1
++---------------------------------------------------------------------*/
+void
+FooServer::OnBarCmd1(NPT_MessageReceiver* receiver, int info)
+{
+ printf("FooServer::OnBarCmd1 %d\n", info);
+ receiver->PostMessage(new FooClientBarNotification1Message(7));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::OnBarCmd2
++---------------------------------------------------------------------*/
+void
+FooServer::OnBarCmd2(NPT_MessageReceiver* /*receiver*/, int info1, int info2)
+{
+ printf("FooServer::OnBarCmd2 %d %d\n", info1, info2);
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd1
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd1(NPT_MessageReceiver* receiver, int info)
+{
+ return PostMessage(new FooServerBarCmd1Message(receiver, info));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd2
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd2(NPT_MessageReceiver* receiver, int info1, int info2)
+{
+ return PostMessage(new FooServerBarCmd2Message(receiver, info1,info2));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd3
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd3(NPT_MessageReceiver* receiver,
+ int info1, int info2, int info3)
+{
+ return PostMessage(new FooServerBarCmd3Message(receiver,
+ info1, info2, info3));
+}
+
+/*----------------------------------------------------------------------
+| FooServer::DoBarCmd4
++---------------------------------------------------------------------*/
+NPT_Result
+FooServer::DoBarCmd4()
+{
+ return PostMessage(new FooServerBarCmd4Message());
+}
+
+/*----------------------------------------------------------------------
+| FooClient
++---------------------------------------------------------------------*/
+class FooClient : public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public FooClientMessageHandler
+{
+public:
+ FooClient(FooServer* server, int id);
+
+ // NPT_MessageHandler methods
+ //void OnMessage(NPT_Message* message);
+
+ // NPT_FooServerMessageHandler methods
+ void OnBarNotification1(int info);
+ void OnBarNotification2(int info1, int info2);
+
+private:
+ // members
+ FooServer* m_Server;
+ int m_Id;
+};
+
+/*----------------------------------------------------------------------
+| FooClient::FooClient
++---------------------------------------------------------------------*/
+FooClient::FooClient(FooServer* server, int id) :
+ m_Server(server), m_Id(id)
+{
+ // set ourself as the message handler
+ SetHandler(this);
+
+ // send commands to server
+ server->DoBarCmd1(this, 1);
+ server->DoBarCmd2(this, 1, 2);
+ server->DoBarCmd3(this, 1, 2, 3);
+ server->DoBarCmd4();
+}
+
+/*----------------------------------------------------------------------
+| FooClient::OnBarNotification1
++---------------------------------------------------------------------*/
+void
+FooClient::OnBarNotification1(int info)
+{
+ printf("FooClient::OnBarNotification1 (client=%d) %d\n", m_Id, info);
+}
+
+/*----------------------------------------------------------------------
+| FooClient::OnBarNotification2
++---------------------------------------------------------------------*/
+void
+FooClient::OnBarNotification2(int info1, int info2)
+{
+ printf("FooClient::OnBarNotification2 (client=%d) %d %d\n", m_Id, info1, info2);
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ printf("MessagesTest1:: start\n");
+
+ FooServer* server = new FooServer();
+ FooClient* client1 = new FooClient(server, 1);
+ FooClient* client2 = new FooClient(server, 2);
+ NPT_MessageQueue* queue = new NPT_SimpleMessageQueue();
+
+ client1->SetQueue(queue);
+ client2->SetQueue(queue);
+
+ while (queue->PumpMessage() == NPT_SUCCESS) {}
+
+ delete client1;
+ delete client2;
+ delete server;
+ delete queue;
+
+ printf("MessagesTest1:: end\n");
+}
+
diff --git a/lib/libUPnP/Neptune/Source/Tests/Messages2/MessagesTest2.cpp b/lib/libUPnP/Neptune/Source/Tests/Messages2/MessagesTest2.cpp
new file mode 100644
index 0000000000..8ec72fada6
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Messages2/MessagesTest2.cpp
@@ -0,0 +1,243 @@
+/*****************************************************************
+|
+| Messages Test Program 1
+|
+| (c) 2001-2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+/*----------------------------------------------------------------------
+| TestServerMessageHandler
++---------------------------------------------------------------------*/
+class TestServerMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(TestServerMessageHandler)
+
+ // destructor
+ virtual ~TestServerMessageHandler() {}
+
+ // methods
+ virtual void OnTestCommand(NPT_MessageReceiver* /*receiver*/, int /*id*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(TestServerMessageHandler)
+
+/*----------------------------------------------------------------------
+| TestServerMessage
++---------------------------------------------------------------------*/
+class TestServerMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(TestServerMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ TestServerMessageHandler* specific = NPT_DYNAMIC_CAST(TestServerMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+NPT_Message::Type TestServerMessage::MessageType = "TestServer Message";
+/*----------------------------------------------------------------------
+| TestServerTestCommandMessage
++---------------------------------------------------------------------*/
+class TestServerTestCommandMessage : public TestServerMessage
+{
+public:
+ TestServerTestCommandMessage(NPT_MessageReceiver* receiver, int id) :
+ m_Receiver(receiver), m_Id(id) {}
+ NPT_Result Deliver(TestServerMessageHandler* handler) {
+ handler->OnTestCommand(m_Receiver, m_Id);
+ return NPT_SUCCESS;
+ }
+
+private:
+ NPT_MessageReceiver* m_Receiver;
+ int m_Id;
+};
+/*----------------------------------------------------------------------
+| TestClientMessageHandler
++---------------------------------------------------------------------*/
+class TestClientMessageHandler
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(TestClientMessageHandler)
+
+ // destructor
+ virtual ~TestClientMessageHandler() {}
+
+ // methods
+ virtual void OnReply(int /*id*/) {}
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(TestClientMessageHandler)
+
+/*----------------------------------------------------------------------
+| TestClientMessage
++---------------------------------------------------------------------*/
+class TestClientMessage : public NPT_Message
+{
+public:
+ static NPT_Message::Type MessageType;
+ NPT_Message::Type GetType() {
+ return MessageType;
+ }
+ virtual NPT_Result Deliver(TestClientMessageHandler* handler) = 0;
+ virtual NPT_Result Dispatch(NPT_MessageHandler* handler) {
+ TestClientMessageHandler* specific = NPT_DYNAMIC_CAST(TestClientMessageHandler, handler);
+ if (specific) {
+ return Deliver(specific);
+ } else {
+ return DefaultDeliver(handler);
+ }
+ }
+};
+NPT_Message::Type TestClientMessage::MessageType = "TestClient Message";
+/*----------------------------------------------------------------------
+| TestClientReplyMessage
++---------------------------------------------------------------------*/
+class TestClientReplyMessage : public TestClientMessage
+{
+public:
+ TestClientReplyMessage(int id) : m_Id(id) {}
+ NPT_Result Deliver(TestClientMessageHandler* handler) {
+ handler->OnReply(m_Id);
+ return NPT_SUCCESS;
+ }
+private:
+ int m_Id;
+};
+/*----------------------------------------------------------------------
+| TestServer
++---------------------------------------------------------------------*/
+class TestServer : public NPT_Thread,
+ public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public TestServerMessageHandler
+{
+public:
+ TestServer();
+
+ // message posting wrappers
+ NPT_Result DoTestCommand(NPT_MessageReceiver* receiver, int id);
+ // NPT_Runnable methods (from NPT_Thread)
+ void Run();
+ // NPT_TestServerMessageHandler methods
+ void OnTestCommand(NPT_MessageReceiver* receiver, int id);
+private:
+ // members
+ NPT_SimpleMessageQueue* m_MessageQueue;
+};
+/*----------------------------------------------------------------------
+| TestServer::TestServer
++---------------------------------------------------------------------*/
+TestServer::TestServer()
+{
+ // create the message queue
+ m_MessageQueue = new NPT_SimpleMessageQueue();
+
+ // attach to the message queue
+ SetQueue(m_MessageQueue);
+ SetHandler(this);
+ // start the thread
+ Start();
+}
+/*----------------------------------------------------------------------
+| TestServer::Run
++---------------------------------------------------------------------*/
+void
+TestServer::Run()
+{
+ printf("TestServer::Run - begin\n");
+ while (m_MessageQueue->PumpMessage() == NPT_SUCCESS) {};
+ printf("TestServer::Run - end\n");
+}
+/*----------------------------------------------------------------------
+| TestServer::DoTestCommand
++---------------------------------------------------------------------*/
+NPT_Result
+TestServer::DoTestCommand(NPT_MessageReceiver* receiver, int id)
+{
+ return this->PostMessage(new TestServerTestCommandMessage(receiver, id));
+}
+/*----------------------------------------------------------------------
+| TestServer::OnTestCommand
++---------------------------------------------------------------------*/
+void
+TestServer::OnTestCommand(NPT_MessageReceiver* receiver, int id)
+{
+ printf("TestServer::OnTestCommand %d\n", id);
+ receiver->PostMessage(new TestClientReplyMessage(id+10000));
+}
+/*----------------------------------------------------------------------
+| TestClient
++---------------------------------------------------------------------*/
+class TestClient : public NPT_MessageReceiver,
+ public NPT_MessageHandler,
+ public TestClientMessageHandler
+{
+public:
+ TestClient(TestServer* server, int id);
+
+ // NPT_TestServerMessageHandler methods
+ void OnReply(int id);
+private:
+ // members
+ TestServer* m_Server;
+ int m_Id;
+};
+/*----------------------------------------------------------------------
+| TestClient::TestClient
++---------------------------------------------------------------------*/
+TestClient::TestClient(TestServer* server, int id) :
+ m_Server(server), m_Id(id)
+{
+ // set ourself as the message handler
+ SetHandler(this);
+
+ // send commands to server
+ server->DoTestCommand(this, 1);
+ server->DoTestCommand(this, 2);
+ server->DoTestCommand(this, 3);
+ server->DoTestCommand(this, 4);
+}
+/*----------------------------------------------------------------------
+| TestClient::OnReply
++---------------------------------------------------------------------*/
+void
+TestClient::OnReply(int id)
+{
+ printf("TestClient::OnReply (client=%d) %d\n", m_Id, id);
+}
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ NPT_COMPILER_UNUSED(argc);
+ NPT_COMPILER_UNUSED(argv);
+ printf("MessagesTest2:: start\n");
+ TestServer* server = new TestServer();
+ TestClient* client1 = new TestClient(server, 1);
+ TestClient* client2 = new TestClient(server, 2);
+ NPT_MessageQueue* queue = new NPT_SimpleMessageQueue();
+ client1->SetQueue(queue);
+ client2->SetQueue(queue);
+
+ server->Wait();
+
+ delete client1;
+ delete client2;
+ delete server;
+ delete queue;
+ printf("MessagesTest2:: end\n");
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Misc1/MiscTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Misc1/MiscTest1.cpp
new file mode 100644
index 0000000000..b4f31d8e61
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Misc1/MiscTest1.cpp
@@ -0,0 +1,514 @@
+/*****************************************************************
+|
+| Misc Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+#include "NptUtils.h"
+#include "NptTypes.h"
+#include "NptDynamicCast.h"
+
+/*----------------------------------------------------------------------
+| macros
++---------------------------------------------------------------------*/
+#define SHOULD_SUCCEED(r) \
+ do { \
+ if (NPT_FAILED(r)) { \
+ NPT_Debug("failed line %d (%d)\n", __LINE__, r);\
+ exit(1); \
+ } \
+ } while(0)
+
+#define SHOULD_FAIL(r) \
+ do { \
+ if (NPT_SUCCEEDED(r)) { \
+ NPT_Debug("should have failed line %d (%d)\n", __LINE__, r);\
+ exit(1); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_I(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ NPT_Debug("got %l, expected %l line %d\n", a, b, __LINE__);\
+ exit(1); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_F(a, b) \
+ do { \
+ if ((a) != (b)) { \
+ NPT_Debug("got %f, expected %f line %d\n", a, b, __LINE__);\
+ exit(1); \
+ } \
+ } while(0)
+
+#define SHOULD_EQUAL_S(a, b) \
+ do { \
+ if (!NPT_StringsEqual(a,b)) { \
+ NPT_Debug("got %s, expected %s line %d\n", a, b, __LINE__);\
+ exit(1); \
+ } \
+ } while(0)
+
+
+class BarA
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(BarA)
+ virtual ~BarA() {}
+ virtual int bar() { return 1; }
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(BarA)
+
+class FooA
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST(FooA)
+ virtual ~FooA() {}
+ virtual int foo() { return 2; }
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooA)
+
+class FooB : public FooA
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST_D(FooB, FooA)
+ virtual int foo() { return 3; }
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooB)
+
+class FooC : public FooB, public BarA
+{
+public:
+ NPT_IMPLEMENT_DYNAMIC_CAST_D2(FooC, FooB, BarA)
+ virtual int foo() { return 4; }
+ virtual int bar() { return 5; }
+};
+NPT_DEFINE_DYNAMIC_CAST_ANCHOR(FooC)
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ NPT_Result result;
+
+ // dynamic cast
+ BarA* bar_a = new BarA();
+ NPT_ASSERT(bar_a != NULL);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(BarA, bar_a) == bar_a);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooA, bar_a) == NULL);
+ NPT_ASSERT(bar_a->bar() == 1);
+ delete bar_a;
+
+ FooA* foo_a = new FooA();
+ NPT_ASSERT(foo_a != NULL);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooA, foo_a) == foo_a);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooB, foo_a) == NULL);
+ NPT_ASSERT(foo_a->foo() == 2);
+ delete foo_a;
+
+ FooB* foo_b = new FooB();
+ NPT_ASSERT(foo_b != NULL);
+ foo_a = NPT_DYNAMIC_CAST(FooA, foo_b);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooB, foo_b) == foo_b);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooA, foo_b) != NULL);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooC, foo_b) == NULL);
+ NPT_ASSERT(foo_a->foo() == 3);
+ delete foo_b;
+
+ FooC* foo_c = new FooC();
+ NPT_ASSERT(foo_c != NULL);
+ foo_a = NPT_DYNAMIC_CAST(FooA, foo_c);
+ foo_b = NPT_DYNAMIC_CAST(FooB, foo_c);
+ bar_a = NPT_DYNAMIC_CAST(BarA, foo_c);
+ NPT_ASSERT(NPT_DYNAMIC_CAST(FooC, foo_c) == foo_c);
+ NPT_ASSERT(foo_a != NULL);
+ NPT_ASSERT(foo_b != NULL);
+ NPT_ASSERT(bar_a != NULL);
+ NPT_ASSERT(foo_a->foo() == 4);
+ NPT_ASSERT(foo_b->foo() == 4);
+ NPT_ASSERT(foo_c->foo() == 4);
+ NPT_ASSERT(bar_a->bar() == 5);
+ delete foo_c;
+
+ // misc type tests
+ signed long sl;
+ unsigned long ul;
+ signed int si;
+ unsigned int ui;
+ NPT_Int64 si64;
+ NPT_UInt64 ui64;
+
+ NPT_ASSERT(sizeof(NPT_UInt32) == sizeof(NPT_Int32));
+ NPT_ASSERT(sizeof(NPT_Int32) >= 4);
+ NPT_ASSERT(sizeof(NPT_UInt64) == sizeof(NPT_Int64));
+ NPT_ASSERT(sizeof(NPT_Int64) >= 8);
+ sl = NPT_LONG_MAX;
+ sl += 1;
+ NPT_ASSERT(sl == NPT_LONG_MIN);
+ si = NPT_INT_MAX;
+ si += 1;
+ NPT_ASSERT(si == NPT_INT_MIN);
+ si64 = NPT_INT64_MAX;
+ si64 += 1;
+ NPT_ASSERT(si64 == NPT_INT64_MIN);
+ ul = NPT_ULONG_MAX;
+ ul += 1;
+ NPT_ASSERT(ul == 0);
+ ui = NPT_UINT_MAX;
+ ui += 1;
+ NPT_ASSERT(ui == 0);
+ ui64 = NPT_UINT64_MAX;
+ ui64 += 1;
+ NPT_ASSERT(ui64 == 0);
+
+ // base64
+ NPT_String t = "hello";
+ NPT_String base64;
+ NPT_DataBuffer data;
+ result = NPT_Base64::Encode((const NPT_Byte*)t.GetChars(), t.GetLength(), base64);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(base64 == "aGVsbG8=");
+ result = NPT_Base64::Decode(base64.GetChars(), base64.GetLength(), data);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(data.GetDataSize() == t.GetLength());
+ NPT_String tt((const char*)data.GetData(), data.GetDataSize());
+ NPT_ASSERT(tt == t);
+
+ t = "hello!";
+ result = NPT_Base64::Encode((const NPT_Byte*)t.GetChars(), t.GetLength(), base64);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(base64 == "aGVsbG8h");
+ result = NPT_Base64::Decode(base64.GetChars(), base64.GetLength(), data);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(data.GetDataSize() == t.GetLength());
+ tt.Assign((const char*)data.GetData(), data.GetDataSize());
+ NPT_ASSERT(tt == t);
+
+ t = "hello!!";
+ result = NPT_Base64::Encode((const NPT_Byte*)t.GetChars(), t.GetLength(), base64);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(base64 == "aGVsbG8hIQ==");
+ result = NPT_Base64::Decode(base64.GetChars(), base64.GetLength(), data);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(data.GetDataSize() == t.GetLength());
+ tt.Assign((const char*)data.GetData(), data.GetDataSize());
+ NPT_ASSERT(tt == t);
+
+ unsigned char r256_bin[] = {
+ 0x7d, 0x5f, 0xd0, 0xf4, 0x6a, 0xa8, 0xae, 0x34, 0x6e, 0x32, 0x1d, 0xa1,
+ 0xef, 0x66, 0xdd, 0x82, 0x76, 0xa6, 0xfd, 0x8c, 0x75, 0x97, 0xa0, 0x01,
+ 0x00, 0xde, 0x52, 0xef, 0xdf, 0xb6, 0x3e, 0xe4, 0x7b, 0x45, 0xdd, 0x2b,
+ 0xa1, 0x9c, 0xb0, 0x6d, 0x2c, 0x75, 0xb1, 0x87, 0x43, 0x0f, 0xea, 0x24,
+ 0x36, 0x11, 0x7e, 0xee, 0xd1, 0x91, 0x7f, 0x7b, 0x02, 0xea, 0x9a, 0x2a,
+ 0x25, 0xc0, 0xac, 0x99, 0xa4, 0x89, 0x55, 0x5b, 0x82, 0xdf, 0xb0, 0x7e,
+ 0xa1, 0x78, 0x0f, 0xdf, 0x25, 0x5f, 0x3d, 0xba, 0xcb, 0xbc, 0x35, 0x04,
+ 0xc3, 0xf4, 0xb8, 0xc0, 0x17, 0x8e, 0x75, 0x01, 0xe6, 0x2f, 0x88, 0x2c,
+ 0x76, 0x0a, 0x8c, 0x3f, 0x83, 0xd4, 0x10, 0xa8, 0x00, 0xfc, 0xa0, 0x92,
+ 0x7b, 0xae, 0xa3, 0x8c, 0x47, 0xea, 0x25, 0xf9, 0x29, 0x81, 0x1c, 0x21,
+ 0xf2, 0xf4, 0xfe, 0x07, 0x7e, 0x4b, 0x01, 0x79, 0x41, 0x3a, 0xb6, 0x71,
+ 0x0b, 0x75, 0xa7, 0x9d, 0x1b, 0x12, 0xc4, 0x46, 0x06, 0xf3, 0x5f, 0x00,
+ 0x05, 0x2a, 0x1b, 0x34, 0xd6, 0x87, 0xc4, 0x70, 0xcc, 0xc3, 0x9e, 0xa8,
+ 0x24, 0x2c, 0x97, 0x4e, 0xfc, 0x91, 0x70, 0x1c, 0x29, 0x66, 0xc3, 0x23,
+ 0xbf, 0xd7, 0x4d, 0x35, 0x51, 0xff, 0xeb, 0xde, 0x45, 0xbd, 0x8d, 0x80,
+ 0x44, 0x2a, 0x8d, 0xc0, 0xe8, 0x6a, 0xe2, 0x86, 0x46, 0x9f, 0xf2, 0x3c,
+ 0x93, 0x0d, 0x27, 0x02, 0xe4, 0x79, 0xa1, 0x21, 0xf4, 0x43, 0xcd, 0x4c,
+ 0x22, 0x25, 0x9e, 0x93, 0xeb, 0x77, 0x8e, 0x1e, 0x57, 0x1e, 0x9b, 0xcb,
+ 0x91, 0x86, 0xcf, 0x15, 0xaf, 0xd5, 0x03, 0x0f, 0x70, 0xbe, 0x6e, 0x37,
+ 0xea, 0x37, 0xdd, 0xf6, 0xa1, 0xb1, 0xf7, 0x05, 0xbc, 0x2d, 0x44, 0x60,
+ 0x35, 0xa4, 0x05, 0x0b, 0x22, 0x7d, 0x7a, 0x71, 0xe5, 0x1d, 0x8e, 0xcb,
+ 0xc3, 0xb8, 0x3a, 0xe1
+ };
+ NPT_String b64;
+ NPT_Base64::Encode(r256_bin, sizeof(r256_bin), b64);
+ NPT_DataBuffer r256_out;
+ NPT_Base64::Decode(b64.GetChars(), b64.GetLength(), r256_out);
+ NPT_ASSERT(r256_out.GetDataSize() == sizeof(r256_bin));
+ NPT_ASSERT(r256_bin[sizeof(r256_bin)-1] == r256_out.GetData()[sizeof(r256_bin)-1]);
+
+ unsigned char random_bytes[] = {
+ 0xc7, 0xee, 0x49, 0x9e, 0x2c, 0x8b, 0x1c, 0x16, 0x9e, 0x7f, 0x30, 0xd0,
+ 0xc6, 0x12, 0x30, 0x80, 0x81, 0xcd, 0x20, 0x20, 0x26, 0xaf, 0x4f, 0xd6,
+ 0xfc, 0x86, 0x2e, 0x85, 0xf3, 0x10, 0x38, 0x2b, 0x0e, 0xbb, 0x80, 0x68,
+ 0xbe, 0xff, 0x1c, 0xdc, 0x72, 0xb5, 0x0d, 0x8f, 0x8e, 0x6c, 0x09, 0x63,
+ 0xba, 0x21, 0x23, 0xb2, 0x24, 0x17, 0xd3, 0x17, 0x69, 0x44, 0x77, 0x11,
+ 0x36, 0x6a, 0x6e, 0xf2, 0x44, 0x87, 0xa1, 0xd3, 0xf3, 0x1f, 0x6c, 0x38,
+ 0x22, 0x4a, 0x44, 0x70, 0x66, 0xef, 0x8c, 0x3a, 0x51, 0xc8, 0xee, 0x85,
+ 0x00, 0x25, 0x93, 0x10, 0x2e, 0x0b, 0x1b, 0x03, 0x94, 0x47, 0x05, 0x22,
+ 0xd0, 0xc4, 0xec, 0x2e, 0xcc, 0xbc, 0xbb, 0x67, 0xfd, 0xec, 0x0e, 0xb1,
+ 0x3f, 0xbc, 0x82, 0xe0, 0xa7, 0x9c, 0xf3, 0xae, 0xbd, 0xb7, 0xab, 0x02,
+ 0xf1, 0xd9, 0x17, 0x4c, 0x9d, 0xeb, 0xe2, 0x00, 0x1e, 0x19, 0x6e, 0xb3,
+ 0xfd, 0x7d, 0xea, 0x49, 0x85, 0x43, 0x2f, 0x56, 0x81, 0x89, 0xba, 0x71,
+ 0x37, 0x10, 0xb5, 0x74, 0xab, 0x90, 0x4d, 0xc4, 0xd1, 0x0d, 0x8d, 0x6f,
+ 0x01, 0xf5, 0x2c, 0xc9, 0x1a, 0x79, 0xa1, 0x41, 0x71, 0x2b, 0xfb, 0xf3,
+ 0xd5, 0xe4, 0x2a, 0xf5, 0xad, 0x80, 0x7a, 0x03, 0xff, 0x5f, 0x45, 0x8c,
+ 0xec, 0x6a, 0x4b, 0x05, 0xe3, 0x65, 0x19, 0x70, 0x05, 0xad, 0xc4, 0xb8,
+ 0x4e, 0x9e, 0x9a, 0x36, 0x4a, 0x86, 0x9d, 0xf5, 0x99, 0xcb, 0x00, 0xb8,
+ 0xb9, 0xa7, 0x86, 0x18, 0xfc, 0x9a, 0xe7, 0x00, 0x6a, 0x67, 0xfa, 0x42,
+ 0x9d, 0xff, 0x4d, 0x7a, 0xe4, 0xe8, 0x03, 0x88, 0xff, 0x60, 0xe1, 0x8d,
+ 0x09, 0x5f, 0x6f, 0xde, 0x6b
+ };
+ NPT_Array<unsigned char> random(random_bytes, NPT_ARRAY_SIZE(random_bytes));
+
+ t = "x+5JniyLHBaefzDQxhIwgIHNICAmr0/W/IYuhfMQOCsOu4Bovv8c3HK1DY+ObAlj\r\n"
+ "uiEjsiQX0xdpRHcRNmpu8kSHodPzH2w4IkpEcGbvjDpRyO6FACWTEC4LGwOURwUi\r\n"
+ "0MTsLsy8u2f97A6xP7yC4Kec8669t6sC8dkXTJ3r4gAeGW6z/X3qSYVDL1aBibpx\r\n"
+ "NxC1dKuQTcTRDY1vAfUsyRp5oUFxK/vz1eQq9a2AegP/X0WM7GpLBeNlGXAFrcS4\r\n"
+ "Tp6aNkqGnfWZywC4uaeGGPya5wBqZ/pCnf9NeuToA4j/YOGNCV9v3ms=";
+ result = NPT_Base64::Decode(t.GetChars(), t.GetLength(), data);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(data.GetDataSize() == 233);
+ NPT_Array<unsigned char> verif(data.GetData(), data.GetDataSize());
+ NPT_ASSERT(verif == random);
+
+ result = NPT_Base64::Encode(&random[0], random.GetItemCount(), base64, NPT_BASE64_PEM_BLOCKS_PER_LINE);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(base64 == t);
+
+ NPT_String t_url = t;
+ t.Replace('/', '_');
+ t.Replace('+', '-');
+ result = NPT_Base64::Encode(&random[0], random.GetItemCount(), base64, NPT_BASE64_PEM_BLOCKS_PER_LINE, true);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(base64 == t);
+
+ t = "76768484767685839";
+ result = NPT_Base64::Decode(t.GetChars(), t.GetLength(), data);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_FORMAT);
+
+ t = "76869=978686";
+ result = NPT_Base64::Decode(t.GetChars(), t.GetLength(), data);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_FORMAT);
+
+ t = "7686=8978686";
+ result = NPT_Base64::Decode(t.GetChars(), t.GetLength(), data);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_FORMAT);
+
+ t = "7686==978686";
+ result = NPT_Base64::Decode(t.GetChars(), t.GetLength(), data);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_FORMAT);
+
+ // test IP address parsing
+ NPT_IpAddress ip;
+ NPT_ASSERT(NPT_FAILED(ip.Parse("")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("a.b.c.d")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.2.3.4.5")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.2.3.4.")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.2.3.4f")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.g.3.4")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.2..3.4")));
+ NPT_ASSERT(NPT_FAILED(ip.Parse("1.2.300.4")));
+ NPT_ASSERT(NPT_SUCCEEDED(ip.Parse("1.2.3.4")));
+ NPT_ASSERT(ip.AsBytes()[0] == 1);
+ NPT_ASSERT(ip.AsBytes()[1] == 2);
+ NPT_ASSERT(ip.AsBytes()[2] == 3);
+ NPT_ASSERT(ip.AsBytes()[3] == 4);
+ NPT_ASSERT(NPT_SUCCEEDED(ip.Parse("255.255.0.1")));
+ NPT_ASSERT(ip.AsBytes()[0] == 255);
+ NPT_ASSERT(ip.AsBytes()[1] == 255);
+ NPT_ASSERT(ip.AsBytes()[2] == 0);
+ NPT_ASSERT(ip.AsBytes()[3] == 1);
+ NPT_ASSERT(NPT_SUCCEEDED(ip.Parse("0.0.0.0")));
+ NPT_ASSERT(ip.AsBytes()[0] == 0);
+ NPT_ASSERT(ip.AsBytes()[1] == 0);
+ NPT_ASSERT(ip.AsBytes()[2] == 0);
+ NPT_ASSERT(ip.AsBytes()[3] == 0);
+
+ // MIME parameter parser
+ NPT_Map<NPT_String,NPT_String> params;
+ result = NPT_ParseMimeParameters(NULL, params);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_PARAMETERS);
+
+ result = NPT_ParseMimeParameters("", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 0);
+
+ result = NPT_ParseMimeParameters("foo=bar", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters(" foo =bar", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters(" foo= bar", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters(" foo= bar;", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("foo=\"bar\"", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("foo=\"ba\"r\"", params);
+ NPT_ASSERT(result == NPT_ERROR_INVALID_SYNTAX);
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("foo=\"ba\\\"r\"", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "ba\"r");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("foo=\"bar\\\"\"", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar\"");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("foo=\"bar\\\\\"", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 1);
+ NPT_ASSERT(params["foo"] == "bar\\");
+ params.Clear();
+
+ result = NPT_ParseMimeParameters("a=1;b=2; c=3; d=4 ; e=\"\\;\"; f=\";\"", params);
+ NPT_ASSERT(NPT_SUCCEEDED(result));
+ NPT_ASSERT(params.GetEntryCount() == 6);
+ NPT_ASSERT(params["a"] == "1");
+ NPT_ASSERT(params["b"] == "2");
+ NPT_ASSERT(params["c"] == "3");
+ NPT_ASSERT(params["d"] == "4");
+ NPT_ASSERT(params["e"] == ";");
+ NPT_ASSERT(params["f"] == ";");
+ params.Clear();
+
+ // number parsing
+ float f;
+ int i;
+ int l;
+ NPT_Int32 si32;
+ NPT_UInt32 ui32;
+
+ SHOULD_FAIL(NPT_ParseInteger("ssdfsdf", i, false));
+ SHOULD_FAIL(NPT_ParseInteger("", i, false));
+ SHOULD_FAIL(NPT_ParseInteger(NULL, i, false));
+ SHOULD_FAIL(NPT_ParseInteger("123a", i, false));
+ SHOULD_FAIL(NPT_ParseInteger("a123", i, false));
+ SHOULD_FAIL(NPT_ParseInteger(" 123", i, false));
+ SHOULD_FAIL(NPT_ParseInteger("a 123", i, true));
+ SHOULD_FAIL(NPT_ParseInteger(" a123", i, true));
+
+ SHOULD_SUCCEED(NPT_ParseInteger("+1", i, false));
+ SHOULD_EQUAL_I(i, 1);
+ SHOULD_SUCCEED(NPT_ParseInteger("+123", i, false));
+ SHOULD_EQUAL_I(i, 123);
+ SHOULD_SUCCEED(NPT_ParseInteger("-1", i, false));
+ SHOULD_EQUAL_I(i, -1);
+ SHOULD_SUCCEED(NPT_ParseInteger("-123", i, false));
+ SHOULD_EQUAL_I(i, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger("-123fgs", i, true));
+ SHOULD_EQUAL_I(i, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger(" -123fgs", i, true));
+ SHOULD_EQUAL_I(i, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger("0", i, true));
+ SHOULD_EQUAL_I(i, 0);
+ SHOULD_SUCCEED(NPT_ParseInteger("7768", i, true));
+ SHOULD_EQUAL_I(i, 7768);
+
+ SHOULD_SUCCEED(NPT_ParseInteger("+1", l, false));
+ SHOULD_EQUAL_I(l, 1);
+ SHOULD_SUCCEED(NPT_ParseInteger("+123", l, false));
+ SHOULD_EQUAL_I(l, 123);
+ SHOULD_SUCCEED(NPT_ParseInteger("-1", l, false));
+ SHOULD_EQUAL_I(l, -1);
+ SHOULD_SUCCEED(NPT_ParseInteger("-123", l, false));
+ SHOULD_EQUAL_I(l, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger("-123fgs", l, true));
+ SHOULD_EQUAL_I(l, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger(" -123fgs", l, true));
+ SHOULD_EQUAL_I(l, -123);
+ SHOULD_SUCCEED(NPT_ParseInteger("0", l, true));
+ SHOULD_EQUAL_I(l, 0);
+ SHOULD_SUCCEED(NPT_ParseInteger("7768", l, true));
+ SHOULD_EQUAL_I(l, 7768);
+
+ SHOULD_SUCCEED(NPT_ParseInteger32("2147483647", si32, false));
+ SHOULD_EQUAL_I(si32, 2147483647);
+ SHOULD_SUCCEED(NPT_ParseInteger32("-2147483647", si32, false));
+ SHOULD_EQUAL_I(si32, -2147483647);
+ SHOULD_SUCCEED(NPT_ParseInteger32("-2147483648", si32, false));
+ SHOULD_EQUAL_I(si32, (-2147483647 - 1));
+ SHOULD_FAIL(NPT_ParseInteger32("2147483648", si32, false));
+ SHOULD_FAIL(NPT_ParseInteger32("-2147483649", si32, false));
+ SHOULD_FAIL(NPT_ParseInteger32("-21474836480", si32, false));
+ SHOULD_FAIL(NPT_ParseInteger32("21474836470", si32, false));
+
+ SHOULD_SUCCEED(NPT_ParseInteger32("4294967295", ui32, false));
+ SHOULD_EQUAL_I(ui32, 4294967295U);
+ SHOULD_FAIL(NPT_ParseInteger32("4294967296", ui32, false));
+ SHOULD_FAIL(NPT_ParseInteger32("-1", ui32, false));
+
+ SHOULD_SUCCEED(NPT_ParseInteger64("9223372036854775807", si64, false));
+ SHOULD_EQUAL_I(si64, NPT_INT64_C(9223372036854775807));
+ SHOULD_SUCCEED(NPT_ParseInteger64("-9223372036854775807", si64, false));
+ SHOULD_EQUAL_I(si64, NPT_INT64_C(-9223372036854775807));
+ SHOULD_SUCCEED(NPT_ParseInteger64("-9223372036854775808", si64, false));
+ SHOULD_EQUAL_I(si64, (NPT_INT64_C(-9223372036854775807) - NPT_INT64_C(1)));
+ SHOULD_FAIL(NPT_ParseInteger64("9223372036854775808", si64, false));
+ SHOULD_FAIL(NPT_ParseInteger64("-9223372036854775809", si64, false));
+ SHOULD_FAIL(NPT_ParseInteger64("-9223372036854775897", si64, false));
+ SHOULD_FAIL(NPT_ParseInteger64("9223372036854775897", si64, false));
+
+ SHOULD_SUCCEED(NPT_ParseInteger64("18446744073709551615", ui64, false));
+ SHOULD_EQUAL_I(ui64, NPT_UINT64_C(18446744073709551615));
+ SHOULD_FAIL(NPT_ParseInteger64("18446744073709551616", ui64, false));
+ SHOULD_FAIL(NPT_ParseInteger64("-1", ui64, false));
+
+ SHOULD_FAIL(NPT_ParseFloat("ssdfsdf", f, false));
+ SHOULD_FAIL(NPT_ParseFloat("", f, false));
+ SHOULD_FAIL(NPT_ParseFloat(NULL, f, false));
+ SHOULD_FAIL(NPT_ParseFloat("123.", f, false));
+ SHOULD_FAIL(NPT_ParseFloat("a123", f, false));
+ SHOULD_FAIL(NPT_ParseFloat(" 123", f, false));
+ SHOULD_FAIL(NPT_ParseFloat(" 127.89E5ff", f, false));
+
+ SHOULD_SUCCEED(NPT_ParseFloat("+1.0", f, false));
+ SHOULD_EQUAL_F(f, 1.0f);
+ SHOULD_SUCCEED(NPT_ParseFloat("+123", f, false));
+ SHOULD_EQUAL_F(f, 123.0f);
+ SHOULD_SUCCEED(NPT_ParseFloat("-0.1", f, false));
+ SHOULD_EQUAL_F(f, -0.1f);
+ SHOULD_SUCCEED(NPT_ParseFloat("0.23e-13", f, false));
+ SHOULD_EQUAL_F(f, 0.23e-13f);
+ SHOULD_SUCCEED(NPT_ParseFloat(" 127.89E5ff", f, true));
+ SHOULD_EQUAL_F(f, 127.89E5f);
+ SHOULD_SUCCEED(NPT_ParseFloat("+0.3db", f, true));
+ SHOULD_EQUAL_F(f, 0.3f);
+ SHOULD_SUCCEED(NPT_ParseFloat("+.3db", f, true));
+ SHOULD_EQUAL_F(f, 0.3f);
+ SHOULD_SUCCEED(NPT_ParseFloat("-.3db", f, true));
+ SHOULD_EQUAL_F(f, -0.3f);
+ SHOULD_SUCCEED(NPT_ParseFloat(".3db", f, true));
+ SHOULD_EQUAL_F(f, .3f);
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Queue1/QueueTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Queue1/QueueTest1.cpp
new file mode 100644
index 0000000000..71b89461c6
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Queue1/QueueTest1.cpp
@@ -0,0 +1,302 @@
+/*****************************************************************
+|
+| Queue Test Program 1
+|
+| (c) 2008 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#define CHECK(x) { \
+ if (!(x)) { \
+ printf("TEST FAILED line %d\n", __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+}
+
+/*----------------------------------------------------------------------
+| Item
++---------------------------------------------------------------------*/
+class Item
+{
+public:
+ typedef enum {
+ MSG_INCREMENT_COUNTER,
+ MSG_CHANGE_TIMEOUT,
+ MSG_TERMINATE
+ } Message;
+
+ Item(Message msg) : m_Message(msg) {}
+
+ Message m_Message;
+};
+
+/*----------------------------------------------------------------------
+| WriterThread
++---------------------------------------------------------------------*/
+class WriterThread : public NPT_Thread
+{
+public:
+ WriterThread(NPT_Queue<Item>& queue, const char* name) :
+ m_Queue(queue), m_Name(name), m_Counter(0) {}
+
+ void Run() {
+ NPT_Debug("WRITER %s starting ++++++++++++++++++++++++\n", (const char*)m_Name);
+
+ for (int i=0; i<1000; i++) {
+ if (i%5 == 0) {
+ NPT_Debug("WRITER %s post: change timeout\n", (const char*)m_Name);
+ m_Queue.Push(new Item(Item::MSG_CHANGE_TIMEOUT));
+ }
+ m_Queue.Push(new Item(Item::MSG_INCREMENT_COUNTER));
+ if (i%3 == 0) {
+ NPT_Debug("WRITER %s sleeping\n", (const char*)m_Name);
+ NPT_System::Sleep(NPT_TimeInterval(0.01f));
+ }
+ }
+
+ NPT_Debug("WRITER %s terminating ----------------------\n", (const char*)m_Name);
+ }
+
+ NPT_Queue<Item>& m_Queue;
+ NPT_String m_Name;
+ unsigned int m_Counter;
+};
+
+/*----------------------------------------------------------------------
+| ReaderThread
++---------------------------------------------------------------------*/
+class ReaderThread : public NPT_Thread
+{
+public:
+ ReaderThread(NPT_Queue<Item>& queue, const char* name, NPT_TimeInterval sleep_time) :
+ m_Queue(queue), m_Name(name), m_Counter(0), m_NbTimeouts(0), m_SleepTime(sleep_time) {}
+
+ void Run() {
+ NPT_Debug("READER %s starting =====================\n", (const char*)m_Name);
+ NPT_Timeout timeout = NPT_TIMEOUT_INFINITE;
+ for (;;) {
+ if (m_SleepTime.m_NanoSeconds != 0) {
+ NPT_Debug("READER %s sleeping...\n", (const char*)m_Name);
+ NPT_System::Sleep(m_SleepTime);
+ NPT_Debug("READER %s woke up!\n", (const char*)m_Name);
+ }
+
+ Item* item = NULL;
+ NPT_Result result = m_Queue.Pop(item, timeout);
+ if (NPT_SUCCEEDED(result)) {
+ CHECK(item != NULL);
+ Item::Message msg = item->m_Message;
+ delete item;
+ switch (msg) {
+ case Item::MSG_INCREMENT_COUNTER:
+ ++m_Counter;
+ NPT_Debug("READER %s new counter=%d\n", (const char*)m_Name, m_Counter);
+ break;
+
+ case Item::MSG_CHANGE_TIMEOUT:
+ if (timeout == 0) {
+ timeout = 15;
+ } else if (timeout == 15) {
+ timeout = NPT_TIMEOUT_INFINITE;
+ } else {
+ timeout = 0;
+ }
+ NPT_Debug("READER %s new timeout=%d\n", (const char*)m_Name, timeout);
+ break;
+
+ case Item::MSG_TERMINATE:
+ NPT_Debug("READER %s terminating #######################\n", (const char*)m_Name);
+ return;
+ }
+ } else {
+ NPT_Debug("READER %s pop returned %d\n", (const char*)m_Name, result);
+ if (timeout == 0) {
+ CHECK(result == NPT_ERROR_LIST_EMPTY);
+ NPT_System::Sleep(0.01f);
+ } else if (timeout != NPT_TIMEOUT_INFINITE) {
+ CHECK(result == NPT_ERROR_TIMEOUT);
+ ++m_NbTimeouts;
+ } else {
+ NPT_ASSERT(0);
+ }
+ }
+ }
+ }
+
+ NPT_Queue<Item>& m_Queue;
+ NPT_String m_Name;
+ unsigned int m_Counter;
+ unsigned int m_NbTimeouts;
+ NPT_TimeInterval m_SleepTime;
+};
+
+/*----------------------------------------------------------------------
+| Test1
++---------------------------------------------------------------------*/
+static void
+Test1()
+{
+ // create a queue
+ NPT_Queue<Item> queue;
+
+ // create 2 writers
+ NPT_Debug("creating writer 1\n");
+ WriterThread writer1(queue, "1"); writer1.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+ NPT_Debug("creating writer 2\n");
+ WriterThread writer2(queue, "2"); writer2.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+ // create 4 readers
+ NPT_Debug("creating reader 1\n");
+ ReaderThread reader1(queue, "1", NPT_TimeInterval(0.0f)); reader1.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+ NPT_Debug("creating reader 2\n");
+ ReaderThread reader2(queue, "2", NPT_TimeInterval(0.0f)); reader2.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+ NPT_Debug("creating reader 3\n");
+ ReaderThread reader3(queue, "3", NPT_TimeInterval(0.0f)); reader3.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+ NPT_Debug("creating reader 4\n");
+ ReaderThread reader4(queue, "4", NPT_TimeInterval(0.0f)); reader4.Start();
+ NPT_System::Sleep(NPT_TimeInterval(0.3f));
+
+
+ // wait for the writers
+ NPT_Result result;
+ NPT_Debug("Waiting for Writer 1 *********************\n");
+ result = writer1.Wait();
+ NPT_Debug("Writer 1 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Writer 2 *********************\n");
+ result = writer2.Wait();
+ NPT_Debug("Writer 1 done *********************\n");
+
+ // post 4 termination messages
+ queue.Push(new Item(Item::MSG_TERMINATE));
+ queue.Push(new Item(Item::MSG_TERMINATE));
+ queue.Push(new Item(Item::MSG_TERMINATE));
+ queue.Push(new Item(Item::MSG_TERMINATE));
+
+ // wait for the readers
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Reader 1 *********************\n");
+ result = reader1.Wait();
+ NPT_Debug("Reader 1 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Reader 2 *********************\n");
+ result = reader2.Wait();
+ NPT_Debug("Reader 2 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Reader 3 *********************\n");
+ result = reader3.Wait();
+ NPT_Debug("Reader 3 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Reader 4 *********************\n");
+ result = reader4.Wait();
+ NPT_Debug("Reader 4 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+
+ // check counters
+ unsigned int total = reader1.m_Counter+reader2.m_Counter+reader3.m_Counter+reader4.m_Counter;
+ CHECK(total == 2*1000);
+}
+
+/*----------------------------------------------------------------------
+| Test2
++---------------------------------------------------------------------*/
+static void
+Test2()
+{
+ // create a queue
+ NPT_Queue<Item> queue;
+
+ // create 2 readers
+ NPT_Debug("creating reader 1\n");
+ ReaderThread reader1(queue, "1", NPT_TimeInterval(0.05f)); reader1.Start();
+
+ NPT_Debug("creating reader 2\n");
+ ReaderThread reader2(queue, "2", NPT_TimeInterval(0.065f)); reader2.Start();
+
+ for (int i=0; i<30; i++) {
+ queue.Push(new Item(Item::MSG_INCREMENT_COUNTER));
+ }
+ queue.Push(new Item(Item::MSG_TERMINATE));
+ for (int i=0; i<30; i++) {
+ queue.Push(new Item(Item::MSG_INCREMENT_COUNTER));
+ }
+ queue.Push(new Item(Item::MSG_TERMINATE));
+
+ NPT_Result result;
+ NPT_Debug("Waiting for Reader 1 *********************\n");
+ result = reader1.Wait();
+ NPT_Debug("Reader 1 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+ NPT_Debug("Waiting for Reader 1 *********************\n");
+ result = reader2.Wait();
+ NPT_Debug("Reader 2 done *********************\n");
+ CHECK(result == NPT_SUCCESS);
+
+ // check counters
+ unsigned int total = reader1.m_Counter+reader2.m_Counter;
+ CHECK(total == 60);
+}
+
+#if defined(WIN32) && defined(_DEBUG)
+static int AllocHook( int allocType, void *userData, size_t size, int blockType,
+ long requestNumber, const unsigned char *filename, int lineNumber)
+{
+ (void)allocType;
+ (void)userData;
+ (void)size;
+ (void)blockType;
+ (void)requestNumber;
+ (void)lineNumber;
+ (void)filename;
+ return 1;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ NPT_COMPILER_UNUSED(argc);
+ NPT_COMPILER_UNUSED(argv);
+
+#if defined(WIN32) && defined(_DEBUG)
+ _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF |
+ _CRTDBG_LEAK_CHECK_DF);
+ _CrtSetAllocHook(AllocHook);
+#endif
+
+ Test1();
+ Test2();
+
+ NPT_Debug("- program done -\n");
+
+ return 0;
+}
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp
new file mode 100644
index 0000000000..43471824a6
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp
@@ -0,0 +1,113 @@
+/*****************************************************************
+|
+| RingBuffer Test Program 1
+|
+| (c) 2001-2005 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include <stdlib.h>
+
+#if defined(WIN32)
+#include <crtdbg.h>
+#endif
+
+const unsigned int BUFFER_SIZE = 17;
+
+/*----------------------------------------------------------------------
+| ReadChunk
++---------------------------------------------------------------------*/
+static NPT_Result
+ReadChunk(NPT_RingBuffer& buffer)
+{
+ static unsigned int total_read = 0;
+ unsigned int chunk = rand()%BUFFER_SIZE;
+ unsigned int can_read = buffer.GetAvailable();
+ if (chunk > can_read) chunk = can_read;
+ if (chunk == 0) return NPT_SUCCESS;
+
+ // read a chunk
+ unsigned char bytes[BUFFER_SIZE];
+ NPT_CHECK(buffer.Read(bytes, chunk));
+
+ // check values
+ for (unsigned int i=0; i<chunk; i++) {
+ unsigned int index = total_read+i;
+ unsigned char expected = index & 0xFF;
+ if (bytes[i] != expected) {
+ printf("unexpected byte at index %d (expected %d, got %d)\n",
+ index, expected, bytes[i]);
+ return NPT_FAILURE;
+ }
+ }
+ total_read += chunk;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| WriteChunk
++---------------------------------------------------------------------*/
+static NPT_Result
+WriteChunk(NPT_RingBuffer& buffer)
+{
+ static unsigned int total_written = 0;
+ unsigned int chunk = rand()%BUFFER_SIZE;
+ unsigned int can_write = buffer.GetSpace();
+ if (chunk > can_write) chunk = can_write;
+ if (chunk == 0) return NPT_SUCCESS;
+
+ // generate buffer
+ unsigned char bytes[BUFFER_SIZE];
+ for (unsigned int i=0; i<chunk; i++) {
+ unsigned int index = total_written+i;
+ bytes[i] = index&0xFF;
+ }
+
+ // write chunk
+ NPT_CHECK(buffer.Write(bytes, chunk));
+ total_written += chunk;
+
+ return NPT_SUCCESS;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ NPT_RingBuffer buffer(BUFFER_SIZE);
+
+ for (int i=0; i<100000000; i++) {
+ if (NPT_FAILED(WriteChunk(buffer))) {
+ printf("WriteChunk failed\n");
+ return 1;
+ }
+ if (NPT_FAILED(ReadChunk(buffer))) {
+ printf("ReadChunk failed\n");
+ return 1;
+ }
+ }
+
+ printf("RingBufferTest1 passed\n");
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Streams1/StreamsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Streams1/StreamsTest1.cpp
new file mode 100644
index 0000000000..fed8514231
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Streams1/StreamsTest1.cpp
@@ -0,0 +1,74 @@
+/*****************************************************************
+|
+| Streams Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ NPT_StringOutputStream sos;
+ NPT_ASSERT(sos.GetString().GetLength() == 0);
+ sos.WriteString("hello");
+ NPT_ASSERT(sos.GetString() == "hello");
+ sos.Reset();
+ NPT_ASSERT(sos.GetString().GetLength() == 0);
+
+ NPT_MemoryStream mems;
+ NPT_ASSERT(mems.GetDataSize() == 0);
+ NPT_LargeSize available;
+ NPT_ASSERT(mems.GetAvailable(available) == NPT_SUCCESS);
+ NPT_ASSERT(available == 0);
+ NPT_COMPILER_UNUSED(available);
+
+ mems.WriteUI08(1);
+ mems.WriteUI16(0x0203);
+ mems.WriteUI24(0x040506);
+ mems.WriteUI32(0x0708090A);
+ mems.WriteUI64( (((NPT_UInt64)0x0B0C0D0E)<<32) | (((NPT_UInt64)0x0F000102)) );
+ NPT_ASSERT(mems.GetAvailable(available) == NPT_SUCCESS);
+ NPT_ASSERT(available == 18);
+ NPT_ASSERT(mems.GetSize(available) == NPT_SUCCESS);
+ NPT_ASSERT(available == 18);
+ NPT_ASSERT(mems.GetDataSize() == 18);
+
+ for (int i=0; i<18; i++) {
+ NPT_ASSERT(mems.GetData()[i] == (1+i)%16);
+ }
+
+ NPT_UInt64 i64;
+ NPT_UInt32 i32;
+ NPT_UInt32 i24;
+ NPT_UInt16 i16;
+ NPT_UInt8 i8;
+ mems.ReadUI08(i8);
+ mems.ReadUI16(i16);
+ mems.ReadUI24(i24);
+ mems.ReadUI32(i32);
+ mems.ReadUI64(i64);
+ NPT_ASSERT(i8 == 1);
+ NPT_ASSERT(i16 == 0x0203);
+ NPT_ASSERT(i24 == 0x040506);
+ NPT_ASSERT(i32 == 0x0708090A);
+ NPT_ASSERT(i64 == (((NPT_UInt64)0x0B0C0D0E)<<32) | (((NPT_UInt64)0x0F000102)));
+ NPT_ASSERT(mems.GetDataSize() == 18);
+ NPT_ASSERT(mems.GetAvailable(available) == NPT_SUCCESS);
+ NPT_ASSERT(available == 0);
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp
new file mode 100644
index 0000000000..965f3f7b4d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp
@@ -0,0 +1,631 @@
+/*****************************************************************
+|
+| Stings Test Program 1
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| Fail
++---------------------------------------------------------------------*/
+static void
+Fail()
+{
+ printf("##################################\n");
+ NPT_ASSERT(0);
+ //exit(1);
+}
+
+/*----------------------------------------------------------------------
+| CompareTest
++---------------------------------------------------------------------*/
+static void
+CompareTest(const char* name, const char* a, const char* b, int result, int expected)
+{
+ printf("%s %s %s = %d [%s]\n", a, name, b, result, result == expected ? "pass" : "fail");
+ if (result != expected) Fail();
+}
+
+/*----------------------------------------------------------------------
+| EqualTest
++---------------------------------------------------------------------*/
+static void
+EqualTest(const char* name, const char* a, const char* b, const char* expected)
+{
+ printf("op %s on %s, result = %s ", name, a, b);
+ if (strcmp(expected, b)) {
+ printf(" [fail: expected %s, got %s]\n", expected, b);
+ } else {
+ printf(" [pass]\n");
+ }
+ if (strcmp(expected, b)) Fail();
+}
+
+/*----------------------------------------------------------------------
+| StringTest
++---------------------------------------------------------------------*/
+static void
+StringTest(const char* name, const char* a, const char* expected)
+{
+ printf("%s: %s", name, a);
+ if (strcmp(expected, a)) {
+ printf(" [fail: expected %s, got %s]\n", expected, a);
+ } else {
+ printf(" [pass]\n");
+ }
+ if (strcmp(expected, a)) Fail();
+}
+
+/*----------------------------------------------------------------------
+| IntTest
++---------------------------------------------------------------------*/
+static void
+IntTest(const char* name, int a, int expected)
+{
+ printf("%s: %d", name, a);
+ if (a != expected) {
+ printf(" [fail: expected %d, got %d]\n", expected, a);
+ } else {
+ printf(" [pass]\n");
+ }
+ if (a != expected) Fail();
+}
+
+/*----------------------------------------------------------------------
+| FloatTest
++---------------------------------------------------------------------*/
+static void
+FloatTest(const char* name, float a, float expected)
+{
+ printf("%s: %f", name, a);
+ if (a != expected) {
+ printf(" [fail: expected %f, got %f]\n", expected, a);
+ } else {
+ printf(" [pass]\n");
+ }
+ if (a != expected) Fail();
+}
+
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ printf(":: testing empty string\n");
+ NPT_String s;
+ printf("sizeof(s)=%d, chars = '%s'\n", (int)sizeof(s), s.GetChars());
+
+ printf(":: testing allocation, new and delete\n");
+ NPT_String* n0 = new NPT_String("Hello");
+ delete n0;
+ NPT_String n1 = "Bye";
+ n1 = "ByeBye";
+
+ printf(":: testing factories\n");
+ NPT_String f0 = NPT_String::FromInteger(0);
+ StringTest("FromInteger(0)", f0, "0");
+ f0 = NPT_String::FromInteger(1234567);
+ StringTest("FromInteger(1234567)", f0, "1234567");
+ f0 = NPT_String::FromInteger(-1234567);
+ StringTest("FromInteger(-1234567)", f0, "-1234567");
+ f0 = NPT_String::FromIntegerU(0xFFFFFFFF);
+ StringTest("FromIntegerU(0xFFFFFFFF)", f0, "4294967295");
+
+ printf(":: testing constructors\n");
+ NPT_String s00;
+ StringTest("constructor()", s00, "");
+ NPT_String s01("abcdef");
+ StringTest("constructor(const char*)", s01, "abcdef");
+ NPT_String s02(s01);
+ StringTest("constructor(const NPT_String&)", s02, "abcdef");
+ NPT_String s03("abcdefgh", 3);
+ StringTest("constructor(const char* s, unsigned int)", s03, "abc");
+ NPT_String s04('Z');
+ StringTest("constructor(char)", s04, "Z");
+ NPT_String s05('Z', 7);
+ StringTest("constructor(char, unsigned int)", s05, "ZZZZZZZ");
+ NPT_String s06((const char*)NULL);
+ StringTest("constructor(NULL)", s06, "");
+ NPT_String s07(s06);
+ StringTest("constructor(const NPT_String& = empty)", s07, "");
+ NPT_String s08("");
+ StringTest("constructor(const char* = \"\")", s08, "");
+ NPT_String s09("jkhlkjh\0fgsdfg\0fgsdfg", 10);
+ StringTest("NPT_String s09(\"jkhlkjh\0fgsdfg\0fgsdfg\", 0, 10)", s09, "jkhlkjh");
+ NPT_String s10((const char*)NULL, 0);
+ StringTest("NPT_String s10(NULL, 0)", s10, "");
+ NPT_String s11(' ', 0);
+ StringTest("NPT_String s11(' ', 0)", s11, "");
+
+ printf(":: testing assignments\n");
+ NPT_String a00 = (const char*)NULL;
+ StringTest("operator=(const char* = NULL)", a00, "");
+ NPT_String a01 = a00;
+ StringTest("operator=(const NPT_String& = empty)", a01, "");
+ NPT_String a02 = "ab";
+ StringTest("operator=(const char*)", a02, "ab");
+ a02 = "abc";
+ StringTest("operator=(const char* = bigger string)", a02, "abc");
+ a02 = "ab";
+ StringTest("operator=(const char* = smaller)", a02, "ab");
+ a02 = (const char*)NULL;
+ StringTest("operator=(const char* = NULL)", a02, "");
+ a02 = "abcd";
+ NPT_String a03 = a02;
+ a02 = "ab";
+ StringTest("operator=(const char*) with shared buffer", a02, "ab");
+ a02 = "";
+ StringTest("operator=(const char* = \"\")", a02, "");
+ NPT_String p2("self");
+ p2 = p2;
+ StringTest("self assignment", p2, "self");
+ NPT_String p3 = p2;
+ p2 = p2;
+ StringTest("self assignment with other ref", p2, "self");
+
+ printf(":: testing SetLength()\n");
+ NPT_String sl00;
+ IntTest("", sl00.SetLength(0), NPT_SUCCESS);
+ IntTest("", sl00.SetLength(3, true), NPT_SUCCESS);
+ StringTest("", sl00, " ");
+ sl00.Assign("blabla", 6);
+ IntTest("", sl00.SetLength(7, true), NPT_SUCCESS);
+ StringTest("", sl00, "blabla ");
+ IntTest("", sl00.SetLength(3), NPT_SUCCESS);
+ StringTest("", sl00, "bla");
+ IntTest("", sl00.SetLength(0), NPT_SUCCESS);
+ StringTest("", sl00, "");
+
+ printf(":: testing casts\n");
+ s = "hello";
+ printf(":: cast to char*\n");
+ StringTest("cast to char*", (char*)s, "hello");
+ StringTest("cast to const char*", (const char*)s, "hello");
+
+ printf(":: testing GetLength\n");
+ NPT_String gl0 = "abcefg";
+ IntTest("GetLength", gl0.GetLength(), 6);
+ gl0 = "";
+ IntTest("GetLength", gl0.GetLength(), 0);
+ gl0 = "abcd";
+ NPT_String gl1 = gl0;
+ IntTest("GetLength", gl1.GetLength(), 4);
+ gl1 += 'd';
+ IntTest("GetLength", gl1.GetLength(), 5);
+
+ printf("::testing references\n");
+ NPT_String* d1;
+ NPT_String d2;
+ NPT_String d3;
+ d1 = new NPT_String("first ref");
+ d2 = *d1;
+ delete d1;
+ d1 = NULL;
+ printf(d2);
+ d3 = d2;
+ d3 = "d3";
+ printf(d2);
+ printf(d3);
+
+ printf("::testing Append\n");
+ NPT_String l = "blabla";
+ l.Append("blibliblo", 6);
+ StringTest("append(const char*, int size)", l, "blablablibli");
+ NPT_String a;
+ a.Append("bloblo", 3);
+ StringTest("append to NULL", a, "blo");
+
+ printf("::testing Reserve\n");
+ NPT_String r = "123";
+ r.Reserve(100);
+ IntTest("size of string not changed", 3, r.GetLength());
+ r += "4";
+ r += "5";
+ r += "6";
+ NPT_String r2 = r; // make a new reference
+ r += "7";
+ r += "8";
+ r2 += "a";
+ r2 += "b";
+ StringTest("string r not changed", r, "12345678");
+ StringTest("string r2 not changed", r2, "123456ab");
+ NPT_String rr0 = "hello";
+ rr0.Reserve(0);
+ StringTest("string rr0 not changed", rr0, "hello");
+ rr0.Reserve(100);
+ StringTest("string rr0 not changed", rr0, "hello");
+
+ printf(":: testing substring");
+ NPT_String sup("abcdefghijklmnopqrstub");
+ NPT_String sub = sup.SubString(0, 2);
+ StringTest("substring [0,2] of 'abcdefghijklmnopqrstub'", sub, "ab");
+ sub = sup.SubString(3, 4);
+ StringTest("substring [3,4] of 'abcdefghijklmnopqrstub'", sub, "defg");
+ sub = sup.SubString(100, 5);
+ StringTest("substring [100,5] of 'abcdefghijklmnopqrstub'", sub, "");
+ sub = sup.SubString(8,100);
+ StringTest("substring [8,100] of 'abcdefghijklmnopqrstub'", sub, "ijklmnopqrstub");
+ printf(":: decl NPT_String sub2(p2, 1, 2);\n");
+
+ printf(":: testing trims");
+ NPT_String trim = "*&##just this$&**";
+ trim.TrimLeft('*');
+ StringTest("TrimLeft('*') of '*&##just this$&**'", trim, "&##just this$&**");
+ trim.TrimLeft("*&##");
+ StringTest("TrimLeft('&*##')", trim, "just this$&**");
+ trim.TrimRight('*');
+ StringTest("TrimRight('*')", trim, "just this$&");
+ trim.TrimRight("*&##");
+ StringTest("TrimRight('*&##')", trim, "just this$");
+ trim = "*&##just this$&**";
+ trim.Trim("$&*#");
+ StringTest("Trim('$&*#') of '*&##just this$&**'", trim, "just this");
+ trim = "\r\njust this\t \r\n";
+ trim.Trim();
+ StringTest("Trim() of '\\r\\njust this\\t \\r\\n'", trim, "just this");
+ trim = "*&##just this$&**";
+ trim.Trim('*');
+ StringTest("", trim, "&##just this$&");
+
+ printf(":: testing operator+=(NPT_String&)\n");
+ NPT_String o1 = "hello";
+ NPT_String o2 = ", gilles";
+ o1 += o2;
+ StringTest("operator +=", o1, "hello, gilles");
+ o1 += ", some more";
+ StringTest("operator +=", o1, "hello, gilles, some more");
+
+ o1 = "abc";
+ o1 += '#';
+ StringTest("operator+=(char)", o1, "abc#");
+
+ o1 = "hello";
+ o2 = ", gilles";
+ NPT_String o3 = o1+o2;
+ StringTest("operator+(NPT_String&, NPT_String&)", o3, "hello, gilles");
+ o3 = o1+", gilles";
+ StringTest("operator+(NPT_String&, const char*)", o3, "hello, gilles");
+ o3 = "I say:"+o1;
+ StringTest("operator+(const char*, NPT_String&)", o3, "I say:hello");
+ o3 = NPT_String("one, ") + "two";
+ StringTest("NPT_String(\"one, \") + \"two\";", o3, "one, two");
+
+ printf(":: testing operator[]\n");
+ o1 = "abcdefgh";
+ IntTest("o1[0]", 'a', o1[0]);
+ IntTest("o1[1]", 'b', o1[1]);
+ IntTest("o1[2]", 'c', o1[2]);
+ o1[0] = '7';
+ IntTest("o1[0]", '7', o1[0]);
+
+ printf(":: testing operator comparisons\n");
+ CompareTest(">", "abc", "abc", NPT_String("abc") > "abc", 0);
+ CompareTest(">=", "abc", "abc", NPT_String("abc") >= "abc", 1);
+ CompareTest("==", "abc", "abc", NPT_String("abc") == "abc", 1);
+ CompareTest("!=", "abc", "abc", NPT_String("abc") != "abc", 0);
+ CompareTest("<", "abc", "abc", NPT_String("abc") < "abc", 0);
+ CompareTest("<=", "abc", "abc", NPT_String("abc") <= "abc", 1);
+
+ CompareTest(">", "abc", "ab", NPT_String("abc") > "ab", 1);
+ CompareTest(">=", "abc", "ab", NPT_String("abc") >= "ab", 1);
+ CompareTest("==", "abc", "ab", NPT_String("abc") == "ab", 0);
+ CompareTest("!=", "abc", "ab", NPT_String("abc") != "ab", 1);
+ CompareTest("<", "abc", "ab", NPT_String("abc") < "ab", 0);
+ CompareTest("<=", "abc", "ab", NPT_String("abc") <= "ab", 0);
+
+ CompareTest(">", "ab", "abc", NPT_String("ab") > "abc", 0);
+ CompareTest(">=", "ab", "abc", NPT_String("ab") >= "abc", 0);
+ CompareTest("==", "ab", "abc", NPT_String("ab") == "abc", 0);
+ CompareTest("!=", "ab", "abc", NPT_String("ab") != "abc", 1);
+ CompareTest("<", "ab", "abc", NPT_String("ab") < "abc", 1);
+ CompareTest("<=", "ab", "abc", NPT_String("ab") <= "abc", 1);
+
+ CompareTest(">", "bc", "abc", NPT_String("bc") > "abc", 1);
+ CompareTest(">=", "bc", "abc", NPT_String("bc") >= "abc", 1);
+ CompareTest("==", "bc", "abc", NPT_String("bc") == "abc", 0);
+ CompareTest("!=", "bc", "abc", NPT_String("bc") != "abc", 1);
+ CompareTest("<", "bc", "abc", NPT_String("bc") < "abc", 0);
+ CompareTest("<=", "bc", "abc", NPT_String("bc") <= "abc", 0);
+
+ CompareTest(">", "abc", "bc", NPT_String("abc") > "bc", 0);
+ CompareTest(">=", "abc", "bc", NPT_String("abc") >= "bc", 0);
+ CompareTest("==", "abc", "bc", NPT_String("abc") == "bc", 0);
+ CompareTest("!=", "abc", "bc", NPT_String("abc") != "bc", 1);
+ CompareTest("<", "abc", "bc", NPT_String("abc") < "bc", 1);
+ CompareTest("<=", "abc", "bc", NPT_String("abc") <= "bc", 1);
+
+ printf(":: testing Compare\n");
+ CompareTest("cnc", "abc", "abc", NPT_String("abc").Compare("abc", true), 0);
+ CompareTest("cnc", "AbC3", "aBC3", NPT_String("AbC3").Compare("aBC3", true), 0);
+ CompareTest("cnc", "AbCc", "aBcD", NPT_String("AbCc").Compare("aBcD", true), -1);
+ CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").Compare("aBcd", true), -1);
+ CompareTest("cnc", "bbCc", "aBcc", NPT_String("bbCc").Compare("aBcc", true), 1);
+ CompareTest("cnc", "BbCC", "aBcc", NPT_String("BbCC").Compare("aBcc", true), 1);
+ CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 4, true), -1);
+ CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 5, true), -1);
+ CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 3, true), 0);
+
+ printf(":: testing MakeLowercase\n");
+ NPT_String lower = "abcdEFGhijkl";
+ lower.MakeLowercase();
+ EqualTest("MakeLowercase (noref)", "abcdEFGhijkl", lower, "abcdefghijkl");
+ lower = "abcdEFGhijkl";
+ NPT_String lower2 = lower;
+ lower2.MakeLowercase();
+ EqualTest("MakeLowercase (ref)", "abcdEFGhijkl", lower2, "abcdefghijkl");
+
+ printf(":: testing MakeUppercase\n");
+ NPT_String upper = "abcdEFGhijkl";
+ upper.MakeUppercase();
+ EqualTest("MakeUppercase (noref)", "abcdEFGhijkl", upper, "ABCDEFGHIJKL");
+ upper = "abcdEFGhijkl";
+ NPT_String upper2 = upper;
+ upper2.MakeUppercase();
+ EqualTest("MakeUppercase (ref)", "abcdEFGhijkl", upper2, "ABCDEFGHIJKL");
+
+ printf(":: testing ToLowercase\n");
+ lower = "abcdEFGhijkl";
+ EqualTest("ToLowercase", "abcdEFGhijkl", lower.ToLowercase(), "abcdefghijkl");
+
+ printf(":: testing ToUppercase\n");
+ upper = "abcdEFGhijkl";
+ EqualTest("ToUppercase", "abcdEFGhijkl", lower.ToUppercase(), "ABCDEFGHIJKL");
+
+ printf(":: testing Find (s=\"au clair de la lune\")\n");
+ s = "au clair de la lune";
+ int f = s.Find("au");
+ IntTest("Find(\"au\")", f, 0);
+ f = s.Find("clair");
+ IntTest("Find(\"clair\")", f, 3);
+ f = s.Find("luneb");
+ IntTest("Find(\"luneb\")", f, -1);
+ f = s.Find((const char*)NULL);
+ IntTest("Find(NULL)", f, -1);
+ f = s.Find("hello");
+ IntTest("Find(\"hello\")", f, -1);
+ f = s.Find("");
+ IntTest("Find(\"\")", f, 0);
+ f = s.Find("clair", 2);
+ IntTest("Find(\"clair\", 2)", f, 3);
+ f = s.Find("clair", 100);
+ IntTest("Find(\"clair\", 100)", f, -1);
+ f = s.Find("cloir");
+ IntTest("Find(\"cloir\")", f, -1);
+ f = s.Find("au clair de la lune");
+ IntTest("Find(\"au clair de la lune\")", f, 0);
+ f = s.Find("au clair de la lune mon ami");
+ IntTest("Find(\"au clair de la lune mon ami\")", f, -1);
+ f = s.Find('c');
+ IntTest("Find('c')", f, 3);
+ NPT_String s1;
+ f = s1.Find("hello");
+ IntTest("Find() in empty string", f, -1);
+ f = s.Find("Clair De La Lune", 0, true);
+ IntTest("s.Find(\"Clair De La Lune\"", f, 3);
+ f = s.Find('z');
+ IntTest("", f, -1);
+ f = s.Find('a', 1);
+ IntTest("", f, 5);
+ f = s.Find('C', 0, true);
+ IntTest("", f, 3);
+
+ printf(":: testing ReverseFind\n");
+ s = "aabbccaa";
+ f = s.ReverseFind("a");
+ IntTest("", f, 7);
+ f = s.ReverseFind("a", 1);
+ IntTest("", f, 6);
+ f = s.ReverseFind("a", 9);
+ IntTest("", f, -1);
+ f = s.ReverseFind("aab");
+ IntTest("", f, 0);
+ f = s.ReverseFind((const char*)NULL);
+ IntTest("", f, -1);
+ f = s.ReverseFind("");
+ IntTest("", f, -1);
+ f = s.ReverseFind("aa", 1);
+ IntTest("", f, 0);
+ f = s.ReverseFind("aabbccaa");
+ IntTest("", f, 0);
+ f = s.ReverseFind("aabbccaaa");
+ IntTest("", f, -1);
+ f = s.ReverseFind("zz");
+ IntTest("", f, -1);
+ f = s.ReverseFind('z');
+ IntTest("", f, -1);
+ f = s.ReverseFind('b');
+ IntTest("", f, 3);
+ f = s.ReverseFind('a', 2);
+ IntTest("", f, 1);
+ f = s.ReverseFind('B', 0, true);
+ IntTest("", f, 3);
+ f = s.ReverseFind('B');
+ IntTest("", f, -1);
+
+ printf(":: testing StartsWith\n");
+ bool b = s.StartsWith("");
+ IntTest("", b, 1);
+ b = s.StartsWith("aaba");
+ IntTest("", b, 0);
+ b = s.StartsWith("aabbccaaa");
+ IntTest("", b, 0);
+ b = s.StartsWith("aabb");
+ IntTest("", b, 1);
+ b = s.StartsWith("AaB", true);
+ IntTest("", b, 1);
+ b = s.StartsWith("AaB");
+ IntTest("", b, 0);
+
+ printf(":: testing EndsWith\n");
+ b = s.EndsWith("");
+ IntTest("", b, 1);
+ b = s.EndsWith("aaba");
+ IntTest("", b, 0);
+ b = s.EndsWith("aabbccaaa");
+ IntTest("", b, 0);
+ b = s.EndsWith("ccaa");
+ IntTest("", b, 1);
+ b = s.EndsWith("CcAa", true);
+ IntTest("", b, 1);
+ b = s.EndsWith("CcAa");
+ IntTest("", b, 0);
+
+ printf(":: testing Replace\n");
+ NPT_String r0 = "abcdefghijefe";
+ r0.Replace('e','@');
+ StringTest("Replace(char, char)", r0, "abcd@fghij@f@");
+ NPT_String r1 = r0;
+ r1.Replace('@', '#');
+ StringTest("Replace(char, char)", r1, "abcd#fghij#f#");
+
+ printf(":: testing Insert\n");
+ NPT_String in0;
+ in0.Insert("hello", 1);
+ StringTest("Insert into NULL, past end", in0, "");
+ in0.Insert("hello");
+ StringTest("Insert into NULL, at start", in0, "hello");
+ in0.Insert("yoyo");
+ StringTest("Insert at start", in0, "yoyohello");
+ in0.Insert("yaya", 3);
+ StringTest("Insert at 3", in0, "yoyyayaohello");
+
+ printf(":: testing Erase\n");
+ NPT_String er0;
+ er0.Erase(0, 0);
+ StringTest("1", er0, "");
+ er0.Erase(0, 1);
+ StringTest("1", er0, "");
+ er0.Erase(1, 1);
+ StringTest("1", er0, "");
+ er0 = "hello world";
+ er0.Erase(0, 1);
+ StringTest("1", er0, "ello world");
+ er0.Erase(4);
+ StringTest("1", er0, "elloworld");
+ er0.Erase(7, 3);
+ StringTest("1", er0, "ellowor");
+ er0.Erase(5, 2);
+ StringTest("1", er0, "ellow");
+ er0.Erase(0, 5);
+ StringTest("1", er0, "");
+
+ printf(":: testing ToInteger");
+ NPT_String ti00("123");
+ unsigned int ul00;
+ int l00;
+ IntTest("", ti00.ToInteger(ul00), NPT_SUCCESS);
+ IntTest("", ul00, 123);
+ IntTest("", ti00.ToInteger(l00), NPT_SUCCESS);
+ IntTest("", l00, 123);
+ ti00 = "123ggds";
+ IntTest("", ti00.ToInteger(l00, false), NPT_ERROR_INVALID_PARAMETERS);
+ IntTest("", ti00.ToInteger(l00, true), NPT_SUCCESS);
+ IntTest("", l00, 123);
+ ti00 = "-123";
+ IntTest("", ti00.ToInteger(ul00, false), NPT_ERROR_INVALID_PARAMETERS);
+ IntTest("", ti00.ToInteger(l00), NPT_SUCCESS);
+ IntTest("", l00, -123);
+
+ printf(":: testing ToFloat");
+ NPT_String tf00("-1.234flo");
+ float fl00;
+ IntTest("", tf00.ToFloat(fl00, true), NPT_SUCCESS);
+ FloatTest("", fl00, -1.234f);
+ IntTest("", tf00.ToFloat(fl00, false), NPT_ERROR_INVALID_PARAMETERS);
+
+
+ NPT_List<NPT_String> sl;
+ sl = NPT_String("").Split("");
+ IntTest("", sl.GetItemCount(), 1);
+ StringTest("", *sl.GetFirstItem(), "");
+
+ sl = NPT_String("").Split("#");
+ IntTest("", sl.GetItemCount(), 1);
+ StringTest("", *sl.GetFirstItem(), "");
+
+ sl = NPT_String("aaa").Split("");
+ IntTest("", sl.GetItemCount(), 1);
+ StringTest("", *sl.GetFirstItem(), "aaa");
+
+ sl = NPT_String("aaa").Split("b");
+ IntTest("", sl.GetItemCount(), 1);
+ StringTest("", *sl.GetFirstItem(), "aaa");
+
+ sl = NPT_String("aaa").Split("a");
+ IntTest("", sl.GetItemCount(), 4);
+ NPT_String* sli;
+ sl.Get(0, sli);
+ StringTest("", *sli, "");
+ sl.Get(1, sli);
+ StringTest("", *sli, "");
+ sl.Get(2, sli);
+ StringTest("", *sli, "");
+ sl.Get(3, sli);
+ StringTest("", *sli, "");
+
+ sl = NPT_String("aaa").Split("aa");
+ IntTest("", sl.GetItemCount(), 2);
+ sl.Get(0, sli);
+ StringTest("", *sli, "");
+ sl.Get(1, sli);
+ StringTest("", *sli, "a");
+
+ sl = NPT_String("aaa").Split("aaa");
+ IntTest("", sl.GetItemCount(), 2);
+ sl.Get(0, sli);
+ StringTest("", *sli, "");
+ sl.Get(1, sli);
+ StringTest("", *sli, "");
+
+ sl = NPT_String("a;b;c;d;e").Split(";");
+ IntTest("", sl.GetItemCount(), 5);
+ sl.Get(0, sli);
+ StringTest("", *sli, "a");
+ sl.Get(1, sli);
+ StringTest("", *sli, "b");
+ sl.Get(2, sli);
+ StringTest("", *sli, "c");
+ sl.Get(3, sli);
+ StringTest("", *sli, "d");
+ sl.Get(4, sli);
+ StringTest("", *sli, "e");
+
+ NPT_String sf = NPT_String::Format("%s.%d", "hello", 3);
+ StringTest("", "hello.3", sf.GetChars());
+ for (unsigned int i=0; i<10; i++) {
+ sf = NPT_String::Format("%s%s", sf.GetChars(), sf.GetChars());
+ }
+ IntTest("", sf.GetLength(), (1<<10)*7);
+
+
+ char s_buf[7];
+ s_buf[5] = 'a';
+ NPT_CopyString(s_buf, "hello");
+ StringTest("", s_buf, "hello");
+ s_buf[5] = 'a';
+ NPT_CopyStringN(s_buf, "hello", 6);
+ StringTest("", s_buf, "hello");
+ s_buf[5] = 'a';
+ NPT_CopyStringN(s_buf, "hello", 5);
+ StringTest("", s_buf, "hello");
+ s_buf[5] = 'a';
+ NPT_CopyStringN(s_buf, "hello", 4);
+ StringTest("", s_buf, "hell");
+
+
+
+ printf("------------------------- done -----\n");
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Threads1/ThreadsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Threads1/ThreadsTest1.cpp
new file mode 100644
index 0000000000..a06dcf74cf
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Threads1/ThreadsTest1.cpp
@@ -0,0 +1,455 @@
+/*****************************************************************
+|
+| Threads Test Program 1
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#define CHECK(x) { \
+ if (!(x)) { \
+ printf("TEST FAILED line %d\n", __LINE__); \
+ NPT_ASSERT(0); \
+ } \
+}
+
+/*----------------------------------------------------------------------
+| Thread1
++---------------------------------------------------------------------*/
+class Thread1 : public NPT_Thread
+{
+public:
+ virtual ~Thread1() { NPT_Debug("~Thread1\n"); }
+ void Run() {
+ NPT_Debug("Thread1::Run - start\n");
+
+ // sleep a while
+ NPT_TimeInterval duration(1.2f);
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread1::Run - end\n");
+ }
+};
+
+/*----------------------------------------------------------------------
+| Thread2
++---------------------------------------------------------------------*/
+class Thread2 : public NPT_Runnable
+{
+public:
+ Thread2(NPT_SharedVariable* variable) : m_SharedVariable(variable) {}
+ virtual ~Thread2() { NPT_Debug("~Thread2\n"); }
+ void Run() {
+ NPT_Debug("Thread2::Run - start\n");
+
+ // sleep a while
+ NPT_TimeInterval duration(2.1f);
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread2::Run - waiting for variable == 3\n");
+ m_SharedVariable->WaitUntilEquals(3);
+ NPT_Debug("Thread2::Run - end\n");
+ NPT_Debug("Thread2::Run - deleting myself\n");
+ //FIXME: This causes a crash
+ //delete this;
+ }
+ NPT_SharedVariable* m_SharedVariable;
+};
+
+/*----------------------------------------------------------------------
+| Thread3
++---------------------------------------------------------------------*/
+class Thread3 : public NPT_Thread
+{
+public:
+ Thread3(NPT_SharedVariable* variable) : NPT_Thread(false),
+ m_SharedVariable(variable) {}
+ virtual ~Thread3() { NPT_Debug("~Thread3\n"); }
+ Thread3() : NPT_Thread(false) {}
+ void Run() {
+ NPT_Debug("Thread3::Run - start\n");
+
+ // sleep a while
+ NPT_TimeInterval duration(3.1f);
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread3::Run - setting shared var to 1\n");
+ m_SharedVariable->SetValue(1);
+
+ // sleep a while
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread3::Run - setting shared var to 2\n");
+ m_SharedVariable->SetValue(2);
+
+ // sleep a while
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread3::Run - setting shared var to 3\n");
+ m_SharedVariable->SetValue(3);
+ NPT_Debug("Thread3::Run - end\n");
+ }
+ NPT_SharedVariable* m_SharedVariable;
+};
+
+/*----------------------------------------------------------------------
+| Thread4
++---------------------------------------------------------------------*/
+class Thread4 : public NPT_Runnable
+{
+public:
+ virtual ~Thread4() { NPT_Debug("~Thread4\n"); }
+ void Run() {
+ NPT_Debug("Thread4::Run - start\n");
+
+ // sleep a while
+ NPT_TimeInterval duration(4.3f);
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("Thread4::Run - end\n");
+ }
+};
+
+class T1 : public NPT_Runnable
+{
+ void Run() {
+ NPT_Debug("*** T1 running ***\n");
+ NPT_TimeInterval duration(1.0f);
+ NPT_Debug("*** T1 sleeping ***\n");
+ NPT_System::Sleep(duration);
+ NPT_Debug("*** T1 done ***\n");
+ }
+};
+
+/*----------------------------------------------------------------------
+| Test1
++---------------------------------------------------------------------*/
+static void
+Test1()
+{
+ NPT_Debug("--- Test1 Start ---\n");
+
+ T1 runnable;
+
+ NPT_Debug("+++ creating non-detached thread +++\n");
+ NPT_Thread* thread1 = new NPT_Thread(runnable); // not detached
+ NPT_Debug("+++ starting non-detached thread +++\n");
+ thread1->Start();
+ NPT_Debug("+++ waiting for non-detached thread +++\n");
+ NPT_Result result = thread1->Wait();
+ CHECK(NPT_SUCCEEDED(result));
+ NPT_Debug("+++ deleting for non-detached thread +++\n");
+ delete thread1;
+ NPT_Debug("+++ done with non-detached thread +++\n");
+
+ NPT_Debug("+++ creating detached thread +++\n");
+ thread1 = new NPT_Thread(runnable, true); // detached
+ NPT_Debug("+++ starting detached thread +++\n");
+ thread1->Start();
+ NPT_Debug("+++ waiting for detached thread +++\n");
+ NPT_System::Sleep(NPT_TimeInterval(3.0f));
+ //delete thread1;
+ NPT_Debug("+++ done with detached thread +++\n");
+
+ NPT_Debug("+++ creating non-detached thread +++\n");
+ thread1 = new NPT_Thread(runnable); // not detached
+ NPT_Debug("+++ starting non-detached thread +++\n");
+ thread1->Start();
+ NPT_Debug("+++ deleting for non-detached thread +++\n");
+ delete thread1;
+ NPT_Debug("+++ done with non-detached thread +++\n");
+
+ NPT_Debug("+++ creating detached thread +++\n");
+ thread1 = new NPT_Thread(runnable, true); // detached
+ NPT_Debug("+++ starting detached thread +++\n");
+ thread1->Start();
+ NPT_Debug("+++ deleting for detached thread +++\n");
+ delete thread1;
+ NPT_Debug("+++ done with detached thread +++\n");
+}
+
+/*----------------------------------------------------------------------
+| Test2
++---------------------------------------------------------------------*/
+static void
+Test2()
+{
+ NPT_Debug("--- Test2 Start ---\n");
+
+ NPT_SharedVariable shv1(0);
+ NPT_Thread* thread1 = new Thread1();
+ Thread2 t2(&shv1);
+ NPT_Thread* thread2 = new NPT_Thread(t2, true);
+ NPT_Thread* thread3 = new Thread3(&shv1);
+ Thread4 t4;
+ NPT_Thread* thread4 = new NPT_Thread(t4, false);
+
+ NPT_Debug("starting thread1...\n");
+ thread1->Start();
+
+ NPT_Debug("starting thread2...\n");
+ thread2->Start();
+
+ NPT_Debug("starting thread3\n");
+ thread3->Start();
+ NPT_Debug("releasing thread3\n");
+ delete thread3;
+
+ NPT_Debug("starting thread4\n");
+ thread4->Start();
+ NPT_Debug("deleting thread4\n");
+ delete thread4;
+
+ NPT_Debug("deleting for thread1...\n");
+ delete thread1;
+ NPT_Debug("...done\n");
+
+ // sleep a while
+ NPT_TimeInterval duration(15UL);
+ NPT_System::Sleep(duration);
+
+ NPT_Debug("--- Test2 End ---\n");
+}
+
+typedef struct {
+ volatile int* var;
+ int var_i;
+} _CB_T;
+
+static int _count_CBR[3] = {0,0,0};
+
+class CBR : public NPT_Runnable, public NPT_ThreadCallbackReceiver
+{
+public:
+ CBR(NPT_ThreadCallbackSlot& slot, int var, int cycles, float sleep_time) : m_Slot(slot), m_Var(var), m_FlipFlop(false), m_Cycles(cycles), m_Sleep(sleep_time) {}
+
+ void OnCallback(void* args) {
+ _CB_T* t_args = (_CB_T*)args;
+ CHECK(*t_args->var == -1);
+ (*t_args->var)+= t_args->var_i;
+ _count_CBR[m_Var]++;
+ m_FlipFlop = true;
+ if (m_Sleep != 0.0f) {
+ NPT_Debug(".CBR [%d] - on callback (%d)\n", m_Var, _count_CBR[m_Var]);
+ }
+ }
+
+ void Run() {
+ for (int i=0; i<m_Cycles;) {
+ if (m_Sleep != 0.0f) {
+ NPT_Debug(".CBR [%d] - processing\n", m_Var);
+ }
+ NPT_Result result = m_Slot.ReceiveCallback(*this);
+ if (result == NPT_ERROR_CALLBACK_NOTHING_PENDING) {
+ if (m_Sleep != 0.0f) {
+ NPT_Debug(".CBR [%d] - nothing pending\n", m_Var);
+ }
+ } else {
+ CHECK(result == NPT_SUCCESS);
+ CHECK(m_FlipFlop == true);
+ m_FlipFlop = false;
+ i++;
+ }
+ if (m_Sleep != 0.0f) {
+ NPT_Debug(".CBR [%d] - sleeping\n", m_Var);
+ }
+ if (m_Sleep != 0.0f) NPT_System::Sleep(NPT_TimeInterval(m_Sleep));
+ }
+ }
+
+private:
+ NPT_ThreadCallbackSlot& m_Slot;
+ int m_Var;
+ bool m_FlipFlop;
+ int m_Cycles;
+ float m_Sleep;
+};
+
+class CBW : public NPT_Runnable
+{
+public:
+ CBW(NPT_ThreadCallbackSlot& slot, int var, int cycles, float sleep_time) : m_Slot(slot), m_Var(var), m_Cycles(cycles), m_Sleep(sleep_time) {}
+
+ void Run() {
+ volatile int res = -1;
+ for (int i=0; i<m_Cycles; i++) {
+ _CB_T args = {&res, m_Var+1};
+ if (m_Sleep != 0.0f) {
+ NPT_Debug("@CBR [%d] - calling back\n", m_Var);
+ }
+ NPT_Result result = m_Slot.SendCallback(&args);
+ if (result == NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN) {
+ NPT_Debug("SHUTDOWN\n");
+ return;
+ }
+ CHECK(res == m_Var);
+ res -= (m_Var+1);
+ if (m_Sleep != 0.0f) {
+ NPT_Debug("@CBR [%d] - sleeping\n", m_Var);
+ }
+ if (m_Sleep != 0.0f) NPT_System::Sleep(NPT_TimeInterval(m_Sleep));
+ }
+ }
+
+private:
+ NPT_ThreadCallbackSlot& m_Slot;
+ int m_Var;
+ int m_Cycles;
+ float m_Sleep;
+};
+
+/*----------------------------------------------------------------------
+| Test3
++---------------------------------------------------------------------*/
+static void
+Test3(int cycles, float r_sleep, float w_sleep)
+{
+ NPT_Debug("--- Test3 Start ---\n");
+
+ NPT_ThreadCallbackSlot slot;
+
+ CBR cbr0(slot, 0, cycles, r_sleep);
+ CBR cbr1(slot, 1, cycles, r_sleep);
+ CBR cbr2(slot, 2, cycles, r_sleep);
+ NPT_Thread* rt1 = new NPT_Thread(cbr0);
+ NPT_Thread* rt2 = new NPT_Thread(cbr1);
+ NPT_Thread* rt3 = new NPT_Thread(cbr2);
+ CBW cbw0(slot, 0, cycles, w_sleep);
+ CBW cbw1(slot, 1, cycles, w_sleep);
+ CBW cbw2(slot, 2, cycles, w_sleep);
+ NPT_Thread* wt1 = new NPT_Thread(cbw0);
+ NPT_Thread* wt2 = new NPT_Thread(cbw1);
+ NPT_Thread* wt3 = new NPT_Thread(cbw2);
+
+ rt1->Start();
+ rt2->Start();
+ rt3->Start();
+ wt1->Start();
+ wt2->Start();
+ wt3->Start();
+
+ delete rt1;
+ delete rt2;
+ delete rt3;
+ delete wt1;
+ delete wt2;
+ delete wt3;
+
+ NPT_Debug("--- Test3: %d %d %d\n", _count_CBR[0], _count_CBR[1], _count_CBR[2]);
+ NPT_Debug("--- Test3 End ---\n");
+}
+
+class CBR2 : public NPT_Runnable, public NPT_ThreadCallbackReceiver
+{
+public:
+ CBR2(NPT_ThreadCallbackSlot& slot) : m_Slot(slot) {}
+
+ void OnCallback(void*) {
+ NPT_Debug("CBR2 - on callback\n");
+ }
+
+ void Run() {
+ for (int i=0; i<10;) {
+ NPT_Debug("CBR2: processing [%d]\n", i);
+ NPT_Result result = m_Slot.ReceiveCallback(*this);
+ if (result == NPT_ERROR_CALLBACK_NOTHING_PENDING) {
+ } else {
+ i++;
+ }
+ NPT_Debug("CBR2: sleeping\n");
+ NPT_System::Sleep(NPT_TimeInterval(0.2f));
+ }
+ NPT_Debug("CBR2: shutting down\n");
+ m_Slot.Shutdown();
+ }
+
+private:
+ NPT_ThreadCallbackSlot& m_Slot;
+};
+
+/*----------------------------------------------------------------------
+| Test4
++---------------------------------------------------------------------*/
+static void
+Test4()
+{
+ NPT_Debug("--- Test4 Start ---\n");
+
+ NPT_ThreadCallbackSlot slot;
+
+ CBR2 cbr(slot);
+ NPT_Thread* t = new NPT_Thread(cbr);
+ t->Start();
+
+ for (int i=0; i<20; i++) {
+ NPT_Debug("Test4: calling back [%d]\n", i);
+ NPT_Result result = slot.SendCallback(NULL);
+ if (NPT_FAILED(result)) {
+ CHECK(result == NPT_ERROR_CALLBACK_HANDLER_SHUTDOWN);
+ CHECK(i >= 10);
+ NPT_Debug("Test4: slot shutdown\n");
+ }
+ }
+ delete t;
+
+ NPT_Debug("--- Test4 End ---\n");
+}
+
+#if defined(WIN32) && defined(_DEBUG)
+static int AllocHook( int allocType, void *userData, size_t size, int blockType,
+ long requestNumber, const unsigned char *filename, int lineNumber)
+{
+ (void)allocType;
+ (void)userData;
+ (void)size;
+ (void)blockType;
+ (void)requestNumber;
+ (void)lineNumber;
+ (void)filename;
+ return 1;
+}
+#endif
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ NPT_COMPILER_UNUSED(argc);
+ NPT_COMPILER_UNUSED(argv);
+
+#if defined(WIN32) && defined(_DEBUG)
+ _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF |
+ _CRTDBG_LEAK_CHECK_DF);
+ _CrtSetAllocHook(AllocHook);
+#endif
+
+ Test3(100000, 0.0f, 0.0f);
+ Test3(300, 0.1f, 0.0f);
+ Test3(100, 0.5f, 0.4f);
+ Test4();
+ Test1();
+ Test2();
+
+ NPT_Debug("- program done -\n");
+
+ return 0;
+}
+
+
+
+
+
+
diff --git a/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp
new file mode 100644
index 0000000000..8ef05b1f80
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Time1/TimeTest1.cpp
@@ -0,0 +1,354 @@
+/*****************************************************************
+|
+| Time Test Program 1
+|
+| (c) 2005-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <stdio.h>
+#include "Neptune.h"
+#include "NptResults.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", \
+ a, 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;
+ NPT_Date today;
+
+ /* get utc time */
+ SHOULD_SUCCEED(NPT_System::GetCurrentTimeStamp(now));
+
+ /* convert utc time to date */
+ SHOULD_SUCCEED(NPT_Time::GetGMTDateFromTimeStamp(now, today));
+
+ /* verify utc time has not change */
+ SHOULD_EQUAL_I(today.timezone, 0);
+}
+
+/*----------------------------------------------------------------------
+| FillRandomDate
++--------------------------------------------------------------------*/
+static void
+FillRandomDate(NPT_Date& date)
+{
+ date.local.year = NPT_System::GetRandomInteger();
+ date.local.month = NPT_System::GetRandomInteger();
+ date.local.day = NPT_System::GetRandomInteger();
+ date.local.hours = NPT_System::GetRandomInteger();
+ date.local.minutes = NPT_System::GetRandomInteger();
+ date.local.seconds = NPT_System::GetRandomInteger();
+ date.local.milliseconds = NPT_System::GetRandomInteger();
+ date.timezone = NPT_System::GetRandomInteger();
+}
+
+/*----------------------------------------------------------------------
+| TestSuiteDateFromTimeString
++---------------------------------------------------------------------*/
+static void
+TestSuiteDateFromTimeString()
+{
+ NPT_Date date;
+
+ /* Valid date */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.003Z", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 3);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date, 2 characters milliseconds */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.02Z", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 20);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date, 1 character milliseconds */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.9Z", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 900);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date, no 'Z' */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.003", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 3);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date, Z, but no milliseconds */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10Z", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 0);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date with microseconds, no 'Z' */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2005-09-06T17:16:10.003498", date));
+ SHOULD_EQUAL_I(date.local.year , 2005);
+ SHOULD_EQUAL_I(date.local.month , 9);
+ SHOULD_EQUAL_I(date.local.day , 6);
+ SHOULD_EQUAL_I(date.local.hours , 17);
+ SHOULD_EQUAL_I(date.local.minutes , 16);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 3);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date with microseconds, 'Z' */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2005-09-06T17:16:10.003498Z", date));
+ SHOULD_EQUAL_I(date.local.year , 2005);
+ SHOULD_EQUAL_I(date.local.month , 9);
+ SHOULD_EQUAL_I(date.local.day , 6);
+ SHOULD_EQUAL_I(date.local.hours , 17);
+ SHOULD_EQUAL_I(date.local.minutes , 16);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 3);
+ SHOULD_EQUAL_I(date.timezone , 0);
+
+ /* Valid date, no milliseconds, with timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10+03:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 0);
+ SHOULD_EQUAL_I(date.timezone , 180);
+
+ /* Valid date, no milliseconds, with negative timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10-05:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 0);
+ SHOULD_EQUAL_I(date.timezone , -300);
+
+ /* Valid date, with milliseconds, with positive timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.200+03:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 200);
+ SHOULD_EQUAL_I(date.timezone , 180);
+
+ /* Valid date, with milliseconds, with negative timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2006-04-14T12:01:10.030-05:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2006);
+ SHOULD_EQUAL_I(date.local.month , 4);
+ SHOULD_EQUAL_I(date.local.day , 14);
+ SHOULD_EQUAL_I(date.local.hours , 12);
+ SHOULD_EQUAL_I(date.local.minutes , 1);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 30);
+ SHOULD_EQUAL_I(date.timezone , -300);
+
+ /* Valid date with microseconds and negative timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2005-09-06T17:16:10.001822-05:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2005);
+ SHOULD_EQUAL_I(date.local.month , 9);
+ SHOULD_EQUAL_I(date.local.day , 6);
+ SHOULD_EQUAL_I(date.local.hours , 17);
+ SHOULD_EQUAL_I(date.local.minutes , 16);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 1);
+ SHOULD_EQUAL_I(date.timezone , -300);
+
+ /* Valid date with microseconds and positive timezone offset */
+ FillRandomDate(date);
+ SHOULD_SUCCEED(NPT_Time::GetDateFromString("2005-09-06T17:16:10.001822+05:00", date));
+ SHOULD_EQUAL_I(date.local.year , 2005);
+ SHOULD_EQUAL_I(date.local.month , 9);
+ SHOULD_EQUAL_I(date.local.day , 6);
+ SHOULD_EQUAL_I(date.local.hours , 17);
+ SHOULD_EQUAL_I(date.local.minutes , 16);
+ SHOULD_EQUAL_I(date.local.seconds , 10);
+ SHOULD_EQUAL_I(date.local.milliseconds , 1);
+ SHOULD_EQUAL_I(date.timezone , 300);
+
+ /* Invalid date with 3 digit year */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("206-04-14T12:01:10.003Z", date));
+
+ /* Invalid date with 5 digit year */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("20076-04-14T12:01:10.003Z", date));
+
+ /* Invalid date with 5 digit year */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("20076-04-14T12:01:10.003Z", date));
+
+ /* Invalid date with garbage in the end */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2006-04-14T12:01:10.003+69:696", date));
+
+ /* Invalid date with bad month */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2006-010-14T12:01:10.003", date));
+
+ /* Invalid date with bad month, right overall length */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-0--14T12:01:10.003", date));
+
+ /* Invalid date with bad year-month separator */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063Y08-14T12:01:10.003", date));
+
+ /* Invalid date with bad time separator */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14t12:01:10.003", date));
+
+ /* Invalid date with bad hour */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T012:01:10.003", date));
+
+ /* Invalid date with bad GMT indicator */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.003z", date));
+
+ /* Invalid date with bad GMT indicator */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.003g", date));
+
+ /* Invalid date with millisecond separator but no digits */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.", date));
+
+ /* Invalid date with millisecond separator but no digits */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.Z", date));
+
+ /* Invalid date with millisecond separator but no digits */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.+10:38", date));
+
+ /* Invalid date with bad timezone offset */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10+10:338", date));
+
+ /* Invalid date with bad timezone offset */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10+001:38", date));
+
+ /* Invalid date with bad timezone offset */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10+10:33Z", date));
+
+ /* Invalid date with bad timezone offset */
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.08+10:33Z", date));
+
+ /* Invalid date with bad timezone offset with seconds*/
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.08+10:33:30", date));
+
+ /* Invalid date with timezone offset too big*/
+ FillRandomDate(date);
+ SHOULD_FAIL(NPT_Time::GetDateFromString("2063-08-14T12:01:10.08+14:33", date));
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ TestSuiteGetTime();
+ TestSuiteDateFromTimeString();
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate1.h b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate1.h
new file mode 100644
index 0000000000..5f0b656bf1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate1.h
@@ -0,0 +1,27 @@
+/* RSA private key */
+const char TestClient_rsa_priv_base64_1[] =
+"MIIEpAIBAAKCAQEAuMQkzT618sNdZWgsCb7n4lHUG7wl4dYHUwpAslJqynvKCqSJ"
+"zvS5PmyrEx7NvuXDnRKoHAbrPHgQmYYn+e7GV3Q+GsIDicLUKY7Ro5k2ar8bsF2c"
+"/FHvE8VPWtWzljTYbJQy5hL+MriVI+qu45F9lOlJSxT2AxSyWNE/vtEh1tHTr+Rw"
+"pD10+sTt/mXe7zTh2hyz9bqWsNzfFh1k/L1izTh20mame7P9LoBCZiJfr1NR6oZR"
+"81sEPpRa7C5skj6HKWQZnTHb/U0PSnpzq4jal9+BvTLw8sSHl+BevsF5hri9+Y8P"
+"M6KuFM0foUL/LFYQnoyktXp9G5bXIRPnXAfmcQIDAQABAoIBAAe6RGPFLKzzmNNl"
+"8PmTX3VqwLlMPDVe0z2Y3y3WHptLZB7f1NewCpNeziTlk+tZBr5qClfpvirwRpl1"
+"L/TXFLqRpQtPdABuApueWoxCGzGJvqm4sJkpABvOk8wTxggRO8AGzr4qqzEJ4Ur4"
+"RMpFyn/Q5fza6pMkaXUng0gCzSyD1eeWyCoi3hUSbSAUQSAUOyvb3Q7Mk0Mjg7J0"
+"x6ThwBieIBj/wV7E+k2Sv0ntsJwKoi51XScIc7xY+6rfAojztELMI6HsE340nmb9"
+"iHitOV/9OSIDRlkYXeKq7scAdV5KzbZDtqRwbbgAsD9QNyg17XBZVjxO9u5FK4KF"
+"MDD07TUCgYEA4T1FBlFjFw8w+UwHlYUAPp5MiymwwlXhTTwPJ58pjixeklDof2Ac"
+"bbJgZK3+hLb3nFFiTG/OcmXx3qou8JyHuOgVF4UZb03m1sy/bI8rlbU7stf/hP+F"
+"6dp4bhQo4d+zx7doZEiADGQpoK45gLb3yY0xQWD0vQBq73tS5qu6Wg8CgYEA0f/e"
+"G4EsuOTmOETHVr1Llv2DrOQrQn8l5Mpp8h6XYbdWylfaBT/MItAtPBSC4f/+epAf"
+"qxGkaE2v1vWhNYrYmGluiTu06x4oPfHUG7tajkZsyUT82CmI3kYP60Fo1QmJZdxn"
+"Bs50tmI9q5e+04DBN6Gs9kauWwd0loPJJ7cEN38CgYEAyGCYioFXFQmXuQCxcowK"
+"5qovUFJ7hLegIvS+SrJm5quESsidvcuEHvbkmEzOM8UOTUt9lqCU2eLlpQBjl/y5"
+"JX+aW/013nZAWXF3Dp3j2WCMxpMwJ2KnAJ8yKkPXBvLbXl5FCYoSGHP3MJIuZ9re"
+"X7kzS4V01LuNZpWg78NwmnMCgYBFAR3bzduDOfwIW1lhQDx5df5xrlwksqEiB/0+"
+"SR0XR+ZmAO4sMWWDvwJOLrM/Th4x6e/uB5MNjxGLwhTiAijgFCz1PUBazgMNL8yx"
+"/CNqguu2S0wGP8ewujb65/hpoIOcjAryqp6hW7DGFMvotfNHs4GhP2KFmPKPjuhn"
+"e3UQQwKBgQCs2QAsB+5qjmVcJJOMkB7rwiQpH4GI9DWn77FbdrITtSxC5smXht/m"
+"51yTdCPlcoeVkrQ6VgAWKHN6fl/Y0fSGBgHM6MwvgVVMH5ks/kGWLJhhvWbT0qcV"
+"1fAWm3VThyXaOgP5r/01ecp4MN6k74i2hHuvuyiapJ5geK1JnONMpg==";
diff --git a/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate2.h b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate2.h
new file mode 100644
index 0000000000..fd294d06d9
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsClientPrivate2.h
@@ -0,0 +1,108 @@
+static const unsigned char TestClient_p8_1[] = {
+ 0x30, 0x82, 0x04, 0xe4, 0x30, 0x1c, 0x06, 0x0a, 0x2a, 0x86, 0x48, 0x86,
+ 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x01, 0x30, 0x0e, 0x04, 0x08, 0x3d, 0x1a,
+ 0x36, 0x1b, 0xeb, 0x19, 0x6d, 0x96, 0x02, 0x02, 0x08, 0x00, 0x04, 0x82,
+ 0x04, 0xc2, 0x4f, 0x37, 0xd0, 0x23, 0x95, 0x84, 0x84, 0x0f, 0x6e, 0xd5,
+ 0x2f, 0xfb, 0x64, 0x5e, 0xfd, 0x37, 0x05, 0x81, 0xf9, 0x3e, 0x7e, 0xb3,
+ 0x0f, 0x99, 0x04, 0x9e, 0x26, 0xe8, 0x1a, 0x7a, 0x9d, 0xbf, 0x17, 0x98,
+ 0x99, 0xd1, 0x66, 0xa5, 0xc0, 0xcc, 0x09, 0x8e, 0xc7, 0x9b, 0xc6, 0x09,
+ 0xe9, 0xf4, 0xd5, 0x5a, 0xc7, 0x21, 0xef, 0xc8, 0xc7, 0x46, 0x82, 0x06,
+ 0x63, 0x78, 0x80, 0x6c, 0xea, 0xed, 0xb8, 0x79, 0x7e, 0x2d, 0x2a, 0xe6,
+ 0x34, 0x17, 0xb7, 0xc8, 0xc2, 0x0d, 0x97, 0xf6, 0x0c, 0x60, 0xa2, 0xc0,
+ 0x86, 0xcc, 0x4b, 0xa6, 0x1f, 0x05, 0xbd, 0xae, 0x35, 0xc9, 0xdf, 0xe4,
+ 0x5f, 0x7d, 0xf8, 0x68, 0x0a, 0xa6, 0x6f, 0x7d, 0xb2, 0x17, 0xf9, 0xfd,
+ 0xea, 0xae, 0xfa, 0xed, 0xad, 0x0c, 0x52, 0x5f, 0x03, 0x74, 0x3f, 0xf0,
+ 0x15, 0x43, 0x05, 0x2f, 0x23, 0xd6, 0xdc, 0x74, 0xcc, 0x8c, 0x56, 0xc3,
+ 0x5f, 0x60, 0xd1, 0x12, 0x0d, 0x89, 0x29, 0xae, 0x49, 0x5b, 0x6e, 0xb0,
+ 0x67, 0x27, 0xad, 0x15, 0x46, 0x56, 0x1c, 0x7e, 0x25, 0x66, 0x6a, 0x81,
+ 0x38, 0x26, 0xac, 0x80, 0xcf, 0xce, 0x0d, 0x7d, 0x58, 0x26, 0xf9, 0xcd,
+ 0xc0, 0xf3, 0xf7, 0x30, 0xac, 0x61, 0xac, 0x4a, 0x9e, 0x02, 0xa1, 0x94,
+ 0xd5, 0x6e, 0x64, 0xce, 0x91, 0xc7, 0x4a, 0xfe, 0xcc, 0x88, 0x3d, 0x13,
+ 0xaa, 0x2e, 0x90, 0x2f, 0x5c, 0xca, 0x6b, 0x14, 0x11, 0x99, 0x13, 0x3e,
+ 0x59, 0xf7, 0x1b, 0x68, 0x72, 0xb7, 0x88, 0xe8, 0x31, 0xcb, 0x3e, 0xcd,
+ 0x01, 0xd0, 0x23, 0xcd, 0xc6, 0x00, 0x36, 0x5d, 0x29, 0xc3, 0xa1, 0xb7,
+ 0xeb, 0x50, 0xc7, 0x14, 0xc4, 0x05, 0x54, 0x7f, 0xe3, 0x6c, 0x37, 0x15,
+ 0x49, 0x65, 0x75, 0x63, 0xed, 0x2e, 0x1c, 0x8d, 0xde, 0x89, 0xde, 0xc8,
+ 0x2e, 0x66, 0x8b, 0x0c, 0x1a, 0xc4, 0x7b, 0x5a, 0x79, 0x31, 0x37, 0x65,
+ 0x1f, 0x0c, 0x0b, 0xc7, 0x79, 0xca, 0x09, 0x81, 0x40, 0x9f, 0x5f, 0x9a,
+ 0x61, 0xaf, 0xfa, 0x24, 0x4e, 0xb8, 0x14, 0x91, 0x54, 0xaa, 0xc4, 0xc6,
+ 0xea, 0xe5, 0x0e, 0x46, 0x9d, 0x1c, 0xea, 0x76, 0x9f, 0x75, 0xc0, 0xd1,
+ 0x40, 0xe4, 0x4e, 0x64, 0x8f, 0x01, 0x27, 0xb3, 0x85, 0x10, 0xd9, 0xaf,
+ 0x4c, 0x90, 0x0c, 0x96, 0x27, 0x3e, 0xf6, 0xa4, 0x03, 0xc8, 0xa8, 0xc6,
+ 0x19, 0x62, 0x72, 0xae, 0xc7, 0xcb, 0x97, 0x86, 0x83, 0x8e, 0x5a, 0x9e,
+ 0xe4, 0x28, 0xf2, 0xa6, 0xf2, 0x5e, 0xea, 0x97, 0x96, 0x92, 0x76, 0xde,
+ 0xf2, 0xf5, 0xe2, 0x62, 0x6a, 0xcf, 0x53, 0x1e, 0x37, 0x9a, 0xcb, 0x88,
+ 0x99, 0xe1, 0x15, 0xb8, 0x20, 0x71, 0xfc, 0x26, 0xfe, 0xd5, 0x1e, 0x8a,
+ 0xd1, 0x55, 0x4a, 0x45, 0x43, 0xee, 0x4d, 0x79, 0xe9, 0x57, 0x00, 0x88,
+ 0xf6, 0xf6, 0xf5, 0x86, 0x88, 0x37, 0x98, 0x92, 0x6f, 0x9d, 0xbf, 0x18,
+ 0x93, 0x7c, 0x45, 0xba, 0xaf, 0x30, 0x9c, 0xb5, 0x2b, 0xc4, 0x25, 0x2b,
+ 0x01, 0xba, 0x8e, 0x96, 0x28, 0x72, 0xf1, 0xb2, 0x2c, 0xa8, 0xbd, 0x97,
+ 0xa0, 0x30, 0x1b, 0xad, 0x22, 0x57, 0x85, 0x31, 0x42, 0x5b, 0x77, 0x37,
+ 0x7c, 0xd5, 0x54, 0x06, 0x1d, 0xa5, 0xd4, 0x39, 0x95, 0x7b, 0x80, 0x02,
+ 0xc5, 0x73, 0x6b, 0x78, 0xff, 0xa8, 0x98, 0x13, 0x0c, 0xc5, 0x76, 0xf3,
+ 0x4b, 0x9b, 0x66, 0xba, 0x40, 0xd1, 0xbe, 0xb7, 0xf5, 0x29, 0x05, 0x34,
+ 0xce, 0xab, 0x3f, 0xb8, 0xb6, 0xd4, 0x78, 0xb7, 0xe8, 0x46, 0x2e, 0xf2,
+ 0xe7, 0xd1, 0xe1, 0x69, 0xe2, 0x8d, 0x67, 0xca, 0xf1, 0x01, 0x92, 0x7c,
+ 0xdc, 0x88, 0x55, 0x26, 0xd8, 0x15, 0x6a, 0x39, 0x36, 0x5e, 0x8e, 0xc6,
+ 0xa7, 0xb4, 0xb1, 0x6e, 0xb1, 0xc9, 0x6f, 0x75, 0x0a, 0xb6, 0xf0, 0xa8,
+ 0xcd, 0xa2, 0xa5, 0xfa, 0x26, 0xdf, 0x8f, 0xf2, 0xd7, 0x3d, 0x58, 0x0d,
+ 0xa5, 0x8e, 0xf2, 0x04, 0xb9, 0x13, 0xb2, 0xe4, 0x8a, 0x30, 0x60, 0x14,
+ 0x46, 0xd7, 0x77, 0x38, 0x5d, 0x58, 0xcd, 0xf6, 0x69, 0x98, 0x76, 0x30,
+ 0x5c, 0x4d, 0xc0, 0x9e, 0xe8, 0x05, 0xda, 0x6c, 0xbb, 0x36, 0xf4, 0x5b,
+ 0xb9, 0x12, 0x6e, 0x39, 0xae, 0x2c, 0xb4, 0xc1, 0xd1, 0x69, 0x40, 0xc7,
+ 0x88, 0xbb, 0x1f, 0x4e, 0xbc, 0xec, 0x09, 0x2c, 0xb0, 0x84, 0x26, 0x23,
+ 0xf1, 0x37, 0x9b, 0x26, 0x18, 0x7b, 0x70, 0x58, 0xa4, 0x15, 0xca, 0x91,
+ 0x8f, 0x4b, 0xc3, 0xa2, 0x28, 0x8b, 0x77, 0xa7, 0x81, 0x1e, 0x87, 0xd0,
+ 0xb1, 0x0a, 0x87, 0x91, 0x2c, 0x60, 0x86, 0xac, 0x7f, 0x4f, 0xe6, 0xa4,
+ 0x84, 0x7e, 0x3f, 0xc3, 0xa2, 0x42, 0xb8, 0xb6, 0x6d, 0xb5, 0x2a, 0x7a,
+ 0x01, 0x2b, 0xfa, 0xc5, 0x37, 0xc0, 0x28, 0x20, 0xc1, 0x22, 0x17, 0x65,
+ 0xee, 0x71, 0xdc, 0xfc, 0xff, 0xac, 0x79, 0x52, 0x16, 0xc4, 0x07, 0xfa,
+ 0x3c, 0xc6, 0x8f, 0x96, 0xe3, 0xc2, 0xef, 0x34, 0xec, 0xc9, 0x7f, 0x28,
+ 0x4e, 0x51, 0xc7, 0xc7, 0xe9, 0xc5, 0x40, 0xd6, 0xef, 0xd3, 0x8b, 0x21,
+ 0x8d, 0x19, 0x86, 0xbb, 0x40, 0x71, 0x88, 0x90, 0x29, 0x1b, 0xdb, 0x8e,
+ 0xd1, 0x65, 0x08, 0xb6, 0xd1, 0x8e, 0xd9, 0x70, 0x79, 0xef, 0x86, 0xe3,
+ 0xef, 0x03, 0x2a, 0x9d, 0xc5, 0xb5, 0x77, 0x83, 0xcc, 0xf3, 0x30, 0xbe,
+ 0xee, 0x46, 0xf1, 0xdd, 0x7a, 0x67, 0x13, 0xbc, 0xc5, 0x26, 0xd7, 0x19,
+ 0x69, 0xd0, 0x22, 0xa7, 0xf2, 0xf3, 0x4d, 0xdc, 0x48, 0x1d, 0x5d, 0xdc,
+ 0x64, 0x09, 0x00, 0x80, 0x2c, 0xf6, 0x33, 0x8e, 0xe5, 0x58, 0x6e, 0xaa,
+ 0xc3, 0xc0, 0x15, 0xa2, 0x82, 0xe2, 0x2c, 0xf9, 0x91, 0xae, 0x1c, 0x19,
+ 0xd6, 0x7c, 0xa1, 0xaf, 0x0a, 0xef, 0x00, 0xd1, 0x87, 0xc7, 0x8c, 0x3a,
+ 0x6f, 0x75, 0x15, 0x5c, 0xe9, 0x0d, 0xd4, 0x7a, 0x22, 0xfb, 0x90, 0xaa,
+ 0x4a, 0x43, 0xe9, 0xcc, 0xf4, 0x30, 0xf9, 0x7a, 0xb1, 0x7b, 0x5c, 0xb0,
+ 0xfc, 0xbb, 0xfe, 0x38, 0x7d, 0x42, 0x2d, 0xed, 0x14, 0xd1, 0xf9, 0x3f,
+ 0x36, 0x80, 0xfc, 0xf6, 0xe3, 0xfe, 0xdf, 0xcf, 0xf1, 0xfd, 0x58, 0xf1,
+ 0xc1, 0xab, 0x03, 0x59, 0x28, 0x4d, 0xd7, 0x21, 0xc8, 0x8b, 0x43, 0x04,
+ 0xff, 0xc5, 0x9e, 0xa9, 0x08, 0xbb, 0xce, 0xaf, 0x3b, 0x20, 0x34, 0x2f,
+ 0x74, 0x37, 0xe4, 0x23, 0x5c, 0xa7, 0xd7, 0x5c, 0x5c, 0xa8, 0x97, 0x68,
+ 0x91, 0xb9, 0x02, 0x4f, 0x21, 0xac, 0x34, 0xc8, 0x80, 0x59, 0x75, 0x16,
+ 0xc6, 0xe9, 0x6b, 0x3c, 0x0d, 0xd2, 0x93, 0x07, 0x38, 0x00, 0xa4, 0x2d,
+ 0x0c, 0xb0, 0x8f, 0xcb, 0xa7, 0x7e, 0xaa, 0xec, 0xd9, 0xde, 0x21, 0x41,
+ 0x86, 0x52, 0xcc, 0x00, 0xb4, 0x84, 0x74, 0xd2, 0xee, 0xe2, 0xeb, 0x8b,
+ 0xac, 0x54, 0x73, 0x16, 0xa7, 0x70, 0x63, 0xbb, 0x7f, 0xaa, 0x18, 0xfb,
+ 0x12, 0x4d, 0x5f, 0x8c, 0x83, 0x3a, 0x94, 0x3a, 0xe9, 0xd1, 0x11, 0xaf,
+ 0x77, 0xf8, 0x27, 0xc5, 0x23, 0x5c, 0x95, 0xda, 0x2a, 0x85, 0xad, 0x6e,
+ 0xc6, 0xab, 0x12, 0x1a, 0xfe, 0x55, 0x97, 0x09, 0xb9, 0x10, 0xfa, 0xd4,
+ 0xe1, 0x9d, 0xbb, 0x41, 0xc5, 0xb8, 0xf8, 0xf7, 0x3a, 0xa4, 0x64, 0x2f,
+ 0xa2, 0xb4, 0x3f, 0x1d, 0x73, 0xde, 0x48, 0xf0, 0x39, 0xc5, 0x3c, 0x58,
+ 0x31, 0x0c, 0x3c, 0x7c, 0x77, 0xc9, 0x37, 0x0f, 0xe4, 0xef, 0x0f, 0x5f,
+ 0xd1, 0x9d, 0xa1, 0x29, 0x16, 0xc1, 0x89, 0x02, 0x15, 0xc3, 0x31, 0x7d,
+ 0x8e, 0x9a, 0x1f, 0x9d, 0x52, 0x95, 0xad, 0xb4, 0xd9, 0xd5, 0x77, 0x68,
+ 0x97, 0x20, 0xa3, 0xbc, 0x8a, 0x51, 0x01, 0x12, 0xda, 0xbb, 0x2a, 0x68,
+ 0x28, 0x4b, 0xca, 0x44, 0x7f, 0xf5, 0xa9, 0x15, 0xb5, 0xc2, 0x7c, 0x46,
+ 0xbe, 0xdb, 0xbb, 0xa7, 0x76, 0x43, 0x2f, 0xce, 0xb2, 0x10, 0x15, 0x5e,
+ 0x20, 0x97, 0x1e, 0x77, 0x3a, 0x90, 0x3b, 0xbe, 0x23, 0xe3, 0x5b, 0xee,
+ 0x29, 0x24, 0x44, 0x56, 0xed, 0xa7, 0x4b, 0x47, 0xb9, 0x28, 0x4c, 0xb3,
+ 0x08, 0xf2, 0x39, 0x34, 0xbe, 0x1e, 0xc6, 0xdc, 0xa7, 0xd3, 0x66, 0xe9,
+ 0x74, 0x2f, 0x85, 0xbb, 0xbe, 0x36, 0x53, 0xf2, 0xe4, 0x2c, 0x63, 0xca,
+ 0x91, 0xa8, 0x28, 0x3f, 0x3a, 0x2e, 0xa7, 0x37, 0x1b, 0x78, 0x88, 0xb6,
+ 0xf1, 0x9d, 0xe7, 0x68, 0x51, 0xcf, 0x2e, 0x25, 0x79, 0xfd, 0x1c, 0xa8,
+ 0x0d, 0x63, 0xf1, 0xd2, 0x72, 0xab, 0x9d, 0xc2, 0x00, 0x29, 0x3a, 0x7b,
+ 0x3c, 0x2f, 0xdf, 0x16, 0x55, 0x0d, 0x77, 0x1b, 0x0e, 0xd2, 0x5e, 0xa1,
+ 0xcf, 0xc2, 0xc1, 0x3c, 0xdf, 0x74, 0xf1, 0x27, 0x74, 0x3c, 0xeb, 0x4b,
+ 0x92, 0xd9, 0xfb, 0xa8, 0xf2, 0xa2, 0x06, 0xc3, 0xfe, 0x3f, 0x27, 0x4f,
+ 0xc0, 0xe4, 0x3a, 0x92, 0xb4, 0xc0, 0xb3, 0x4f, 0x77, 0x28, 0x8c, 0xb6,
+ 0x86, 0xf3, 0x7d, 0x6b, 0xc9, 0x77, 0xa0, 0x05, 0x8d, 0xa0, 0x14, 0x67,
+ 0xa0, 0x6b, 0xb4, 0x6f, 0xaa, 0xc4, 0xfb, 0x81, 0xd2, 0xcb, 0x3b, 0x57,
+ 0xa3, 0x2e, 0xf5, 0xab, 0x58, 0x2a, 0xee, 0x96
+};
+unsigned int TestClient_p8_1_len = 1256;
diff --git a/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsTest1.cpp
new file mode 100644
index 0000000000..1ab77560b1
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Tls1/TlsTest1.cpp
@@ -0,0 +1,140 @@
+/*****************************************************************
+|
+| TLS Test Program 1
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#include "TlsClientPrivate1.h"
+#include "TlsClientPrivate2.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#define CHECK(x) \
+ do { \
+ if (!(x)) { \
+ fprintf(stderr, "ERROR line %d \n", __LINE__); \
+ } \
+ } while(0)
+
+const char*
+GetCipherSuiteName(unsigned int id)
+{
+ switch (id) {
+ case 0: return "NOT SET";
+ case NPT_TLS_RSA_WITH_RC4_128_MD5: return "RSA-WITH-RC4-128-MD5";
+ case NPT_TLS_RSA_WITH_RC4_128_SHA: return "RSA-WITH-RC4-128-SHA";
+ case NPT_TLS_RSA_WITH_AES_128_CBC_SHA: return "RSA-WITH-AES-128-CBC-SHA";
+ case NPT_TLS_RSA_WITH_AES_256_CBC_SHA: return "RSA-WITH-AES-256-CBC-SHA";
+ default: return "UNKNOWN";
+ }
+}
+
+static void
+TestPrivateKeys()
+{
+ NPT_TlsContext context;
+ NPT_Result result;
+
+ NPT_DataBuffer key_data;
+ NPT_Base64::Decode(TestClient_rsa_priv_base64_1, NPT_StringLength(TestClient_rsa_priv_base64_1), key_data);
+
+ result = context.LoadKey(NPT_TLS_KEY_FORMAT_RSA_PRIVATE, key_data.GetData(), key_data.GetDataSize(), NULL);
+ CHECK(result == NPT_SUCCESS);
+
+ result = context.LoadKey(NPT_TLS_KEY_FORMAT_PKCS8, TestClient_p8_1, TestClient_p8_1_len, NULL);
+ CHECK(result != NPT_SUCCESS);
+ result = context.LoadKey(NPT_TLS_KEY_FORMAT_PKCS8, TestClient_p8_1, TestClient_p8_1_len, "neptune");
+ CHECK(result == NPT_SUCCESS);
+}
+
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ TestPrivateKeys();
+
+ /* test a connection */
+ const char* hostname = "koala.bok.net";
+ printf("[1] Connecting to %s...\n", hostname);
+ NPT_Socket* client_socket = new NPT_TcpClientSocket();
+ NPT_IpAddress server_ip;
+ server_ip.ResolveName(hostname);
+ NPT_SocketAddress server_addr(server_ip, 443);
+ NPT_Result result = client_socket->Connect(server_addr);
+ printf("[2] Connection result = %d (%s)\n", result, NPT_ResultText(result));
+ if (NPT_FAILED(result)) {
+ printf("!ERROR\n");
+ return 1;
+ }
+
+ NPT_InputStreamReference input;
+ NPT_OutputStreamReference output;
+ client_socket->GetInputStream(input);
+ client_socket->GetOutputStream(output);
+ NPT_TlsContextReference context(new NPT_TlsContext());
+ NPT_TlsClientSession session(context, input, output);
+ printf("[3] Performing Handshake\n");
+ result = session.Handshake();
+ printf("[4] Handshake Result = %d (%s)\n", result, NPT_ResultText(result));
+ if (NPT_FAILED(result)) {
+ printf("!ERROR\n");
+ return 1;
+ }
+ NPT_DataBuffer session_id;
+ result = session.GetSessionId(session_id);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(session_id.GetDataSize() > 0);
+ printf("[5] Session ID: ");
+ printf(NPT_HexString(session_id.GetData(), session_id.GetDataSize()).GetChars());
+ printf("\n");
+
+ NPT_TlsCertificateInfo cert_info;
+ result = session.GetPeerCertificateInfo(cert_info);
+ CHECK(result == NPT_SUCCESS);
+ printf("[6] Fingerprints:\n");
+ printf("MD5: %s\n", NPT_HexString(cert_info.fingerprint.md5, sizeof(cert_info.fingerprint.md5), ":").GetChars());
+ printf("SHA1: %s\n", NPT_HexString(cert_info.fingerprint.sha1, sizeof(cert_info.fingerprint.sha1), ":").GetChars());
+ printf("Subject Certificate:\n");
+ printf(" Common Name = %s\n", cert_info.subject.common_name.GetChars());
+ printf(" Organization = %s\n", cert_info.subject.organization.GetChars());
+ printf(" Organizational Name = %s\n", cert_info.subject.organizational_name.GetChars());
+ printf("Issuer Certificate:\n");
+ printf(" Common Name = %s\n", cert_info.issuer.common_name.GetChars());
+ printf(" Organization = %s\n", cert_info.issuer.organization.GetChars());
+ printf(" Organizational Name = %s\n", cert_info.issuer.organizational_name.GetChars());
+ printf("\n");
+ printf("[7] Cipher Type = %d (%s)\n", session.GetCipherSuiteId(), GetCipherSuiteName(session.GetCipherSuiteId()));
+
+ NPT_InputStreamReference ssl_input;
+ NPT_OutputStreamReference ssl_output;
+ session.GetInputStream(ssl_input);
+ session.GetOutputStream(ssl_output);
+
+ printf("[8] Getting / Document\n");
+ ssl_output->WriteString("GET / HTTP/1.0\n\n");
+ for (;;) {
+ unsigned char buffer[1];
+ NPT_Size bytes_read = 0;
+ result = ssl_input->Read(&buffer[0], 1, &bytes_read);
+ if (NPT_SUCCEEDED(result)) {
+ CHECK(bytes_read == 1);
+ printf("%c", buffer[0]);
+ } else {
+ if (result != NPT_ERROR_EOS) {
+ printf("!ERROR: Read() returned %d (%s)\n", result, NPT_ResultText(result));
+ }
+ break;
+ }
+ }
+ printf("[9] SUCCESS\n");
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Udp1/UdpTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Udp1/UdpTest1.cpp
new file mode 100644
index 0000000000..46b1381d77
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Udp1/UdpTest1.cpp
@@ -0,0 +1,94 @@
+/*****************************************************************
+|
+| Neptune Tests - UDP
+|
+| (c) 2001-2002 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(NPT_CONFIG_HAVE_STDLIB_H)
+#include <stdlib.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STRING_H)
+#include <string.h>
+#endif
+
+#if defined(NPT_CONFIG_HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+/*----------------------------------------------------------------------
+| Receive
++---------------------------------------------------------------------*/
+static void
+Receive()
+{
+ printf("==== Receive\n");
+
+ NPT_UdpSocket receiver;
+ NPT_DataBuffer buffer(4096);
+ buffer.SetDataSize(4096);
+ NPT_Result result = receiver.Bind(NPT_SocketAddress(NPT_IpAddress::Any, 9123));
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "Bind() failed (%d)\n", result);
+ return;
+ }
+ NPT_SocketAddress address;
+ result = receiver.Receive(buffer, &address);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "Receive failed(%d)\n", result);
+ return;
+ }
+ NPT_String addr_string = address.GetIpAddress().ToString();
+ printf("received packet, size=%d, from %s:%d\n",
+ (int)buffer.GetDataSize(),
+ (const char*)addr_string,
+ (int)address.GetPort());
+}
+
+/*----------------------------------------------------------------------
+| Send
++---------------------------------------------------------------------*/
+static void
+Send()
+{
+ printf("==== Send\n");
+
+ NPT_UdpSocket sender;
+ NPT_DataBuffer buffer(1024);
+ buffer.SetDataSize(1024);
+ NPT_IpAddress address;
+ address.ResolveName("localhost");
+ NPT_SocketAddress socket_address(address, 9123);
+ NPT_Result result = sender.Send(buffer, &socket_address);
+ if (NPT_FAILED(result)) {
+ fprintf(stderr, "Send() failed(%d)\n", result);
+ return;
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ if (argc >= 2) {
+ if (NPT_StringsEqual(argv[1], "send")) {
+ Receive();
+ } else {
+ Send();
+ }
+ } else {
+ }
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Url1/UrlTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Url1/UrlTest1.cpp
new file mode 100644
index 0000000000..7d8060ef84
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Url1/UrlTest1.cpp
@@ -0,0 +1,254 @@
+/*****************************************************************
+|
+| URL Test Program 1
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#define CHECK(x) \
+ do { \
+ if (!(x)) { \
+ fprintf(stderr, "ERROR line %d \n", __LINE__); \
+ } \
+ } while(0)
+
+/*----------------------------------------------------------------------
+| Parse Test Vectors
++---------------------------------------------------------------------*/
+typedef struct {
+ const char* url;
+ bool expected_to_be_valid;
+ const char* expected_scheme;
+ const char* expected_host;
+ int expected_port;
+ const char* expected_path;
+ const char* expected_query;
+ const char* expected_fragment;
+ const char* expected_string;
+} ParseTestVector;
+
+static ParseTestVector ParseTestVectors[] = {
+ {"", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http:", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http:/", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http://", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http://a", true, "http", "a", 80, "/", NULL, NULL, "http://a/"},
+ {"http://foo.bar", true, "http", "foo.bar", 80, "/", NULL, NULL, "http://foo.bar/"},
+ {"http://foo.bar:", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http://foo.bar:156", true, "http", "foo.bar", 156, "/", NULL, NULL, "http://foo.bar:156/"},
+ {"http://foo.bar:176899", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http://foo.bar:176a", false, NULL, NULL, 0, NULL, NULL, NULL, NULL},
+ {"http://foo.bar:176/", true, "http", "foo.bar", 176, "/", NULL, NULL, "http://foo.bar:176/"},
+ {"http://foo.bar:176/blabla", true, "http", "foo.bar", 176, "/blabla", NULL, NULL, "http://foo.bar:176/blabla"},
+ {"http://foo.bar/blabla/blibli", true, "http", "foo.bar", 80, "/blabla/blibli", NULL, NULL, "http://foo.bar/blabla/blibli"},
+ {"http://foo.bar/blabla/blibli", true, "http", "foo.bar", 80, "/blabla/blibli", NULL, NULL, "http://foo.bar/blabla/blibli"},
+ {"http://foo.bar:176/blabla/blibli/", true, "http", "foo.bar", 176, "/blabla/blibli/", NULL, NULL, "http://foo.bar:176/blabla/blibli/"},
+ {"http://foo.bar/", true, "http", "foo.bar", 80, "/", NULL, NULL, "http://foo.bar/"},
+ {"http://foo.bar/blabla/blibli/?query", true, "http", "foo.bar", 80, "/blabla/blibli/", "query", NULL, "http://foo.bar/blabla/blibli/?query"},
+ {"http://foo.bar/blabla/blibli/?query=1&bla=%20&slash=/&foo=a#fragment", true, "http", "foo.bar", 80, "/blabla/blibli/", "query=1&bla=%20&slash=/&foo=a", "fragment", "http://foo.bar/blabla/blibli/?query=1&bla=%20&slash=/&foo=a#fragment"},
+ {"http://foo.bar/blabla foo/blibli/?query=1&bla=2&slash=/&foo=a#fragment", true, "http", "foo.bar", 80, "/blabla foo/blibli/", "query=1&bla=2&slash=/&foo=a", "fragment", "http://foo.bar/blabla%20foo/blibli/?query=1&bla=2&slash=/&foo=a#fragment"},
+};
+
+typedef struct {
+ char* scheme;
+ char* host;
+ int port;
+ char* qery;
+ char* fragment;
+ char* expected_uri;
+} ConstructTestVector;
+
+typedef struct {
+ char* in;
+ char* out;
+ bool do_percent;
+} EncodeTestVector;
+
+typedef struct {
+ char* in;
+ char* out;
+} DecodeTestVector;
+
+/*----------------------------------------------------------------------
+| TestParse
++---------------------------------------------------------------------*/
+static void
+TestParse(ParseTestVector* vector, int test_index)
+{
+ NPT_HttpUrl url(vector->url);
+ if (url.IsValid() != vector->expected_to_be_valid) {
+ fprintf(stderr, "TEST %02d: expected IsValid() to return %s, got %s\n", test_index, vector->expected_to_be_valid?"true":"false", url.IsValid()?"true":"false");
+ return;
+ }
+ if (!vector->expected_to_be_valid) return;
+ if (vector->expected_scheme) {
+ if (url.GetScheme() != vector->expected_scheme) {
+ fprintf(stderr, "TEST %02d: expected GetScheme() to return %s, got %s\n", test_index, vector->expected_scheme, url.GetScheme().GetChars());
+ return;
+ }
+ }
+ if (vector->expected_host) {
+ if (url.GetHost() != vector->expected_host) {
+ fprintf(stderr, "TEST %02d: expected GetHost() to return %s, got %s\n", test_index, vector->expected_host, url.GetHost().GetChars());
+ return;
+ }
+ }
+ if (url.GetPort() != vector->expected_port) {
+ fprintf(stderr, "TEST %02d: expected GetPort() to return %d, got %d\n", test_index, vector->expected_port, url.GetPort());
+ return;
+ }
+ if (vector->expected_path) {
+ if (url.GetPath() != vector->expected_path) {
+ fprintf(stderr, "TEST %02d: expected GetPath() to return %s, got %s\n", test_index, vector->expected_path, url.GetPath().GetChars());
+ return;
+ }
+ }
+ if (url.HasQuery() != (vector->expected_query != NULL)) {
+ fprintf(stderr, "TEST %02d: expected a query, did not get one\n", test_index);
+ return;
+ }
+ if (vector->expected_query) {
+ if (url.GetQuery() != vector->expected_query) {
+ fprintf(stderr, "TEST %02d: expected GetQuery() to return %s, got %s\n", test_index, vector->expected_query, url.GetQuery().GetChars());
+ return;
+ }
+ }
+ if (url.HasFragment() != (vector->expected_fragment != NULL)) {
+ fprintf(stderr, "TEST %02d: expected a fragment, did not get one\n", test_index);
+ return;
+ }
+ if (vector->expected_fragment) {
+ if (url.GetFragment() != vector->expected_fragment) {
+ fprintf(stderr, "TEST %02d: expected GetFragment() to return %s, got %s\n", test_index, vector->expected_fragment, url.GetFragment().GetChars());
+ return;
+ }
+ }
+
+ NPT_String url_string = url.ToString();
+ if (url_string != vector->expected_string) {
+ fprintf(stderr, "TEST %02d: expected ToString() to return %s, got %s\n", test_index, vector->expected_string, url_string.GetChars());
+ return;
+ }
+ NPT_HttpUrl url2(url_string);
+ if (url2.ToString() != url_string) {
+ fprintf(stderr, "TEST %02d: url ToString() does not parse to same url\n", test_index);
+ return;
+ }
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ printf("--- test starting\n");
+
+ // parsing test vectors
+ for (unsigned int i=0; i<sizeof(ParseTestVectors)/sizeof(ParseTestVectors[0]); i++) {
+ ParseTestVector* vector = &ParseTestVectors[i];
+ TestParse(vector, i);
+ }
+
+ // test URL parsing, special cases
+ NPT_HttpUrl url;
+ CHECK(!url.IsValid());
+
+ url = "http://foo.bar/blabla foo/blibli/?query=1&bla=2&slash=/&foo=a#fragment";
+ CHECK(url.IsValid());
+ CHECK(url.GetHost() == "foo.bar");
+ CHECK(url.GetPort() == 80);
+ CHECK(url.GetPath() == "/blabla foo/blibli/");
+ CHECK(url.GetQuery() == "query=1&bla=2&slash=/&foo=a");
+ CHECK(url.GetFragment() == "fragment");
+ CHECK(url.ToString(false) == "http://foo.bar/blabla%20foo/blibli/?query=1&bla=2&slash=/&foo=a");
+
+ url = NPT_HttpUrl("http://foo.bar/blabla%20foo/blibli/?query=1&bla=2&slash=/&foo=a#fragment");
+ CHECK(url.IsValid());
+ CHECK(url.GetHost() == "foo.bar");
+ CHECK(url.GetPort() == 80);
+ CHECK(url.GetPath() == "/blabla%20foo/blibli/");
+ CHECK(url.GetQuery() == "query=1&bla=2&slash=/&foo=a");
+ CHECK(url.GetFragment() == "fragment");
+ CHECK(url.ToRequestString() == "/blabla%20foo/blibli/?query=1&bla=2&slash=/&foo=a");
+
+ url.SetPathPlus("/bla/foo?query=bar");
+ url.SetHost("bar.com:8080");
+ CHECK(url.IsValid());
+ CHECK(url.GetHost() == "bar.com");
+ CHECK(url.GetPort() == 8080);
+ CHECK(url.GetPath() == "/bla/foo");
+ CHECK(url.GetQuery() == "query=bar");
+
+ url.SetPathPlus("bla/foo?query=bar");
+ url.SetHost("bar.com:8080");
+ CHECK(url.IsValid());
+ CHECK(url.GetHost() == "bar.com");
+ CHECK(url.GetPort() == 8080);
+ CHECK(url.GetPath() == "bla/foo");
+ CHECK(url.GetQuery() == "query=bar");
+
+ url.SetPathPlus("*");
+ CHECK(url.IsValid());
+ CHECK(url.GetPath() == "*");
+
+ url = NPT_HttpUrl("http://foo/?query=1&bla=2&slash=/&foo=a#fragment");
+ CHECK(url.IsValid());
+ CHECK(url.GetHost() == "foo");
+ CHECK(url.GetPort() == 80);
+ CHECK(url.GetPath() == "/");
+ CHECK(url.GetQuery() == "query=1&bla=2&slash=/&foo=a");
+ CHECK(url.GetFragment() == "fragment");
+ CHECK(url.ToRequestString() == "/?query=1&bla=2&slash=/&foo=a");
+
+ // url form encoding
+ NPT_UrlQuery query;
+ query.AddField("url1","http://foo.bar/foo?q=3&bar=+7/3&boo=a%3Db&bli=a b");
+ query.AddField("url2","(1234+456 789)");
+ CHECK(query.ToString() == "url1=http%3A%2F%2Ffoo.bar%2Ffoo%3Fq%3D3%26bar%3D%2B7%2F3%26boo%3Da%3Db%26bli%3Da+b&url2=(1234%2B456+789)");
+
+ query = "url1=http%3A%2F%2Ffoo.bar%2Ffoo%3Fq%3D3%26bar%3D%2B7%2F3&url2=12+34";
+ CHECK(query.ToString() == "url1=http%3A%2F%2Ffoo.bar%2Ffoo%3Fq%3D3%26bar%3D%2B7%2F3&url2=12%2B34");
+
+ // url query decoding
+ NPT_UrlQuery query2("a=1+2+3&b=http%3A%2F%2Ffoo.bar%2Ffoo%3Fq%3D3%26bar%3D%2B7%2F3%26boo%3Da%3Db%26bli%3Da+b");
+ const char* a_field = query2.GetField("a");
+ const char* b_field = query2.GetField("b");
+ const char* c_field = query2.GetField("c");
+ CHECK(a_field != NULL);
+ CHECK(NPT_StringsEqual(a_field, "1+2+3"));
+ CHECK(NPT_UrlQuery::UrlDecode(a_field) == "1 2 3");
+ CHECK(b_field != NULL);
+ CHECK(NPT_StringsEqual(b_field, "http%3A%2F%2Ffoo.bar%2Ffoo%3Fq%3D3%26bar%3D%2B7%2F3%26boo%3Da%3Db%26bli%3Da+b"));
+ CHECK(NPT_UrlQuery::UrlDecode(b_field) == "http://foo.bar/foo?q=3&bar= 7/3&boo=a=b&bli=a b");
+ CHECK(c_field == NULL);
+
+ printf("--- test done\n");
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1.cpp
new file mode 100644
index 0000000000..7fadecfe24
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1.cpp
@@ -0,0 +1,578 @@
+/*****************************************************************
+|
+| XML Test Program 1
+|
+| (c) 2001-2003 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <assert.h>
+#include "Neptune.h"
+#include "NptDebug.h"
+
+/*----------------------------------------------------------------------
+| CHECK
++---------------------------------------------------------------------*/
+#define CHECK(test) \
+do { \
+ if (!(test)) { \
+ fprintf(stderr, "FAILED: line %d\n", __LINE__); \
+ assert(0); \
+ } \
+} while(0)
+
+/*----------------------------------------------------------------------
+| TestWriter
++---------------------------------------------------------------------*/
+static void
+TestWriter()
+{
+ NPT_XmlElementNode* top = new NPT_XmlElementNode("top");
+ NPT_XmlElementNode* child1 = new NPT_XmlElementNode("child1");
+ child1->SetAttribute("someAttribute", "someValue");
+ top->AddChild(child1);
+ NPT_XmlElementNode* child2 = new NPT_XmlElementNode("child2");
+ child2->SetAttribute("someOtherAttribute", "someOtherValue");
+ child2->AddText("Some Text");
+ child1->AddChild(child2);
+ NPT_XmlElementNode* child3 = new NPT_XmlElementNode("child3");
+ child3->SetAttribute("thirdArrtibute", "3");
+ child2->AddChild(child3);
+
+ NPT_XmlWriter writer;
+ NPT_File out(NPT_FILE_STANDARD_OUTPUT);
+ out.Open(NPT_FILE_OPEN_MODE_WRITE);
+ NPT_OutputStreamReference out_stream;
+ out.GetOutputStream(out_stream);
+
+ writer.Serialize(*top, *out_stream);
+}
+
+#if defined(_WIN32) && defined(_DEBUG) && !defined(UNDER_CE)
+#include <crtdbg.h>
+#endif
+
+/*----------------------------------------------------------------------
+| TestFinders
++---------------------------------------------------------------------*/
+static void
+TestFinders()
+{
+ const char* xml = "<a b='foo' c='bar' ns:b='bla' ns:d='123' xmlns:ns='ns-uri' xmlns:ns1='ns1-uri' xmlns:ns2='ns2-uri' xmlns:ns3='ns3-uri'><b xmlns='ns4-uri' ba='123' ns2:bo='345'></b><b ba='123' ns2:bo='345'></b><ns2:b></ns2:b><ns1:b></ns1:b></a>";
+ NPT_XmlParser parser;
+ NPT_XmlNode* root;
+ CHECK(NPT_SUCCEEDED(parser.Parse(xml, root)));
+
+ NPT_XmlElementNode* elem = root->AsElementNode();
+ const NPT_String* attr = elem->GetAttribute("d");
+ CHECK(attr == NULL);
+ attr = elem->GetAttribute("b");
+ CHECK(attr != NULL && *attr == "foo");
+ attr = elem->GetAttribute("b", "ns-uri");
+ CHECK(attr != NULL && *attr == "bla");
+ attr = elem->GetAttribute("c", NPT_XML_ANY_NAMESPACE);
+ CHECK(attr != NULL && *attr == "bar");
+ attr = elem->GetAttribute("b", NPT_XML_ANY_NAMESPACE);
+ CHECK(attr != NULL && *attr == "foo");
+ attr = elem->GetAttribute("b", "boubou");
+ CHECK(attr == NULL);
+ attr = elem->GetAttribute("d", NPT_XML_NO_NAMESPACE);
+ CHECK(attr == NULL);
+
+ NPT_XmlElementNode* child;
+ child = elem->GetChild("b");
+ CHECK(child != NULL && *child->GetAttribute("ba") == "123");
+ child = elem->GetChild("b", "ns4-uri");
+ CHECK(child != NULL && child->GetAttribute("ba", "ns4-uri") == NULL);
+ CHECK(child != NULL && *child->GetAttribute("bo", NPT_XML_ANY_NAMESPACE) == "345");
+ CHECK(child != NULL && child->GetAttribute("bo", NPT_XML_NO_NAMESPACE) == NULL);
+ CHECK(child != NULL && child->GetAttribute("bo", "foo") == NULL);
+ CHECK(child != NULL && *child->GetAttribute("bo", "ns2-uri") == "345");
+ child = elem->GetChild("b", NPT_XML_ANY_NAMESPACE);
+ CHECK(child != NULL && *child->GetNamespace() == "ns4-uri");
+ child = elem->GetChild("b", "ns2-uri");
+ CHECK(child != NULL && *child->GetNamespace() == "ns2-uri");
+ child = elem->GetChild("b", "boubou");
+ CHECK(child == NULL);
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestNamespaces
++---------------------------------------------------------------------*/
+static void
+TestNamespaces()
+{
+ NPT_XmlElementNode* top = new NPT_XmlElementNode("top");
+ top->SetNamespaceUri("", "http://namespace1.com");
+ CHECK(top->GetNamespaceUri("") &&
+ *(top->GetNamespaceUri("")) == "http://namespace1.com");
+
+ NPT_XmlElementNode* child1 = new NPT_XmlElementNode("child1");
+ top->AddChild(child1);
+ CHECK(child1->GetNamespaceUri(""));
+ CHECK(*(child1->GetNamespaceUri("")) == "http://namespace1.com");
+
+ NPT_XmlElementNode* child2 = new NPT_XmlElementNode("ns1", "child2");
+ top->AddChild(child2);
+ CHECK(child2->GetNamespaceUri(""));
+ CHECK(*(child2->GetNamespaceUri("")) == "http://namespace1.com");
+ CHECK(child2->GetNamespaceUri("ns1") == NULL);
+ child2->SetNamespaceUri("ns1", "http://blabla");
+ CHECK(child2->GetNamespaceUri("ns1"));
+ CHECK(*child2->GetNamespaceUri("ns1") == "http://blabla");
+ CHECK(*child2->GetNamespace() == "http://blabla");
+
+ // testing a child with a namespace defined in parent
+ NPT_XmlElementNode* child3 = new NPT_XmlElementNode("ns1", "child3");
+ child2->AddChild(child3);
+ CHECK(child3->GetNamespaceUri(""));
+ CHECK(*(child3->GetNamespaceUri("")) == "http://namespace1.com");
+ CHECK(child3->GetNamespaceUri("ns1"));
+ CHECK(*child3->GetNamespaceUri("ns1") == "http://blabla");
+ CHECK(*child3->GetNamespace() == "http://blabla");
+
+ // testing adding a namespace in a node which namespace is defined in parent
+ child3->SetNamespaceUri("ns3", "http://foofoo");
+ CHECK(child3->GetNamespaceUri("ns1"));
+ CHECK(*child3->GetNamespaceUri("ns1") == "http://blabla");
+ CHECK(*child3->GetNamespace() == "http://blabla");
+
+ const char* xml1 =
+ "<top>"
+ " <child1 xmlns:foo='blabla'><cc1 foo:attr1='0'/></child1>"
+ " <child2 xmlns='foobar' attr1='1'>"
+ " <cc2/>"
+ " <cc3 />"
+ " </child2 >"
+ " <ns2:child3 xmlns:ns2='abcd'><cc3/></ns2:child3>"
+ " <child4 ns3:attr1='3' xmlns:ns3='efgh'>"
+ " <ns3:cc4 ns3:attr1='4'/>"
+ " </child4>"
+ "</top>";
+ NPT_XmlParser parser;
+ NPT_XmlNode* root = NULL;
+ NPT_Result result = parser.Parse(xml1, root);
+ CHECK(NPT_SUCCEEDED(result));
+ CHECK(root != NULL);
+
+ NPT_XmlWriter writer;
+ NPT_MemoryStream output;
+ writer.Serialize(*root, output);
+ NPT_LargeSize size;
+ output.GetSize(size);
+ printf(NPT_String((const char*)output.GetData(), (NPT_Size)size).GetChars());
+
+ delete top;
+ delete root;
+
+ // test default and empty namespaces
+ const char* xml2 = "<top><a></a><b xmlns='foo'><c xmlns=''></c></b></top>";
+ result = parser.Parse(xml2, root);
+ CHECK(root->AsElementNode()->GetNamespace() == NULL);
+ NPT_XmlElementNode* a_elem = (*root->AsElementNode()->GetChildren().GetItem(0))->AsElementNode();
+ CHECK(a_elem->GetNamespace() == NULL);
+ NPT_XmlElementNode* b_elem = (*root->AsElementNode()->GetChildren().GetItem(1))->AsElementNode();
+ CHECK(*b_elem->GetNamespace() == "foo");
+ NPT_XmlElementNode* c_elem = (*b_elem->GetChildren().GetItem(0))->AsElementNode();
+ CHECK(c_elem->GetNamespace() == NULL);
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestSerializer
++---------------------------------------------------------------------*/
+static void
+TestSerializer()
+{
+ NPT_XmlWriter writer;
+ NPT_MemoryStream output;
+ NPT_String check;
+ NPT_LargeSize size;
+
+ //
+ // test without namespaces
+ //
+
+ // simple element with no prefix and no namespace
+ NPT_XmlElementNode* top = new NPT_XmlElementNode("top");
+ writer.Serialize(*top, output);
+ output.GetSize(size);
+ check.Assign((const char*)output.GetData(), (NPT_Size)size);
+ CHECK(check == "<top/>");
+
+ // with one attribute
+ output.SetDataSize(0);
+ top->SetAttribute("attr1", "b&w");
+ writer.Serialize(*top, output);
+ output.GetSize(size);
+ check.Assign((const char*)output.GetData(), (NPT_Size)size);
+ CHECK(check == "<top attr1=\"b&amp;w\"/>");
+
+ // add one child
+ output.SetDataSize(0);
+ delete top;
+ top = new NPT_XmlElementNode("top");
+ NPT_XmlElementNode* child1 = new NPT_XmlElementNode("child1");
+ top->AddChild(child1);
+ writer.Serialize(*top, output);
+ output.GetSize(size);
+ check.Assign((const char*)output.GetData(), (NPT_Size)size);
+ CHECK(check == "<top><child1/></top>");
+
+ //
+ // test with namespaces
+ //
+
+ // test default namespaces
+ output.SetDataSize(0);
+ delete top;
+ top = new NPT_XmlElementNode("top");
+ top->SetNamespaceUri("", "http://namespace.com");
+ writer.Serialize(*top, output);
+ output.GetSize(size);
+ check.Assign((const char*)output.GetData(), (NPT_Size)size);
+ CHECK(check == "<top xmlns=\"http://namespace.com\"/>");
+
+ // test attribute prefixes
+ output.SetDataSize(0);
+ delete top;
+ top = new NPT_XmlElementNode("top");
+ top->SetAttribute(NULL, "foo", "6");
+ top->SetAttribute("ns1", "foo", "3");
+ top->SetAttribute("ns2", "foo", "4");
+ top->SetAttribute("ns1", "foo", "5");
+ writer.Serialize(*top, output);
+ output.GetSize(size);
+ check.Assign((const char*)output.GetData(), (NPT_Size)size);
+ CHECK(check == "<top foo=\"6\" ns1:foo=\"5\" ns2:foo=\"4\"/>");
+
+ delete top;
+}
+
+/*----------------------------------------------------------------------
+| TestCanonicalizer
++---------------------------------------------------------------------*/
+static void
+TestCanonicalizer()
+{
+ extern const char* xml_cano_1[];
+
+ NPT_XmlParser parser(true); // do not ignore whitespaces
+ NPT_XmlNode* root;
+
+ for (unsigned int i=0; xml_cano_1[i]; i+=2) {
+ const char* xml_in = xml_cano_1[i];
+ const char* xml_out = xml_cano_1[i+1];
+ CHECK(NPT_SUCCEEDED(parser.Parse(xml_in, root)));
+ CHECK(root);
+
+ NPT_XmlCanonicalizer canonicalizer;
+ NPT_MemoryStream buffer1;
+ NPT_Result result = canonicalizer.Serialize(*root, buffer1);
+
+ NPT_String str((const char*)buffer1.GetData(), buffer1.GetDataSize());
+ NPT_Debug("%s", str.GetChars());
+ CHECK(str == xml_out);
+
+ delete root;
+
+ CHECK(NPT_SUCCEEDED(parser.Parse(str, root)));
+ CHECK(root);
+ NPT_MemoryStream buffer2;
+ result = canonicalizer.Serialize(*root, buffer2);
+ CHECK(buffer1.GetBuffer() == buffer2.GetBuffer());
+
+ delete root;
+ }
+}
+
+/*----------------------------------------------------------------------
+| TestRegression
++---------------------------------------------------------------------*/
+static void
+TestRegression()
+{
+ // test for a bug found when the XML parser would try
+ // to compare a null prefix
+ NPT_XmlElementNode* element = new NPT_XmlElementNode("hello");
+ element->SetAttribute("ns", "foo", "6");
+ element->SetAttribute("foo", "5");
+ element->SetAttribute("ns", "foo", "7");
+ element->SetAttribute("foo", "8");
+ element->SetNamespaceUri("ns", "blabla");
+ CHECK(*element->GetAttribute("foo") == "8");
+ CHECK(*element->GetAttribute("foo", "blabla") == "7");
+
+ delete element;
+}
+
+/*----------------------------------------------------------------------
+| TestWhitespace
++---------------------------------------------------------------------*/
+static void
+TestWhitespace()
+{
+ const char* xml =
+"<doc>\r\n"
+" <clean> </clean>\r\n"
+" <dirty> A B </dirty>\r\n"
+" <mixed>\r\n"
+" A\r\n"
+" <clean> </clean>\r\n"
+" B\r\n"
+" <dirty> A B </dirty>\r\n"
+" C\r\n"
+" </mixed>\r\n"
+"</doc>\r\n";
+
+ const char* expect1 =
+"<doc><clean/><dirty> A B </dirty><mixed>\n"
+" A\n"
+" <clean/>\n"
+" B\n"
+" <dirty> A B </dirty>\n"
+" C\n"
+" </mixed></doc>";
+
+ const char* expect2 =
+"<doc>\n"
+" <clean> </clean>\n"
+" <dirty> A B </dirty>\n"
+" <mixed>\n"
+" A\n"
+" <clean> </clean>\n"
+" B\n"
+" <dirty> A B </dirty>\n"
+" C\n"
+" </mixed>\n"
+"</doc>";
+
+ NPT_XmlParser parser1(false); // ignore whitespace
+ NPT_XmlNode* root;
+ CHECK(NPT_SUCCEEDED(parser1.Parse(xml, root)));
+ CHECK(root);
+
+ NPT_XmlWriter writer;
+ NPT_MemoryStream buffer;
+ writer.Serialize(*root, buffer);
+ CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect1, NPT_StringLength(expect1)));
+
+ delete root;
+
+ NPT_XmlParser parser2(true); // keep whitespace
+ CHECK(NPT_SUCCEEDED(parser2.Parse(xml, root)));
+ CHECK(root);
+
+ buffer.SetDataSize(0);
+ writer.Serialize(*root, buffer);
+ CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect2, NPT_StringLength(expect2)));
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestComments
++---------------------------------------------------------------------*/
+static void
+TestComments()
+{
+ const char* xml =
+ "<!-- comment outside the element -->\n"
+ "<doc> blabla <!-- --> foo <!-- you <g> &foo -> &bar --> blibli</doc>";
+ const char* expect = "<doc> blabla foo blibli</doc>";
+
+ NPT_XmlParser parser;
+ NPT_XmlNode* root;
+ CHECK(NPT_SUCCEEDED(parser.Parse(xml, root)));
+ CHECK(root);
+
+ NPT_XmlWriter writer;
+ NPT_MemoryStream buffer;
+ writer.Serialize(*root, buffer);
+ CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect, NPT_StringLength(expect)));
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestCdata
++---------------------------------------------------------------------*/
+static void
+TestCdata()
+{
+ const char* xml =
+ "<doc> blabla <![CDATA[ < [[ Smith ]] > ]]> blibli</doc>";
+ const char* expect = "<doc> blabla &lt; [[ Smith ]] &gt; blibli</doc>";
+
+ NPT_XmlParser parser;
+ NPT_XmlNode* root;
+ CHECK(NPT_SUCCEEDED(parser.Parse(xml, root)));
+ CHECK(root);
+
+ NPT_XmlWriter writer;
+ NPT_MemoryStream buffer;
+ writer.Serialize(*root, buffer);
+ CHECK(buffer.GetBuffer() == NPT_DataBuffer(expect, NPT_StringLength(expect)));
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestAttributes
++---------------------------------------------------------------------*/
+static void
+TestAttributes()
+{
+ const char* xml =
+ "<element foo='blabla'><cc1 attr1='0'/></element>";
+ NPT_XmlParser parser;
+ NPT_XmlNode* root = NULL;
+ NPT_Result result = parser.Parse(xml, root);
+ CHECK(NPT_SUCCEEDED(result));
+ CHECK(root != NULL);
+ CHECK(root->AsElementNode() != NULL);
+ const NPT_String* a = root->AsElementNode()->GetAttribute("foo");
+ CHECK(*a == "blabla");
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestAttributeNormalization
++---------------------------------------------------------------------*/
+static void
+TestAttributeNormalization()
+{
+ const char* xml = "<x a='\n\n xyz abc &#xD; &#xA; &#x9; &#x20; 12\r\n3\r4\n5 6 '/>";
+ NPT_XmlParser parser;
+ NPT_XmlNode* root = NULL;
+ NPT_Result result = parser.Parse(xml, root);
+ CHECK(NPT_SUCCEEDED(result));
+ CHECK(root != NULL);
+ CHECK(root->AsElementNode() != NULL);
+ const NPT_String* a = root->AsElementNode()->GetAttribute("a");
+ CHECK(*a == " xyz abc \r \n \t 12 3 4 5 6 ");
+ delete root;
+}
+
+
+/*----------------------------------------------------------------------
+| TestMakeStandalone
++---------------------------------------------------------------------*/
+static void
+TestMakeStandalone()
+{
+ const char* xml =
+ "<parent xmlns:foo='foo-ns' xmlns:bar='bar-ns' xmlns='default-ns'><inter xmlns:bli='bli-ns' xmlns:bou='bou-ns'><child><foo:a>a-text</foo:a><bar:b xml:fifi='0'>b-text</bar:b><c>c-text</c><d bou:att='b-att'/></child></inter></parent>";
+ const char* expected =
+ "<child xmlns=\"default-ns\" xmlns:foo=\"foo-ns\" xmlns:bar=\"bar-ns\" xmlns:bou=\"bou-ns\"><foo:a>a-text</foo:a><bar:b xml:fifi=\"0\">b-text</bar:b><c>c-text</c><d bou:att=\"b-att\"/></child>";
+ NPT_XmlParser parser;
+ NPT_XmlNode* root = NULL;
+ NPT_Result result = parser.Parse(xml, root);
+ CHECK(NPT_SUCCEEDED(result));
+ CHECK(root != NULL);
+ CHECK(root->AsElementNode() != NULL);
+ NPT_XmlElementNode* inter = root->AsElementNode()->GetChild("inter", NPT_XML_ANY_NAMESPACE);
+ CHECK(inter != NULL);
+ NPT_XmlElementNode* child = inter->GetChild("child", NPT_XML_ANY_NAMESPACE);
+ CHECK(child != NULL);
+ child->MakeStandalone();
+ NPT_XmlWriter writer;
+ NPT_MemoryStream buffer;
+ writer.Serialize(*child, buffer);
+ CHECK(buffer.GetBuffer() == NPT_DataBuffer(expected, NPT_StringLength(expected)));
+
+
+ delete root;
+}
+
+/*----------------------------------------------------------------------
+| TestFile
++---------------------------------------------------------------------*/
+static void
+TestFile(const char* filename)
+{
+ NPT_File* input;
+ NPT_InputStreamReference stream;
+ NPT_Result result;
+
+ // open the input file
+ input = new NPT_File(filename);
+ result = input->Open(NPT_FILE_OPEN_MODE_READ);
+ if (NPT_FAILED(result)) {
+ NPT_Debug("XmtTest1:: cannot open input (%d)\n", result);
+ return;
+ }
+ result = input->GetInputStream(stream);
+
+ // parse the buffer
+ NPT_XmlParser parser;
+ NPT_XmlNode* tree;
+ result = parser.Parse(*stream, tree);
+ if (NPT_FAILED(result)) {
+ NPT_Debug("XmlTest1:: cannot parse input (%d)\n", result);
+ return;
+ }
+
+
+ // dump the tree
+ NPT_XmlWriter writer(2);
+ NPT_File output(NPT_FILE_STANDARD_OUTPUT);
+ output.Open(NPT_FILE_OPEN_MODE_WRITE);
+ NPT_OutputStreamReference output_stream_ref;
+ output.GetOutputStream(output_stream_ref);
+ writer.Serialize(*tree, *output_stream_ref);
+
+ // delete the tree
+ delete tree;
+
+ // delete the input
+ delete input;
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int argc, char** argv)
+{
+ // setup debugging
+#if defined(_WIN32) && defined(_DEBUG) && !defined(UNDER_CE)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+ // check args
+ if (argc == 2) {
+ TestFile(argv[1]);
+ return 0;
+ }
+
+ TestRegression();
+ TestComments();
+ TestCdata();
+ TestWhitespace();
+ TestAttributes();
+ TestAttributeNormalization();
+ TestNamespaces();
+ TestSerializer();
+ TestMakeStandalone();
+ TestCanonicalizer();
+ TestFinders();
+ TestWriter();
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1Data.cpp b/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1Data.cpp
new file mode 100644
index 0000000000..a6b156126d
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Xml1/XmlTest1Data.cpp
@@ -0,0 +1,843 @@
+const char* xml_cano_1[] = {
+// test 1
+"<doc>\r\n"
+" <e1 />\r\n"
+" <e2 ></e2>\r\n"
+" <e3 name = 'elem3' id='elem3' />\r\n"
+" <e4 name='elem4' id='elem4' ></e4>\r\n"
+" <e5 a:attr='out' b:attr='sorted' attr2='all' attr=\"I'm\"\r\n"
+" xmlns:b=\"http://www.ietf.org\"\r\n"
+" xmlns:a=\"http://www.w3.org\"\r\n"
+" xmlns=\"http://example.org\"/>\r\n"
+" <e6 xmlns=\"\" xmlns:a=\"http://www.w3.org\">\r\n"
+" <e7 xmlns=\"http://www.ietf.org\">\r\n"
+" <e8 xmlns=\"\" xmlns:a=\"http://www.w3.org\">\r\n"
+" <e9 xmlns=\"\" xmlns:a=\"http://www.ietf.org\"/>\r\n"
+" </e8>\r\n"
+" </e7>\r\n"
+" </e6>\r\n"
+"</doc>",
+
+"<doc>\n"
+" <e1></e1>\n"
+" <e2></e2>\n"
+" <e3 id=\"elem3\" name=\"elem3\"></e3>\n"
+" <e4 id=\"elem4\" name=\"elem4\"></e4>\n"
+" <e5 xmlns=\"http://example.org\" xmlns:a=\"http://www.w3.org\" xmlns:b=\"http://www.ietf.org\" attr=\"I'm\" attr2=\"all\" b:attr=\"sorted\" a:attr=\"out\"></e5>\n"
+" <e6>\n"
+" <e7 xmlns=\"http://www.ietf.org\">\n"
+" <e8 xmlns=\"\">\n"
+" <e9></e9>\n"
+" </e8>\n"
+" </e7>\n"
+" </e6>\n"
+"</doc>",
+
+// test 2
+"<a>\n"
+" <b xmlns:foo='foo-ns'>\n"
+" <c xmlns='d1-ns'>\n"
+" <foo:d/>\n"
+" <e xmlns='e1-ns'>\n"
+" <gloo:f xmlns:gloo='e1-ns'/>\n"
+" </e>\n"
+" <f xmlns=''>\n"
+" <foo:g/>\n"
+" </f>\n"
+" </c>\n"
+" </b>\n"
+"</a>",
+
+"<a>\n"
+" <b>\n"
+" <c xmlns=\"d1-ns\">\n"
+" <foo:d xmlns:foo=\"foo-ns\"></foo:d>\n"
+" <e xmlns=\"e1-ns\">\n"
+" <gloo:f xmlns:gloo=\"e1-ns\"></gloo:f>\n"
+" </e>\n"
+" <f xmlns=\"\">\n"
+" <foo:g xmlns:foo=\"foo-ns\"></foo:g>\n"
+" </f>\n"
+" </c>\n"
+" </b>\n"
+"</a>",
+
+// test 3
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:btt=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>",
+
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:btt=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>",
+
+// test 4
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:btt=\"att1\" bla:att=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>",
+
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt bla:att=\"att2\" foo:btt=\"att1\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>",
+// Test att1-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org'>\n"
+"<elt2 foo:att='1'>lolo</elt2>\n"
+"</elt>"
+,
+"<elt>\n"
+"<elt2 xmlns:foo=\"http://a.org\" foo:att=\"1\">lolo</elt2>\n"
+"</elt>"
+,
+// Test att2-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org' xmlns:bar='http://b.org'>\n"
+" <elt1 bar:att=\"2\" foo:att='1'>babar</elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1 xmlns:bar=\"http://b.org\" xmlns:foo=\"http://a.org\" foo:att=\"1\" bar:att=\"2\">babar</elt1>\n"
+"</elt>"
+,
+// Test char_modi-xmlsec.xml
+"<doc>\n"
+" <norm attr='&#9;'/>\n"
+"</doc>"
+,
+"<doc>\n"
+" <norm attr=\"&#x9;\"></norm>\n"
+"</doc>"
+,
+// Test char_modif_char_ref-xmlsec.xml
+"<doc>\n"
+" <text>First line&#x0d;&#10;Second line</text>\n"
+" <value>&#x32;</value>\n"
+" <compute></compute>\n"
+" <compute expr='value>\"0\" &amp;&amp; value&lt;\"10\" ?\"valid\":\"error\"'>valid</compute>\n"
+" <norm attr=' &apos; &#x20;&#13;&#xa;&#9; &apos; '/>\n"
+" <normNames attr=' A &#x20;&#13;&#xa;&#9; B '/>\n"
+"</doc>"
+,
+"<doc>\n"
+" <text>First line&#xD;\n"
+"Second line</text>\n"
+" <value>2</value>\n"
+" <compute></compute>\n"
+" <compute expr=\"value>&quot;0&quot; &amp;&amp; value&lt;&quot;10&quot; ?&quot;valid&quot;:&quot;error&quot;\">valid</compute>\n"
+" <norm attr=\" ' &#xD;&#xA;&#x9; ' \"></norm>\n"
+" <normNames attr=\" A &#xD;&#xA;&#x9; B \"></normNames>\n"
+"</doc>"
+,
+// Test comments-xmlsec.xml
+"<?xml version=\"1.0\"?>\n"
+"\n"
+"\n"
+"\n"
+"<doc>Bonjour le monde !<!-- Commentaire 1 --></doc>\n"
+"\n"
+"<!-- Commentaire 2 -->"
+,
+"<doc>Bonjour le monde !</doc>"
+,
+// Test document_subset-xmlsec.xml
+"<doc xmlns=\"http://www.ietf.org\" xmlns:w3c=\"http://www.w3.org\">\n"
+" <e1>\n"
+" <e2 xmlns=\"\">\n"
+" <e3 id=\"E3\"/>\n"
+" </e2>\n"
+" </e1>\n"
+"</doc>"
+,
+"<doc xmlns=\"http://www.ietf.org\">\n"
+" <e1>\n"
+" <e2 xmlns=\"\">\n"
+" <e3 id=\"E3\"></e3>\n"
+" </e2>\n"
+" </e1>\n"
+"</doc>"
+,
+// Test namespaces2-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org' xmlns:bar='http://b.org'>\n"
+" <elt1 bar:att=\"2\" foo:att='1'>\n"
+" <elt2 xmlns:foo = 'http://c.org'>\n"
+" <elt3 xmlns:bar = \"http://d.org\">\n"
+" <elt4 bar:att2=\"rab\" foo:att2='oof'>octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1 xmlns:bar=\"http://b.org\" xmlns:foo=\"http://a.org\" foo:att=\"1\" bar:att=\"2\">\n"
+" <elt2>\n"
+" <elt3>\n"
+" <elt4 xmlns:bar=\"http://d.org\" xmlns:foo=\"http://c.org\" foo:att2=\"oof\" bar:att2=\"rab\">octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+// Test namespaces3-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org' xmlns:bar='http://b.org' xmlns=\"\">\n"
+" <elt1>\n"
+" <elt2 xmlns:foo = 'http://c.org'>\n"
+" <elt3 xmlns:bar = \"http://d.org\">\n"
+" <elt4 bar:att2=\"rab\" foo:att2='oof'>octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1>\n"
+" <elt2>\n"
+" <elt3>\n"
+" <elt4 xmlns:bar=\"http://d.org\" xmlns:foo=\"http://c.org\" foo:att2=\"oof\" bar:att2=\"rab\">octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+// Test namespaces4-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org' xmlns:bar='http://b.org'>\n"
+" <elt1>\n"
+" <elt2 xmlns:foo = 'http://c.org'>\n"
+" <elt3 bar:att=\"2\" foo:att='1' xmlns:bar = \"http://d.org\">\n"
+" <elt4 bar:att2=\"rab\" foo:att2='oof'>octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1>\n"
+" <elt2>\n"
+" <elt3 xmlns:bar=\"http://d.org\" xmlns:foo=\"http://c.org\" foo:att=\"1\" bar:att=\"2\">\n"
+" <elt4 foo:att2=\"oof\" bar:att2=\"rab\">octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+// Test namespaces5-xmlsec.xml
+"<elt xmlns:foo = 'http://a.org' xmlns:bar='http://b.org'>\n"
+" <elt1>\n"
+" <elt2>\n"
+" <elt3 bar:att=\"2\" xmlns:bar = \"http://d.org\">\n"
+" <elt4 xmlns:bar='http://rab.org'>octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1>\n"
+" <elt2>\n"
+" <elt3 xmlns:bar=\"http://d.org\" bar:att=\"2\">\n"
+" <elt4>octopous</elt4>\n"
+" </elt3>\n"
+" </elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+// Test prefixe-xmlsec.xml
+"<elt>\n"
+" <elt1 xmlns:bar=\"http://d.com\" bar:att=\"2\">\n"
+" <bar:elt2/>\n"
+" </elt1>\n"
+"</elt>"
+,
+"<elt>\n"
+" <elt1 xmlns:bar=\"http://d.com\" bar:att=\"2\">\n"
+" <bar:elt2></bar:elt2>\n"
+" </elt1>\n"
+"</elt>"
+,
+// Test same_namespaces-xmlsec.xml
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\"/>\n"
+"</foo:bar>"
+,
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\"></bla:zoo>\n"
+"</foo:bar>"
+,
+// Test same_namespaces2-xmlsec.xml
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:btt=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+"<foo:bar xmlns:foo=\"http://a.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:btt=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+// Test same_namespaces2b-xmlsec.xml
+"<foo:bar xmlns:foo=\"http://b.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:att2=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+"<foo:bar xmlns:foo=\"http://b.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt bla:att2=\"att2\" foo:att=\"att1\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+// Test same_namespaces2c-xmlsec.xml
+"<foo:bar xmlns:foo=\"http://b.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt foo:att=\"att1\" bla:att=\"att2\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+"<foo:bar xmlns:foo=\"http://b.com\">\n"
+" <bla:zoo xmlns:bla=\"http://a.com\">\n"
+" <elt bla:att=\"att2\" foo:att=\"att1\">youf</elt>\n"
+" </bla:zoo>\n"
+"</foo:bar>"
+,
+// Test start_end_tags-xmlsec.xml
+"<doc>\n"
+" <e1 />\n"
+" <e2 ></e2>\n"
+" <e3 name = \"elem3\" id=\"elem3\" />\n"
+" <e4 name=\"elem4\" id=\"elem4\" ></e4>\n"
+" <e5 a:attr=\"out\" b:attr=\"sorted\" attr2=\"all\" attr=\"I'm\"\n"
+" xmlns:b=\"http://www.ietf.org\"\n"
+" xmlns:a=\"http://www.w3.org\"\n"
+" xmlns=\"http://example.org\"/>\n"
+" <e6 xmlns=\"\" xmlns:a=\"http://www.w3.org\">\n"
+" <e7 xmlns=\"http://www.ietf.org\">\n"
+" <e8 xmlns=\"\" xmlns:a=\"http://www.w3.org\">\n"
+" <e9 xmlns=\"\" xmlns:a=\"http://www.ietf.org\"/>\n"
+" </e8>\n"
+" </e7>\n"
+" </e6>\n"
+"</doc>"
+,
+"<doc>\n"
+" <e1></e1>\n"
+" <e2></e2>\n"
+" <e3 id=\"elem3\" name=\"elem3\"></e3>\n"
+" <e4 id=\"elem4\" name=\"elem4\"></e4>\n"
+" <e5 xmlns=\"http://example.org\" xmlns:a=\"http://www.w3.org\" xmlns:b=\"http://www.ietf.org\" attr=\"I'm\" attr2=\"all\" b:attr=\"sorted\" a:attr=\"out\"></e5>\n"
+" <e6>\n"
+" <e7 xmlns=\"http://www.ietf.org\">\n"
+" <e8 xmlns=\"\">\n"
+" <e9></e9>\n"
+" </e8>\n"
+" </e7>\n"
+" </e6>\n"
+"</doc>"
+,
+// Test utf8-xmlsec.xml
+"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
+"<doc>&#169;</doc>"
+,
+"<doc>\302\251</doc>"
+,
+// Test whitespaces-xmlsec.xml
+"<doc>\n"
+" <clean> </clean>\n"
+" <dirty> A B </dirty>\n"
+" <mixed>\n"
+" A\n"
+" <clean> </clean>\n"
+" B\n"
+" <dirty> A B </dirty>\n"
+" C\n"
+" </mixed>\n"
+"</doc>"
+,
+"<doc>\n"
+" <clean> </clean>\n"
+" <dirty> A B </dirty>\n"
+" <mixed>\n"
+" A\n"
+" <clean> </clean>\n"
+" B\n"
+" <dirty> A B </dirty>\n"
+" C\n"
+" </mixed>\n"
+"</doc>",
+// Test merlin-c14n-two-09.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-10.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-11.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-12.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-13.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-14.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-15.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-16.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-17.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-18.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-19.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-20.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-21.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-22.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-23.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-24.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-25.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+// Test merlin-c14n-two-26.xml
+"<?xml version=\"1.0\"?>\n"
+"<foo:Root xmlns:bar=\"http://example.org/bar\" xmlns:baz=\"http://example.org/baz\" xmlns:foo=\"http://example.org/foo\" xmlns=\"http://example.org/\" xml:lang=\"en-ie\">\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something />\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>"
+,
+"<foo:Root xmlns:foo=\"http://example.org/foo\" xml:lang=\"en-ie\">\n"
+" <bar:Something xmlns:bar=\"http://example.org/bar\">\n"
+" <foo:Something>\n"
+" <bar:Something>\n"
+" <foo:Something>\n"
+" <baz:Something xmlns:baz=\"http://example.org/baz\"></baz:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+" </foo:Something>\n"
+" </bar:Something>\n"
+"</foo:Root>",
+
+0
+};
diff --git a/lib/libUPnP/Neptune/Source/Tests/Xml1/big.xml b/lib/libUPnP/Neptune/Source/Tests/Xml1/big.xml
new file mode 100644
index 0000000000..ef590ac16c
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Xml1/big.xml
@@ -0,0 +1,3277 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.1//EN"
+ "http://www.w3.org/XML/1998/06/xmlspec-v21.dtd" [
+<!--ArborText, Inc., 1988-2000, v.4002-->
+<!ENTITY http-ident "http://www.w3.org/TR/2000/REC-xml">
+<!ENTITY draft.month "October">
+<!ENTITY draft.day "6">
+<!ENTITY iso6.doc.date "20001006">
+<!ENTITY draft.year "2000">
+<!ENTITY versionOfXML "1.0">
+<!ENTITY pio "'&lt;?xml'">
+<!ENTITY doc.date "10 February 1998">
+<!ENTITY w3c.doc.date "02-Feb-1998">
+<!ENTITY WebSGML "WebSGML Adaptations Annex to ISO 8879">
+<!ENTITY pic "'?>'">
+<!ENTITY br "\n">
+<!ENTITY cellback "#c0d9c0">
+<!ENTITY mdash "--">
+<!ENTITY com "--">
+<!ENTITY como "--">
+<!ENTITY comc "--">
+<!ENTITY hcro "&amp;#x">
+<!ENTITY nbsp "&#160;">
+<!ENTITY magicents "<code>amp</code>,
+<code>lt</code>,
+<code>gt</code>,
+<code>apos</code>,
+<code>quot</code>">
+<!ENTITY doc.audience "public review and discussion">
+<!ENTITY doc.distribution "may be distributed freely, as long as
+all text and legal notices remain intact">
+]>
+<spec w3c-doctype="rec">
+<!--
+Notes on preparation of the Second Edition:
+
+- Worked from http://www.w3.org/XML/xml-19980210-errata.
+- Changed DTD reference to point to V2.1 of XMLspec.
+- Moved version number from <title> to <version> element and
+ added "second edition" wording. Mentioned edition information
+ in status.
+- Removed bgcolor="&cellback;" attributes from all <td>
+ elements because that attribute is not in the current table model.
+- Reversed status and abstract, so that abstract is first, according
+ to W3C guidelines.
+- Changed some <emph>s to <titleref>s in bibliography.
+- Changed some <code>s to <at> etc. throughout; where used <attval>,
+ removed existing <quote>s because the stylesheet produces them.
+- Removed some spurious spaces.
+- Added affiliation markup to the original member list.
+- Added commas between individual <thisver> elements, because
+ whitespace is now significant there.
+- Moved <eg>s, <scrap>s, and lists outside of <p>s for cleaner HTML
+ conversion.
+- Revised Status section to reflect new status.
+- Fixed all titleref hrefs so they get transformed properly; at
+ next revision, these all probably need to be changed to some
+ other markup.
+- Incorporated all errata (barring obsoleted and invalid ones);
+ added links to the errata document with <loc role="erratumref">
+ elements; used diff="{add|chg|del}" attribute. This version
+ expects that the official HTML output will have diff="del"
+ elements suppressed.
+-->
+<header>
+<title>Extensible Markup Language (XML)</title>
+<version>1.0 (Second Edition)</version>
+<w3c-designation>REC-xml-&iso6.doc.date;</w3c-designation>
+<w3c-doctype>W3C Recommendation</w3c-doctype>
+<pubdate><day>&draft.day;</day><month>&draft.month;</month><year>&draft.year;</year>
+</pubdate>
+<publoc><loc href="&http-ident;-&iso6.doc.date;">&http-ident;-&iso6.doc.date;</loc>
+(<loc href="&http-ident;-&iso6.doc.date;.html">XHTML</loc>, <loc href="&http-ident;-&iso6.doc.date;.xml">XML</loc>, <loc
+href="&http-ident;-&iso6.doc.date;.pdf">PDF</loc>, <loc href="&http-ident;-&iso6.doc.date;-review.html">XHTML
+review version</loc> with color-coded revision indicators)</publoc>
+<latestloc><loc href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</loc></latestloc>
+<prevlocs><loc href="http://www.w3.org/TR/2000/WD-xml-2e-20000814"> http://www.w3.org/TR/2000/WD-xml-2e-20000814</loc>
+<loc href="http://www.w3.org/TR/1998/REC-xml-19980210"> http://www.w3.org/TR/1998/REC-xml-19980210</loc><!--
+<loc href='http://www.w3.org/TR/PR-xml-971208'>
+http://www.w3.org/TR/PR-xml-971208</loc>
+<loc href='http://www.w3.org/TR/WD-xml-961114'>
+http://www.w3.org/TR/WD-xml-961114</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970331'>
+http://www.w3.org/TR/WD-xml-lang-970331</loc>
+<loc href='http://www.w3.org/TR/WD-xml-lang-970630'>
+http://www.w3.org/TR/WD-xml-lang-970630</loc>
+<loc href='http://www.w3.org/TR/WD-xml-970807'>
+http://www.w3.org/TR/WD-xml-970807</loc>
+<loc href='http://www.w3.org/TR/WD-xml-971117'>
+http://www.w3.org/TR/WD-xml-971117</loc>--> </prevlocs>
+<authlist>
+<author role="1e"><name>Tim Bray</name><affiliation>Textuality and Netscape</affiliation>
+<email href="mailto:tbray@textuality.com">tbray@textuality.com</email></author>
+<author role="1e"><name>Jean Paoli</name><affiliation>Microsoft</affiliation>
+<email href="mailto:jeanpa@microsoft.com">jeanpa@microsoft.com</email></author>
+<author role="1e" diff="chg"><name>C. M. Sperberg-McQueen</name><affiliation>University
+of Illinois at Chicago and Text Encoding Initiative</affiliation><email href="mailto:cmsmcq@uic.edu">cmsmcq@uic.edu</email>
+</author>
+<author role="2e" diff="add"><name>Eve Maler</name><affiliation>Sun Microsystems,
+Inc.</affiliation><email href="mailto:elm@east.sun.com">eve.maler@east.sun.com</email>
+</author>
+</authlist>
+<abstract>
+<p>The Extensible Markup Language (XML) is a subset of SGML that is completely
+described in this document. Its goal is to enable generic SGML to be served,
+received, and processed on the Web in the way that is now possible with HTML.
+XML has been designed for ease of implementation and for interoperability
+with both SGML and HTML.</p>
+</abstract>
+<status>
+<p>This document has been reviewed by W3C Members and other interested parties
+and has been endorsed by the Director as a W3C Recommendation. It is a stable
+document and may be used as reference material or cited as a normative reference
+from another document. W3C's role in making the Recommendation is to draw
+attention to the specification and to promote its widespread deployment. This
+enhances the functionality and interoperability of the Web.</p>
+<p>This document specifies a syntax created by subsetting an existing, widely
+used international text processing standard (Standard Generalized Markup Language,
+ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web.
+It is a product of the W3C XML Activity, details of which can be found at <loc
+href="http://www.w3.org/XML/">http://www.w3.org/XML</loc>. <phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E100">[E100]</loc>
+The English version of this specification is the only normative version. However,
+for translations of this document, see <loc href="http://www.w3.org/XML/#trans">http://www.w3.org/XML/#trans</loc>. </phrase>A
+list of current W3C Recommendations and other technical documents can be found
+at <loc href="http://www.w3.org/TR/">http://www.w3.org/TR</loc>.</p>
+<p diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E66">[E66]</loc>This
+specification uses the term URI, which is defined by <bibref ref="Berners-Lee"/>,
+a work in progress expected to update <bibref ref="RFC1738"/> and <bibref
+ref="RFC1808"/>.</p>
+<p diff="add">This second edition is <emph>not</emph> a new version of XML (first published 10 February 1998);
+it merely incorporates the changes dictated by the first-edition errata (available
+at <loc href="http://www.w3.org/XML/xml-19980210-errata">http://www.w3.org/XML/xml-19980210-errata</loc>)
+as a convenience to readers. The errata list for this second edition is available
+at <loc href="http://www.w3.org/XML/xml-V10-2e-errata">http://www.w3.org/XML/xml-V10-2e-errata</loc>.</p>
+<p>Please report errors in this document to <loc href="mailto:xml-editor@w3.org">xml-editor@w3.org</loc><phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E101">[E101]</loc>; <loc
+href="http://lists.w3.org/Archives/Public/xml-editor">archives</loc> are available</phrase>.</p>
+<note diff="add">
+<p>C. M. Sperberg-McQueen's affiliation has changed since the publication
+of the first edition. He is now at the World Wide Web Consortium, and can
+be contacted at <loc href="mailto:cmsmcq@w3.org">cmsmcq@w3.org</loc>.</p>
+</note>
+</status>
+<pubstmt>
+<p>Chicago, Vancouver, Mountain View, et al.: World-Wide Web Consortium, XML
+Working Group, 1996, 1997, 2000.</p>
+</pubstmt>
+<sourcedesc>
+<p>Created in electronic form.</p>
+</sourcedesc>
+<langusage>
+<language id="EN">English</language>
+<language id="ebnf">Extended Backus-Naur Form (formal grammar)</language>
+</langusage>
+<revisiondesc>
+<slist>
+<sitem>1997-12-03 : CMSMcQ : yet further changes</sitem>
+<sitem>1997-12-02 : TB : further changes (see TB to XML WG, 2 December 1997)</sitem>
+<sitem>1997-12-02 : CMSMcQ : deal with as many corrections and comments from
+the proofreaders as possible: entify hard-coded document date in pubdate element,
+change expansion of entity WebSGML, update status description as per Dan Connolly
+(am not sure about refernece to Berners-Lee et al.), add 'The' to abstract
+as per WG decision, move Relationship to Existing Standards to back matter
+and combine with References, re-order back matter so normative appendices
+come first, re-tag back matter so informative appendices are tagged informdiv1,
+remove XXX XXX from list of 'normative' specs in prose, move some references
+from Other References to Normative References, add RFC 1738, 1808, and 2141
+to Other References (they are not normative since we do not require the processor
+to enforce any rules based on them), add reference to 'Fielding draft' (Berners-Lee
+et al.), move notation section to end of body, drop URIchar non-terminal and
+use SkipLit instead, lose stray reference to defunct nonterminal 'markupdecls',
+move reference to Aho et al. into appendix (Tim's right), add prose note saying
+that hash marks and fragment identifiers are NOT part of the URI formally
+speaking, and are NOT legal in system identifiers (processor 'may' signal
+an error). Work through: Tim Bray reacting to James Clark, Tim Bray on his
+own, Eve Maler, NOT DONE YET: change binary / text to unparsed / parsed. handle
+James's suggestion about &lt; in attriubte values uppercase hex characters,
+namechar list, </sitem>
+<sitem>1997-12-01 : JB : add some column-width parameters</sitem>
+<sitem>1997-12-01 : CMSMcQ : begin round of changes to incorporate recent
+WG decisions and other corrections: binding sources of character encoding
+info (27 Aug / 3 Sept), correct wording of Faust quotation (restore dropped
+line), drop SDD from EncodingDecl, change text at version number 1.0, drop
+misleading (wrong!) sentence about ignorables and extenders, modify definition
+of PCData to make bar on msc grammatical, change grammar's handling of internal
+subset (drop non-terminal markupdecls), change definition of includeSect to
+allow conditional sections, add integral-declaration constraint on internal
+subset, drop misleading / dangerous sentence about relationship of entities
+with system storage objects, change table body tag to htbody as per EM change
+to DTD, add rule about space normalization in public identifiers, add description
+of how to generate our name-space rules from Unicode character database (needs
+further work!). </sitem>
+<sitem>1997-10-08 : TB : Removed %-constructs again, new rules for PE appearance.</sitem>
+<sitem>1997-10-01 : TB : Case-sensitive markup; cleaned up element-type defs,
+lotsa little edits for style</sitem>
+<sitem>1997-09-25 : TB : Change to elm's new DTD, with substantial detail
+cleanup as a side-effect</sitem>
+<sitem>1997-07-24 : CMSMcQ : correct error (lost *) in definition of ignoreSectContents
+(thanks to Makoto Murata)</sitem>
+<sitem>Allow all empty elements to have end-tags, consistent with SGML TC
+(as per JJC).</sitem>
+<sitem>1997-07-23 : CMSMcQ : pre-emptive strike on pending corrections: introduce
+the term 'empty-element tag', note that all empty elements may use it, and
+elements declared EMPTY must use it. Add WFC requiring encoding decl to come
+first in an entity. Redefine notations to point to PIs as well as binary entities.
+Change autodetection table by removing bytes 3 and 4 from examples with Byte
+Order Mark. Add content model as a term and clarify that it applies to both
+mixed and element content. </sitem>
+<sitem>1997-06-30 : CMSMcQ : change date, some cosmetic changes, changes to
+productions for choice, seq, Mixed, NotationType, Enumeration. Follow James
+Clark's suggestion and prohibit conditional sections in internal subset. TO
+DO: simplify production for ignored sections as a result, since we don't need
+to worry about parsers which don't expand PErefs finding a conditional section.</sitem>
+<sitem>1997-06-29 : TB : various edits</sitem>
+<sitem>1997-06-29 : CMSMcQ : further changes: Suppress old FINAL EDIT comments
+and some dead material. Revise occurrences of % in grammar to exploit Henry
+Thompson's pun, especially markupdecl and attdef. Remove RMD requirement relating
+to element content (?). </sitem>
+<sitem>1997-06-28 : CMSMcQ : Various changes for 1 July draft: Add text for
+draconian error handling (introduce the term Fatal Error). RE deleta est (changing
+wording from original announcement to restrict the requirement to validating
+parsers). Tag definition of validating processor and link to it. Add colon
+as name character. Change def of %operator. Change standard definitions of
+lt, gt, amp. Strip leading zeros from #x00nn forms.</sitem>
+<sitem>1997-04-02 : CMSMcQ : final corrections of editorial errors found in
+last night's proofreading. Reverse course once more on well-formed: Webster's
+Second hyphenates it, and that's enough for me.</sitem>
+<sitem>1997-04-01 : CMSMcQ : corrections from JJC, EM, HT, and self</sitem>
+<sitem>1997-03-31 : Tim Bray : many changes</sitem>
+<sitem>1997-03-29 : CMSMcQ : some Henry Thompson (on entity handling), some
+Charles Goldfarb, some ERB decisions (PE handling in miscellaneous declarations.
+Changed Ident element to accept def attribute. Allow normalization of Unicode
+characters. move def of systemliteral into section on literals.</sitem>
+<sitem>1997-03-28 : CMSMcQ : make as many corrections as possible, from Terry
+Allen, Norbert Mikula, James Clark, Jon Bosak, Henry Thompson, Paul Grosso,
+and self. Among other things: give in on "well formed" (Terry is right), tentatively
+rename QuotedCData as AttValue and Literal as EntityValue to be more informative,
+since attribute values are the <emph>only</emph> place QuotedCData was used,
+and vice versa for entity text and Literal. (I'd call it Entity Text, but
+8879 uses that name for both internal and external entities.)</sitem>
+<sitem>1997-03-26 : CMSMcQ : resynch the two forks of this draft, reapply
+my changes dated 03-20 and 03-21. Normalize old 'may not' to 'must not' except
+in the one case where it meant 'may or may not'.</sitem>
+<sitem>1997-03-21 : TB : massive changes on plane flight from Chicago to Vancouver</sitem>
+<sitem>1997-03-21 : CMSMcQ : correct as many reported errors as possible. </sitem>
+<sitem>1997-03-20 : CMSMcQ : correct typos listed in CMSMcQ hand copy of spec.</sitem>
+<sitem>1997-03-20 : CMSMcQ : cosmetic changes preparatory to revision for
+WWW conference April 1997: restore some of the internal entity references
+(e.g. to docdate, etc.), change character xA0 to &amp;nbsp; and define nbsp
+as &amp;#160;, and refill a lot of paragraphs for legibility.</sitem>
+<sitem>1996-11-12 : CMSMcQ : revise using Tim's edits: Add list type of NUMBERED
+and change most lists either to BULLETS or to NUMBERED. Suppress QuotedNames,
+Names (not used). Correct trivial-grammar doc type decl. Rename 'marked section'
+as 'CDATA section' passim. Also edits from James Clark: Define the set of
+characters from which [^abc] subtracts. Charref should use just [0-9] not
+Digit. Location info needs cleaner treatment: remove? (ERB question). One
+example of a PI has wrong pic. Clarify discussion of encoding names. Encoding
+failure should lead to unspecified results; don't prescribe error recovery.
+Don't require exposure of entity boundaries. Ignore white space in element
+content. Reserve entity names of the form u-NNNN. Clarify relative URLs. And
+some of my own: Correct productions for content model: model cannot consist
+of a name, so "elements ::= cp" is no good. </sitem>
+<sitem>1996-11-11 : CMSMcQ : revise for style. Add new rhs to entity declaration,
+for parameter entities.</sitem>
+<sitem>1996-11-10 : CMSMcQ : revise for style. Fix / complete section on names,
+characters. Add sections on parameter entities, conditional sections. Still
+to do: Add compatibility note on deterministic content models. Finish stylistic
+revision.</sitem>
+<sitem>1996-10-31 : TB : Add Entity Handling section</sitem>
+<sitem>1996-10-30 : TB : Clean up term &amp; termdef. Slip in ERB decision
+re EMPTY.</sitem>
+<sitem>1996-10-28 : TB : Change DTD. Implement some of Michael's suggestions.
+Change comments back to //. Introduce language for XML namespace reservation.
+Add section on white-space handling. Lots more cleanup.</sitem>
+<sitem>1996-10-24 : CMSMcQ : quick tweaks, implement some ERB decisions. Characters
+are not integers. Comments are /* */ not //. Add bibliographic refs to 10646,
+HyTime, Unicode. Rename old Cdata as MsData since it's <emph>only</emph> seen
+in marked sections. Call them attribute-value pairs not name-value pairs,
+except once. Internal subset is optional, needs '?'. Implied attributes should
+be signaled to the app, not have values supplied by processor.</sitem>
+<sitem>1996-10-16 : TB : track down &amp; excise all DSD references; introduce
+some EBNF for entity declarations.</sitem>
+<sitem>1996-10-?? : TB : consistency check, fix up scraps so they all parse,
+get formatter working, correct a few productions.</sitem>
+<sitem>1996-10-10/11 : CMSMcQ : various maintenance, stylistic, and organizational
+changes: Replace a few literals with xmlpio and pic entities, to make them
+consistent and ensure we can change pic reliably when the ERB votes. Drop
+paragraph on recognizers from notation section. Add match, exact match to
+terminology. Move old 2.2 XML Processors and Apps into intro. Mention comments,
+PIs, and marked sections in discussion of delimiter escaping. Streamline discussion
+of doctype decl syntax. Drop old section of 'PI syntax' for doctype decl,
+and add section on partial-DTD summary PIs to end of Logical Structures section.
+Revise DSD syntax section to use Tim's subset-in-a-PI mechanism.</sitem>
+<sitem>1996-10-10 : TB : eliminate name recognizers (and more?)</sitem>
+<sitem>1996-10-09 : CMSMcQ : revise for style, consistency through 2.3 (Characters)</sitem>
+<sitem>1996-10-09 : CMSMcQ : re-unite everything for convenience, at least
+temporarily, and revise quickly</sitem>
+<sitem>1996-10-08 : TB : first major homogenization pass</sitem>
+<sitem>1996-10-08 : TB : turn "current" attribute on div type into CDATA</sitem>
+<sitem>1996-10-02 : TB : remould into skeleton + entities</sitem>
+<sitem>1996-09-30 : CMSMcQ : add a few more sections prior to exchange with
+Tim.</sitem>
+<sitem>1996-09-20 : CMSMcQ : finish transcribing notes.</sitem>
+<sitem>1996-09-19 : CMSMcQ : begin transcribing notes for draft.</sitem>
+<sitem>1996-09-13 : CMSMcQ : made outline from notes of 09-06, do some housekeeping</sitem>
+</slist>
+</revisiondesc>
+</header>
+<body>
+<div1 id="sec-intro">
+<head>Introduction</head>
+<p>Extensible Markup Language, abbreviated XML, describes a class of data
+objects called <termref def="dt-xml-doc">XML documents</termref> and partially
+describes the behavior of computer programs which process them. XML is an
+application profile or restricted form of SGML, the Standard Generalized Markup
+Language <bibref ref="ISO8879"/>. By construction, XML documents are conforming
+SGML documents.</p>
+<p>XML documents are made up of storage units called <termref def="dt-entity">entities</termref>,
+which contain either parsed or unparsed data. Parsed data is made up of <termref
+def="dt-character">characters</termref>, some of which form <termref def="dt-chardata">character
+data</termref>, and some of which form <termref def="dt-markup">markup</termref>.
+Markup encodes a description of the document's storage layout and logical
+structure. XML provides a mechanism to impose constraints on the storage layout
+and logical structure.</p>
+<p><termdef id="dt-xml-proc" term="XML Processor">A software module called
+an <term>XML processor</term> is used to read XML documents and provide access
+to their content and structure.</termdef> <termdef id="dt-app" term="Application">It
+is assumed that an XML processor is doing its work on behalf of another module,
+called the <term>application</term>.</termdef> This specification describes
+the required behavior of an XML processor in terms of how it must read XML
+data and the information it must provide to the application.</p>
+<div2 id="sec-origin-goals">
+<head>Origin and Goals</head>
+<p>XML was developed by an XML Working Group (originally known as the SGML
+Editorial Review Board) formed under the auspices of the World Wide Web Consortium
+(W3C) in 1996. It was chaired by Jon Bosak of Sun Microsystems with the active
+participation of an XML Special Interest Group (previously known as the SGML
+Working Group) also organized by the W3C. The membership of the XML Working
+Group is given in an appendix. Dan Connolly served as the WG's contact with
+the W3C.</p>
+<p>The design goals for XML are:</p>
+<olist>
+<item><p>XML shall be straightforwardly usable over the Internet.</p></item>
+<item><p>XML shall support a wide variety of applications.</p></item>
+<item><p>XML shall be compatible with SGML.</p></item>
+<item><p>It shall be easy to write programs which process XML documents.</p>
+</item>
+<item><p>The number of optional features in XML is to be kept to the absolute
+minimum, ideally zero.</p></item>
+<item><p>XML documents should be human-legible and reasonably clear.</p></item>
+<item><p>The XML design should be prepared quickly.</p></item>
+<item><p>The design of XML shall be formal and concise.</p></item>
+<item><p>XML documents shall be easy to create.</p></item>
+<item><p>Terseness in XML markup is of minimal importance.</p></item>
+</olist>
+<p>This specification, together with associated standards (Unicode and ISO/IEC
+10646 for characters, Internet RFC 1766 for language identification tags,
+ISO 639 for language name codes, and ISO 3166 for country name codes), provides
+all the information necessary to understand XML Version &versionOfXML; and
+construct computer programs to process it.</p>
+<p>This version of the XML specification <!-- is for &doc.audience;.--> &doc.distribution;.</p>
+</div2>
+<div2 id="sec-terminology">
+<head>Terminology</head>
+<p>The terminology used to describe XML documents is defined in the body of
+this specification. The terms defined in the following list are used in building
+those definitions and in describing the actions of an XML processor: <glist>
+<gitem><label>may</label>
+<def>
+<p><termdef id="dt-may" term="May">Conforming documents and XML processors
+are permitted to but need not behave as described.</termdef></p>
+</def></gitem>
+<gitem><label>must</label>
+<def>
+<p><termdef id="dt-must" term="Must">Conforming documents and XML processors
+are required to behave as described; otherwise they are in error. <!-- do NOT change this! this is what defines a violation of
+a 'must' clause as 'an error'. -MSM --></termdef></p>
+</def></gitem>
+<gitem><label>error</label>
+<def>
+<p><termdef id="dt-error" term="Error">A violation of the rules of this specification;
+results are undefined. Conforming software may detect and report an error
+and may recover from it.</termdef></p>
+</def></gitem>
+<gitem><label>fatal error</label>
+<def>
+<p><termdef id="dt-fatal" term="Fatal Error">An error which a conforming <termref
+def="dt-xml-proc">XML processor</termref> must detect and report to the application.
+After encountering a fatal error, the processor may continue processing the
+data to search for further errors and may report such errors to the application.
+In order to support correction of errors, the processor may make unprocessed
+data from the document (with intermingled character data and markup) available
+to the application. Once a fatal error is detected, however, the processor
+must not continue normal processing (i.e., it must not continue to pass character
+data and information about the document's logical structure to the application
+in the normal way).</termdef></p>
+</def></gitem>
+<gitem><label>at user option</label>
+<def>
+<p><termdef id="dt-atuseroption" term="At user option">Conforming software
+may or must (depending on the modal verb in the sentence) behave as described;
+if it does, it must provide users a means to enable or disable the behavior
+described.</termdef></p>
+</def></gitem>
+<gitem><label>validity constraint</label>
+<def>
+<p><termdef id="dt-vc" term="Validity constraint">A rule which applies to
+all <termref def="dt-valid">valid</termref> XML documents. Violations of validity
+constraints are errors; they must, at user option, be reported by <termref
+def="dt-validating">validating XML processors</termref>.</termdef></p>
+</def></gitem>
+<gitem><label>well-formedness constraint</label>
+<def>
+<p><termdef id="dt-wfc" term="Well-formedness constraint">A rule which applies
+to all <termref def="dt-wellformed">well-formed</termref> XML documents. Violations
+of well-formedness constraints are <termref def="dt-fatal">fatal errors</termref>.</termdef></p>
+</def></gitem>
+<gitem><label>match</label>
+<def>
+<p><termdef id="dt-match" term="match">(Of strings or names:) Two strings
+or names being compared must be identical. Characters with multiple possible
+representations in ISO/IEC 10646 (e.g. characters with both precomposed and
+base+diacritic forms) match only if they have the same representation in both
+strings. <phrase diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E85">[E85]</loc>At
+user option, processors may normalize such characters to some canonical form. </phrase>No
+case folding is performed. (Of strings and rules in the grammar:) A string
+matches a grammatical production if it belongs to the language generated by
+that production. (Of content and content models:) An element matches its declaration
+when it conforms in the fashion described in the constraint <specref ref="elementvalid"/>.</termdef></p>
+</def></gitem>
+<gitem><label>for compatibility</label>
+<def>
+<p><termdef id="dt-compat" term="For Compatibility"><phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E87">[E87]</loc>Marks
+a sentence describing</phrase> a feature of XML included solely to ensure
+that XML remains compatible with SGML.</termdef></p>
+</def></gitem>
+<gitem><label>for interoperability</label>
+<def>
+<p><termdef id="dt-interop" term="For interoperability"><phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E87">[E87]</loc>Marks
+a sentence describing</phrase> a non-binding recommendation included to increase
+the chances that XML documents can be processed by the existing installed
+base of SGML processors which predate the &WebSGML;.</termdef></p>
+</def></gitem>
+</glist></p>
+</div2>
+</div1>
+<!-- &Docs; -->
+<div1 id="sec-documents">
+<head>Documents</head>
+<p><termdef id="dt-xml-doc" term="XML Document"> A data object is an <term>XML
+document</term> if it is <termref def="dt-wellformed">well-formed</termref>,
+as defined in this specification. A well-formed XML document may in addition
+be <termref def="dt-valid">valid</termref> if it meets certain further constraints.</termdef></p>
+<p>Each XML document has both a logical and a physical structure. Physically,
+the document is composed of units called <termref def="dt-entity">entities</termref>.
+An entity may <termref def="dt-entref">refer</termref> to other entities to
+cause their inclusion in the document. A document begins in a <quote>root</quote>
+or <termref def="dt-docent">document entity</termref>. Logically, the document
+is composed of declarations, elements, comments, character references, and
+processing instructions, all of which are indicated in the document by explicit
+markup. The logical and physical structures must nest properly, as described
+in <specref ref="wf-entities"/>.</p>
+<div2 id="sec-well-formed">
+<head>Well-Formed XML Documents</head>
+<p><termdef id="dt-wellformed" term="Well-Formed"> A textual object is a <term>well-formed</term>
+XML document if:</termdef></p>
+<olist>
+<item><p>Taken as a whole, it matches the production labeled <nt def="NT-document">document</nt>.</p>
+</item>
+<item><p>It meets all the well-formedness constraints given in this specification.</p>
+</item>
+<item><p>Each of the <termref def="dt-parsedent">parsed entities</termref>
+which is referenced directly or indirectly within the document is <termref
+def="dt-wellformed">well-formed</termref>.</p></item>
+</olist>
+<scrap id="document" lang="ebnf">
+<head>Document</head>
+<prod id="NT-document">
+<lhs>document</lhs><rhs><nt def="NT-prolog">prolog</nt> <nt def="NT-element">element</nt> <nt
+def="NT-Misc">Misc</nt>*</rhs>
+</prod>
+</scrap>
+<p>Matching the <nt def="NT-document">document</nt> production implies that:</p>
+<olist>
+<item><p>It contains one or more <termref def="dt-element">elements</termref>.</p>
+</item>
+<!--* N.B. some readers (notably JC) find the following
+paragraph awkward and redundant. I agree it's logically redundant:
+it *says* it is summarizing the logical implications of
+matching the grammar, and that means by definition it's
+logically redundant. I don't think it's rhetorically
+redundant or unnecessary, though, so I'm keeping it. It
+could however use some recasting when the editors are feeling
+stronger. -MSM *-->
+<item><p><termdef id="dt-root" term="Root Element">There is exactly one element,
+called the <term>root</term>, or document element, no part of which appears
+in the <termref def="dt-content">content</termref> of any other element.</termdef> <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E17">[E17]</loc>For
+all other elements, if the <termref def="dt-stag">start-tag</termref> is in
+the content of another element, the <termref def="dt-etag">end-tag</termref>
+is in the content of the same element.</phrase> More simply stated, the elements,
+delimited by start- and end-tags, nest properly within each other.</p></item>
+</olist>
+<p><termdef id="dt-parentchild" term="Parent/Child">As a consequence of this,
+for each non-root element <el>C</el> in the document, there is one other element <el>P</el>
+in the document such that <el>C</el> is in the content of <el>P</el>, but
+is not in the content of any other element that is in the content of <el>P</el>. <el>P</el>
+is referred to as the <term>parent</term> of <el>C</el>, and <el>C</el> as
+a <term>child</term> of <el>P</el>.</termdef></p>
+</div2>
+<div2 id="charsets">
+<head>Characters</head>
+<p><termdef id="dt-text" term="Text">A parsed entity contains <term>text</term>,
+a sequence of <termref def="dt-character">characters</termref>, which may
+represent markup or character data.</termdef> <termdef id="dt-character" term="Character">A <term>character</term>
+is an atomic unit of text as specified by ISO/IEC 10646 <bibref ref="ISO10646"/> <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>(see
+also <bibref ref="ISO10646-2000"/>)</phrase>. Legal characters are tab, carriage
+return, line feed, and the legal <phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E35">[E35]</loc>graphic </phrase>characters
+of Unicode and ISO/IEC 10646. <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E69">[E69]</loc>The
+versions of these standards cited in <specref ref="sec-existing-stds"/> were
+current at the time this document was prepared. New characters may be added
+to these standards by amendments or new editions. Consequently, XML processors
+must accept any character in the range specified for <nt def="NT-Char">Char</nt>.</phrase>
+The use of <quote>compatibility characters</quote>, as defined in section
+6.8 of <bibref ref="Unicode"/> <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>(see
+also D21 in section 3.6 of <bibref ref="Unicode3"/>)</phrase>, is discouraged.</termdef></p>
+<scrap id="char32" lang="ebnf">
+<head>Character Range</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-Char">
+<lhs>Char</lhs><rhs>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]</rhs>
+<com>any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.</com>
+</prod>
+</prodgroup></scrap>
+<p>The mechanism for encoding character code points into bit patterns may
+vary from entity to entity. All XML processors must accept the UTF-8 and UTF-16
+encodings of 10646; the mechanisms for signaling which of the two is in use,
+or for bringing other encodings into play, are discussed later, in <specref
+ref="charencoding"/>.</p>
+<!--
+<p>Regardless of the specific encoding used, any character in
+the ISO/IEC 10646 character set may be referred to by the decimal
+or hexadecimal equivalent of its UCS-4 code value.
+</p>-->
+</div2>
+<div2 id="sec-common-syn">
+<head>Common Syntactic Constructs</head>
+<p>This section defines some symbols used widely in the grammar.</p>
+<p><nt def="NT-S">S</nt> (white space) consists of one or more space (#x20)
+characters, carriage returns, line feeds, or tabs.</p>
+<scrap id="white" lang="ebnf">
+<head>White Space</head>
+<prodgroup pcw2="4" pcw4="17.5" pcw5="11">
+<prod id="NT-S">
+<lhs>S</lhs><rhs>(#x20 | #x9 | #xD | #xA)+</rhs>
+</prod>
+</prodgroup></scrap>
+<p>Characters are classified for convenience as letters, digits, or other
+characters. <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E30">[E30]</loc>A
+letter consists of an alphabetic or syllabic base character or an ideographic
+character.</phrase> Full definitions of the specific characters in each class
+are given in <specref ref="CharClasses"/>.</p>
+<p><termdef id="dt-name" term="Name">A <term>Name</term> is a token beginning
+with a letter or one of a few punctuation characters, and continuing with
+letters, digits, hyphens, underscores, colons, or full stops, together known
+as name characters.</termdef> Names beginning with the string <quote><code>xml</code></quote>,
+or any string which would match <code>(('X'|'x') ('M'|'m') ('L'|'l'))</code>,
+are reserved for standardization in this or future versions of this specification.</p>
+<note>
+<p diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E98">[E98]</loc>The
+Namespaces in XML Recommendation <bibref ref="xml-names"/> assigns a meaning
+to names containing colon characters. Therefore, authors should not use the
+colon in XML names except for namespace purposes, but XML processors must
+accept the colon as a name character.</p>
+</note>
+<p>An <nt def="NT-Nmtoken">Nmtoken</nt> (name token) is any mixture of name
+characters.</p>
+<scrap lang="ebnf">
+<head>Names and Tokens</head>
+<prod id="NT-NameChar">
+<lhs>NameChar</lhs><rhs><nt def="NT-Letter">Letter</nt> | <nt def="NT-Digit">Digit</nt>
+| '.' | '-' | '_' | ':' | <nt def="NT-CombiningChar">CombiningChar</nt> | <nt
+def="NT-Extender">Extender</nt></rhs>
+</prod>
+<prod id="NT-Name">
+<lhs>Name</lhs><rhs>(<nt def="NT-Letter">Letter</nt> | '_' | ':') (<nt def="NT-NameChar">NameChar</nt>)*</rhs>
+</prod>
+<prod id="NT-Names">
+<lhs>Names</lhs><rhs><nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt
+def="NT-Name">Name</nt>)*</rhs>
+</prod>
+<prod id="NT-Nmtoken">
+<lhs>Nmtoken</lhs><rhs>(<nt def="NT-NameChar">NameChar</nt>)+</rhs>
+</prod>
+<prod id="NT-Nmtokens">
+<lhs>Nmtokens</lhs><rhs><nt def="NT-Nmtoken">Nmtoken</nt> (<nt def="NT-S">S</nt> <nt
+def="NT-Nmtoken">Nmtoken</nt>)*</rhs>
+</prod>
+</scrap>
+<p>Literal data is any quoted string not containing the quotation mark used
+as a delimiter for that string. Literals are used for specifying the content
+of internal entities (<nt def="NT-EntityValue">EntityValue</nt>), the values
+of attributes (<nt def="NT-AttValue">AttValue</nt>), and external identifiers
+(<nt def="NT-SystemLiteral">SystemLiteral</nt>). Note that a <nt def="NT-SystemLiteral">SystemLiteral</nt>
+can be parsed without scanning for markup.</p>
+<scrap lang="ebnf">
+<head>Literals</head>
+<prod id="NT-EntityValue">
+<lhs>EntityValue</lhs><rhs>'"' ([^%&amp;"] | <nt def="NT-PEReference">PEReference</nt>
+| <nt def="NT-Reference">Reference</nt>)* '"' </rhs>
+<rhs>|&nbsp; "'" ([^%&amp;'] | <nt def="NT-PEReference">PEReference</nt> | <nt
+def="NT-Reference">Reference</nt>)* "'"</rhs>
+</prod>
+<prod id="NT-AttValue">
+<lhs>AttValue</lhs><rhs>'"' ([^&lt;&amp;"] | <nt def="NT-Reference">Reference</nt>)*
+'"' </rhs>
+<rhs>|&nbsp; "'" ([^&lt;&amp;'] | <nt def="NT-Reference">Reference</nt>)*
+"'"</rhs>
+</prod>
+<prod id="NT-SystemLiteral">
+<lhs>SystemLiteral</lhs><rhs>('"' [^"]* '"') |&nbsp;("'" [^']* "'") </rhs>
+</prod>
+<prod id="NT-PubidLiteral">
+<lhs>PubidLiteral</lhs><rhs>'"' <nt def="NT-PubidChar">PubidChar</nt>* '"'
+| "'" (<nt def="NT-PubidChar">PubidChar</nt> - "'")* "'"</rhs>
+</prod>
+<prod id="NT-PubidChar">
+<lhs>PubidChar</lhs><rhs>#x20 | #xD | #xA |&nbsp;[a-zA-Z0-9] |&nbsp;[-'()+,./:=?;!*#@$_%]</rhs>
+</prod>
+</scrap>
+<note diff="add">
+<p><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E72">[E72]</loc>Although
+the <nt def="NT-EntityValue">EntityValue</nt> production allows the definition
+of an entity consisting of a single explicit <code>&lt;</code> in the literal
+(e.g., <code>&lt;!ENTITY mylt "&lt;"></code>), it is strongly advised to avoid
+this practice since any reference to that entity will cause a well-formedness
+error.</p>
+</note>
+</div2>
+<div2 id="syntax">
+<head>Character Data and Markup</head>
+<p><termref def="dt-text">Text</termref> consists of intermingled <termref
+def="dt-chardata">character data</termref> and markup. <termdef id="dt-markup"
+term="Markup"><term>Markup</term> takes the form of <termref def="dt-stag">start-tags</termref>, <termref
+def="dt-etag">end-tags</termref>, <termref def="dt-empty">empty-element tags</termref>, <termref
+def="dt-entref">entity references</termref>, <termref def="dt-charref">character
+references</termref>, <termref def="dt-comment">comments</termref>, <termref
+def="dt-cdsection">CDATA section</termref> delimiters, <termref def="dt-doctype">document
+type declarations</termref>, <termref def="dt-pi">processing instructions</termref>, <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E89">[E89]</loc><nt
+def="NT-XMLDecl">XML declarations</nt>, <nt def="NT-TextDecl">text declarations</nt>,
+and any white space that is at the top level of the document entity (that
+is, outside the document element and not inside any other markup).</phrase></termdef></p>
+<p><termdef id="dt-chardata" term="Character Data">All text that is not markup
+constitutes the <term>character data</term> of the document.</termdef></p>
+<p>The ampersand character (&amp;) and the left angle bracket (&lt;) may appear
+in their literal form <emph>only</emph> when used as markup delimiters, or
+within a <termref def="dt-comment">comment</termref>, a <termref def="dt-pi">processing
+instruction</termref>, or a <termref def="dt-cdsection">CDATA section</termref>.<phrase
+diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E18">[E18]</loc>They
+are also legal within the <termref def="dt-litentval">literal entity value</termref>
+of an internal entity declaration; see <specref ref="wf-entities"/>.</phrase> <!-- FINAL EDIT: restore internal entity decl or leave it out. -->
+If they are needed elsewhere, they must be <termref def="dt-escape">escaped</termref>
+using either <termref def="dt-charref">numeric character references</termref>
+or the strings <quote><code>&amp;amp;</code></quote> and <quote><code>&amp;lt;</code></quote>
+respectively. The right angle bracket (>) may be represented using the string <quote><code>&amp;gt;</code></quote>,
+and must, <termref def="dt-compat">for compatibility</termref>, be escaped
+using <quote><code>&amp;gt;</code></quote> or a character reference when it
+appears in the string <quote><code>]]&gt;</code></quote> in content, when
+that string is not marking the end of a <termref def="dt-cdsection">CDATA
+section</termref>.</p>
+<p>In the content of elements, character data is any string of characters
+which does not contain the start-delimiter of any markup. In a CDATA section,
+character data is any string of characters not including the CDATA-section-close
+delimiter, <quote><code>]]&gt;</code></quote>.</p>
+<p>To allow attribute values to contain both single and double quotes, the
+apostrophe or single-quote character (') may be represented as <quote><code>&amp;apos;</code></quote>,
+and the double-quote character (") as <quote><code>&amp;quot;</code></quote>.</p>
+<scrap lang="ebnf">
+<head>Character Data</head>
+<prod id="NT-CharData">
+<lhs>CharData</lhs><rhs>[^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)</rhs>
+</prod>
+</scrap>
+</div2>
+<div2 id="sec-comments">
+<head>Comments</head>
+<p><termdef id="dt-comment" term="Comment"><term>Comments</term> may appear
+anywhere in a document outside other <termref def="dt-markup">markup</termref>;
+in addition, they may appear within the document type declaration at places
+allowed by the grammar. They are not part of the document's <termref def="dt-chardata">character
+data</termref>; an XML processor may, but need not, make it possible for an
+application to retrieve the text of comments. <termref def="dt-compat">For
+compatibility</termref>, the string <quote><code>--</code></quote> (double-hyphen)
+must not occur within comments.</termdef> <phrase diff="add"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E63">[E63]</loc>Parameter
+entity references are not recognized within comments.</phrase></p>
+<scrap lang="ebnf">
+<head>Comments</head>
+<prod id="NT-Comment">
+<lhs>Comment</lhs><rhs>'&lt;!--' ((<nt def="NT-Char">Char</nt> - '-') | ('-'
+(<nt def="NT-Char">Char</nt> - '-')))* '-->'</rhs>
+</prod>
+</scrap>
+<p>An example of a comment:</p>
+<eg>&lt;!&como; declarations for &lt;head> &amp; &lt;body> &comc;></eg>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E27">[E27]</loc>Note
+that the grammar does not allow a comment ending in <code>---></code>. The
+following example is <emph>not</emph> well-formed.</p>
+<eg diff="add">&lt;!-- B+, B, or B---></eg>
+</div2>
+<div2 id="sec-pi">
+<head>Processing Instructions</head>
+<p><termdef id="dt-pi" term="Processing instruction"><term>Processing instructions</term>
+(PIs) allow documents to contain instructions for applications.</termdef></p>
+<scrap lang="ebnf">
+<head>Processing Instructions</head>
+<prod id="NT-PI">
+<lhs>PI</lhs><rhs>'&lt;?' <nt def="NT-PITarget">PITarget</nt> (<nt def="NT-S">S</nt>
+(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>* &pic; <nt def="NT-Char">Char</nt>*)))? &pic;</rhs>
+</prod>
+<prod id="NT-PITarget">
+<lhs>PITarget</lhs><rhs><nt def="NT-Name">Name</nt> - (('X' | 'x') ('M' |
+'m') ('L' | 'l'))</rhs>
+</prod>
+</scrap>
+<p>PIs are not part of the document's <termref def="dt-chardata">character
+data</termref>, but must be passed through to the application. The PI begins
+with a target (<nt def="NT-PITarget">PITarget</nt>) used to identify the application
+to which the instruction is directed. The target names <quote><code>XML</code></quote>, <quote><code>xml</code></quote>,
+and so on are reserved for standardization in this or future versions of this
+specification. The XML <termref def="dt-notation">Notation</termref> mechanism
+may be used for formal declaration of PI targets. <phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E63">[E63]</loc>Parameter
+entity references are not recognized within processing instructions.</phrase></p>
+</div2>
+<div2 id="sec-cdata-sect">
+<head>CDATA Sections</head>
+<p><termdef id="dt-cdsection" term="CDATA Section"><term>CDATA sections</term>
+may occur anywhere character data may occur; they are used to escape blocks
+of text containing characters which would otherwise be recognized as markup.
+CDATA sections begin with the string <quote><code>&lt;![CDATA[</code></quote>
+and end with the string <quote><code>]]&gt;</code></quote>:</termdef></p>
+<scrap lang="ebnf">
+<head>CDATA Sections</head>
+<prod id="NT-CDSect">
+<lhs>CDSect</lhs><rhs><nt def="NT-CDStart">CDStart</nt> <nt def="NT-CData">CData</nt> <nt
+def="NT-CDEnd">CDEnd</nt></rhs>
+</prod>
+<prod id="NT-CDStart">
+<lhs>CDStart</lhs><rhs>'&lt;![CDATA['</rhs>
+</prod>
+<prod id="NT-CData">
+<lhs>CData</lhs><rhs>(<nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>*
+']]&gt;' <nt def="NT-Char">Char</nt>*)) </rhs>
+</prod>
+<prod id="NT-CDEnd">
+<lhs>CDEnd</lhs><rhs>']]&gt;'</rhs>
+</prod>
+</scrap>
+<p>Within a CDATA section, only the <nt def="NT-CDEnd">CDEnd</nt> string is
+recognized as markup, so that left angle brackets and ampersands may occur
+in their literal form; they need not (and cannot) be escaped using <quote><code>&amp;lt;</code></quote>
+and <quote><code>&amp;amp;</code></quote>. CDATA sections cannot nest.</p>
+<p>An example of a CDATA section, in which <quote><code>&lt;greeting></code></quote>
+and <quote><code>&lt;/greeting></code></quote> are recognized as <termref
+def="dt-chardata">character data</termref>, not <termref def="dt-markup">markup</termref>:</p>
+<eg>&lt;![CDATA[&lt;greeting>Hello, world!&lt;/greeting>]]&gt; </eg>
+</div2>
+<div2 id="sec-prolog-dtd">
+<head>Prolog and Document Type Declaration</head>
+<p><termdef id="dt-xmldecl" term="XML Declaration">XML documents <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E107">[E107]</loc>should</phrase>
+begin with an <term>XML declaration</term> which specifies the version of
+XML being used.</termdef> For example, the following is a complete XML document, <termref
+def="dt-wellformed">well-formed</termref> but not <termref def="dt-valid">valid</termref>:</p>
+<eg><![CDATA[<?xml version="1.0"?> <greeting>Hello, world!</greeting> ]]></eg>
+<p>and so is this:</p>
+<eg><![CDATA[<greeting>Hello, world!</greeting>]]></eg>
+<p>The version number <quote><code>1.0</code></quote> should be used to indicate
+conformance to this version of this specification; it is an error for a document
+to use the value <quote><code>1.0</code></quote> if it does not conform to
+this version of this specification. It is the intent of the XML working group
+to give later versions of this specification numbers other than <quote><code>1.0</code></quote>,
+but this intent does not indicate a commitment to produce any future versions
+of XML, nor if any are produced, to use any particular numbering scheme. Since
+future versions are not ruled out, this construct is provided as a means to
+allow the possibility of automatic version recognition, should it become necessary.
+Processors may signal an error if they receive documents labeled with versions
+they do not support.</p>
+<p>The function of the markup in an XML document is to describe its storage
+and logical structure and to associate attribute-value pairs with its logical
+structures. XML provides a mechanism, the <termref def="dt-doctype">document
+type declaration</termref>, to define constraints on the logical structure
+and to support the use of predefined storage units. <termdef id="dt-valid"
+term="Validity">An XML document is <term>valid</term> if it has an associated
+document type declaration and if the document complies with the constraints
+expressed in it.</termdef></p>
+<p>The document type declaration must appear before the first <termref def="dt-element">element</termref>
+in the document.</p>
+<scrap id="xmldoc" lang="ebnf">
+<head>Prolog</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-prolog">
+<lhs>prolog</lhs><rhs><nt def="NT-XMLDecl">XMLDecl</nt>? <nt def="NT-Misc">Misc</nt>*
+(<nt def="NT-doctypedecl">doctypedecl</nt> <nt def="NT-Misc">Misc</nt>*)?</rhs>
+</prod>
+<prod id="NT-XMLDecl">
+<lhs>XMLDecl</lhs><rhs>&pio; <nt def="NT-VersionInfo">VersionInfo</nt> <nt
+def="NT-EncodingDecl">EncodingDecl</nt>? <nt def="NT-SDDecl">SDDecl</nt>? <nt
+def="NT-S">S</nt>? &pic;</rhs>
+</prod>
+<prod id="NT-VersionInfo" diff="chg">
+<lhs>VersionInfo</lhs><rhs><nt def="NT-S">S</nt> 'version' <nt def="NT-Eq">Eq</nt>
+("'" <nt def="NT-VersionNum">VersionNum</nt> "'" | '"' <nt def="NT-VersionNum">VersionNum</nt>
+'"')<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E15">[E15]</loc></com></rhs>
+</prod>
+<prod id="NT-Eq">
+<lhs>Eq</lhs><rhs><nt def="NT-S">S</nt>? '=' <nt def="NT-S">S</nt>?</rhs>
+</prod>
+<prod id="NT-VersionNum">
+<lhs>VersionNum</lhs><rhs>([a-zA-Z0-9_.:] | '-')+</rhs>
+</prod>
+<prod id="NT-Misc">
+<lhs>Misc</lhs><rhs><nt def="NT-Comment">Comment</nt> | <nt def="NT-PI">PI</nt>
+| <nt def="NT-S">S</nt></rhs>
+</prod>
+</prodgroup></scrap>
+<p><termdef id="dt-doctype" term="Document Type Declaration">The XML <term>document
+type declaration</term> contains or points to <termref def="dt-markupdecl">markup
+declarations</termref> that provide a grammar for a class of documents. This
+grammar is known as a document type definition, or <term>DTD</term>. The document
+type declaration can point to an external subset (a special kind of <termref
+def="dt-extent">external entity</termref>) containing markup declarations,
+or can contain the markup declarations directly in an internal subset, or
+can do both. The DTD for a document consists of both subsets taken together.</termdef></p>
+<p><termdef id="dt-markupdecl" term="markup declaration"> A <term>markup declaration</term>
+is an <termref def="dt-eldecl">element type declaration</termref>, an <termref
+def="dt-attdecl">attribute-list declaration</termref>, an <termref def="dt-entdecl">entity
+declaration</termref>, or a <termref def="dt-notdecl">notation declaration</termref>.</termdef>
+These declarations may be contained in whole or in part within <termref def="dt-PE">parameter
+entities</termref>, as described in the well-formedness and validity constraints
+below. For <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E14">[E14]</loc>further</phrase>
+information, see <specref ref="sec-physical-struct"/>.</p>
+<scrap id="dtd" lang="ebnf">
+<head>Document Type Definition</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-doctypedecl" diff="chg">
+<lhs>doctypedecl</lhs><rhs>'&lt;!DOCTYPE' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt>
+(<nt def="NT-S">S</nt> <nt def="NT-ExternalID">ExternalID</nt>)? <nt def="NT-S">S</nt>?
+('[' (<nt def="NT-markupdecl">markupdecl</nt> | <nt diff="chg" def="NT-DeclSep">DeclSep</nt>)*
+']' <nt def="NT-S">S</nt>?)? '>'</rhs><vc def="vc-roottype"/><wfc def="ExtSubset"
+diff="add"/><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc></com>
+</prod>
+<prod id="NT-DeclSep" diff="add">
+<lhs>DeclSep</lhs><rhs><nt def="NT-PEReference">PEReference</nt> | <nt def="NT-S">S</nt></rhs>
+<wfc def="PE-between-Decls" diff="add"/><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc></com>
+</prod>
+<prod id="NT-markupdecl">
+<lhs>markupdecl</lhs><rhs><nt def="NT-elementdecl">elementdecl</nt> | <nt
+def="NT-AttlistDecl">AttlistDecl</nt> | <nt def="NT-EntityDecl">EntityDecl</nt>
+| <nt def="NT-NotationDecl">NotationDecl</nt> | <nt def="NT-PI">PI</nt> | <nt
+def="NT-Comment">Comment</nt> </rhs><vc def="vc-PEinMarkupDecl"/><wfc def="wfc-PEinInternalSubset"/>
+</prod>
+</prodgroup></scrap>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E82">[E82]</loc>Note
+that it is possible to construct a well-formed document containing a <nt def="NT-doctypedecl">doctypedecl</nt>
+that neither points to an external subset nor contains an internal subset.</p>
+<p>The markup declarations may be made up in whole or in part of the <termref
+def="dt-repltext">replacement text</termref> of <termref def="dt-PE">parameter
+entities</termref>. The productions later in this specification for individual
+nonterminals (<nt def="NT-elementdecl">elementdecl</nt>, <nt def="NT-AttlistDecl">AttlistDecl</nt>,
+and so on) describe the declarations <emph>after</emph> all the parameter
+entities have been <termref def="dt-include">included</termref>.</p>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E75">[E75]</loc>Parameter
+entity references are recognized anywhere in the DTD (internal and external
+subsets and external parameter entities), except in literals, processing instructions,
+comments, and the contents of ignored conditional sections (see <specref ref="sec-condition-sect"/>).
+They are also recognized in entity value literals. The use of parameter entities
+in the internal subset is restricted as described below.</p>
+<vcnote id="vc-roottype"><head>Root Element Type</head><p>The <nt def="NT-Name">Name</nt>
+in the document type declaration must match the element type of the <termref
+def="dt-root">root element</termref>.</p>
+</vcnote>
+<vcnote id="vc-PEinMarkupDecl"><head>Proper Declaration/PE Nesting</head>
+<p>Parameter-entity <termref def="dt-repltext">replacement text</termref>
+must be properly nested with markup declarations. That is to say, if either
+the first character or the last character of a markup declaration (<nt def="NT-markupdecl">markupdecl</nt>
+above) is contained in the replacement text for a <termref def="dt-PERef">parameter-entity
+reference</termref>, both must be contained in the same replacement text.</p>
+</vcnote>
+<wfcnote id="wfc-PEinInternalSubset"><head>PEs in Internal Subset</head><p>In
+the internal DTD subset, <termref def="dt-PERef">parameter-entity references</termref>
+can occur only where markup declarations can occur, not within markup declarations.
+(This does not apply to references that occur in external parameter entities
+or to the external subset.)</p>
+</wfcnote>
+<wfcnote id="ExtSubset" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc>External
+Subset</head><p>The external subset, if any, must match the production for <nt
+def="NT-extSubset">extSubset</nt>.</p>
+</wfcnote>
+<wfcnote id="PE-between-Decls" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc>PE
+Between Declarations</head><p>The replacement text of a parameter entity reference
+in a <nt def="NT-DeclSep">DeclSep</nt> must match the production <nt def="NT-extSubsetDecl">extSubsetDecl</nt>.</p>
+</wfcnote>
+<p>Like the internal subset, the external subset and any external parameter
+entities <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc>referenced
+in a <nt def="NT-DeclSep">DeclSep</nt></phrase> must consist of a series of
+complete markup declarations of the types allowed by the non-terminal symbol <nt
+def="NT-markupdecl">markupdecl</nt>, interspersed with white space or <termref
+def="dt-PERef">parameter-entity references</termref>. However, portions of
+the contents of the external subset or of <phrase diff="add"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc>these </phrase>
+external parameter entities may conditionally be ignored by using the <termref
+def="dt-cond-section">conditional section</termref> construct; this is not
+allowed in the internal subset.</p>
+<scrap id="ext-Subset">
+<head>External Subset</head>
+<prodgroup pcw2="6" pcw4="17.5" pcw5="9">
+<prod id="NT-extSubset">
+<lhs>extSubset</lhs><rhs><nt def="NT-TextDecl">TextDecl</nt>? <nt def="NT-extSubsetDecl">extSubsetDecl</nt></rhs>
+</prod>
+<prod id="NT-extSubsetDecl" diff="chg">
+<lhs>extSubsetDecl</lhs><rhs>( <nt def="NT-markupdecl">markupdecl</nt> | <nt
+def="NT-conditionalSect">conditionalSect</nt> | <nt diff="chg" def="NT-DeclSep">DeclSep</nt>)*</rhs>
+<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc></com>
+</prod>
+</prodgroup></scrap>
+<p>The external subset and external parameter entities also differ from the
+internal subset in that in them, <termref def="dt-PERef">parameter-entity
+references</termref> are permitted <emph>within</emph> markup declarations,
+not only <emph>between</emph> markup declarations.</p>
+<p>An example of an XML document with a document type declaration:</p>
+<eg><![CDATA[<?xml version="1.0"?> <!DOCTYPE greeting SYSTEM "hello.dtd"> <greeting>Hello, world!</greeting> ]]></eg>
+<p>The <termref def="dt-sysid">system identifier</termref> <quote><code>hello.dtd</code></quote>
+gives the <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E78">[E78]</loc>address
+(a URI reference)</phrase> of a DTD for the document.</p>
+<p>The declarations can also be given locally, as in this example:</p>
+<eg><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE greeting [
+ <!ELEMENT greeting (#PCDATA)>
+]>
+<greeting>Hello, world!</greeting>]]></eg>
+<p>If both the external and internal subsets are used, the internal subset
+is considered to occur before the external subset. <!-- 'is considered to'? boo. whazzat mean? -->
+This has the effect that entity and attribute-list declarations in the internal
+subset take precedence over those in the external subset.</p>
+</div2>
+<div2 id="sec-rmd">
+<head>Standalone Document Declaration</head>
+<p>Markup declarations can affect the content of the document, as passed from
+an <termref def="dt-xml-proc">XML processor</termref> to an application; examples
+are attribute defaults and entity declarations. The standalone document declaration,
+which may appear as a component of the XML declaration, signals whether or
+not there are such declarations which appear external to the <termref def="dt-docent">document
+entity</termref><phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E64">[E64]</loc>
+or in parameter entities. <termdef id="dt-extmkpdecl" term="External Markup Declaration">An <term>external
+markup declaration</term> is defined as a markup declaration occurring in
+the external subset or in a parameter entity (external or internal, the latter
+being included because non-validating processors are not required to read
+them).</termdef></phrase></p>
+<scrap id="fulldtd" lang="ebnf">
+<head>Standalone Document Declaration</head>
+<prodgroup pcw2="4" pcw4="19.5" pcw5="9">
+<prod id="NT-SDDecl">
+<lhs>SDDecl</lhs><rhs> <nt def="NT-S">S</nt> 'standalone' <nt def="NT-Eq">Eq</nt>
+(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) </rhs><vc def="vc-check-rmd"/>
+</prod>
+</prodgroup></scrap>
+<p>In a standalone document declaration, the value <attval>yes</attval> indicates
+that there are no <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E64">[E64]</loc><termref
+def="dt-extmkpdecl">external markup declarations</termref></phrase> which
+affect the information passed from the XML processor to the application. The
+value <attval>no</attval> indicates that there are or may be such external
+markup declarations. Note that the standalone document declaration only denotes
+the presence of external <emph>declarations</emph>; the presence, in a document,
+of references to external <emph>entities</emph>, when those entities are internally
+declared, does not change its standalone status.</p>
+<p>If there are no external markup declarations, the standalone document declaration
+has no meaning. If there are external markup declarations but there is no
+standalone document declaration, the value <attval>no</attval> is assumed.</p>
+<p>Any XML document for which <code>standalone="no"</code> holds can be converted
+algorithmically to a standalone document, which may be desirable for some
+network delivery applications.</p>
+<vcnote id="vc-check-rmd"><head>Standalone Document Declaration</head><p>The
+standalone document declaration must have the value <attval>no</attval> if
+any external markup declarations contain declarations of:</p>
+<ulist>
+<item><p>attributes with <termref def="dt-default">default</termref> values,
+if elements to which these attributes apply appear in the document without
+specifications of values for these attributes, or</p></item>
+<item><p>entities (other than &magicents;), if <termref def="dt-entref">references</termref>
+to those entities appear in the document, or</p></item>
+<item><p>attributes with values subject to <titleref href="#AVNormalize">normalization</titleref>,
+where the attribute appears in the document with a value which will change
+as a result of normalization, or</p></item>
+<item><p>element types with <termref def="dt-elemcontent">element content</termref>,
+if white space occurs directly within any instance of those types.</p></item>
+</ulist>
+</vcnote>
+<p>An example XML declaration with a standalone document declaration:</p>
+<eg>&lt;?xml version="&versionOfXML;" standalone='yes'?></eg>
+</div2>
+<div2 id="sec-white-space">
+<head>White Space Handling</head>
+<p>In editing XML documents, it is often convenient to use <quote>white space</quote>
+(spaces, tabs, and blank lines<phrase diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E39">[E39]</loc>,
+denoted by the nonterminal <nt def="NT-S">S</nt> in this specification</phrase>)
+to set apart the markup for greater readability. Such white space is typically
+not intended for inclusion in the delivered version of the document. On the
+other hand, <quote>significant</quote> white space that should be preserved
+in the delivered version is common, for example in poetry and source code.</p>
+<p>An <termref def="dt-xml-proc">XML processor</termref> must always pass
+all characters in a document that are not markup through to the application.
+A <termref def="dt-validating"> validating XML processor</termref> must also
+inform the application which of these characters constitute white space appearing
+in <termref def="dt-elemcontent">element content</termref>.</p>
+<p>A special <termref def="dt-attr">attribute</termref> named <att>xml:space</att>
+may be attached to an element to signal an intention that in that element,
+white space should be preserved by applications. In valid documents, this
+attribute, like any other, must be <termref def="dt-attdecl">declared</termref>
+if it is used. When declared, it must be given as an <termref def="dt-enumerated">enumerated
+type</termref> whose <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E81">[E81]</loc>values
+are one or both of</phrase> <attval>default</attval> and <attval>preserve</attval>.
+For example:</p>
+<eg diff="chg"><![CDATA[<!ATTLIST poem xml:space (default|preserve) 'preserve'>]]>
+
+&lt;!-- <loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E81">[E81]</loc>-->
+&lt;!ATTLIST pre xml:space (preserve) #FIXED 'preserve'></eg>
+<p>The value <attval>default</attval> signals that applications' default white-space
+processing modes are acceptable for this element; the value <attval>preserve</attval>
+indicates the intent that applications preserve all the white space. This
+declared intent is considered to apply to all elements within the content
+of the element where it is specified, unless overriden with another instance
+of the <att>xml:space</att> attribute.</p>
+<p>The <termref def="dt-root">root element</termref> of any document is considered
+to have signaled no intentions as regards application space handling, unless
+it provides a value for this attribute or the attribute is declared with a
+default value.</p>
+</div2>
+<div2 id="sec-line-ends">
+<head>End-of-Line Handling</head>
+<p>XML <termref def="dt-parsedent">parsed entities</termref> are often stored
+in computer files which, for editing convenience, are organized into lines.
+These lines are typically separated by some combination of the characters
+carriage-return (#xD) and line-feed (#xA).</p>
+<p diff="del">To simplify the tasks of <termref def="dt-app">applications</termref>,
+wherever an external parsed entity or the literal entity value of an internal
+parsed entity contains either the literal two-character sequence <quote>#xD#xA</quote>
+or a standalone literal #xD, an <termref def="dt-xml-proc">XML processor</termref>
+must pass to the application the single character #xA. (This behavior can
+conveniently be produced by normalizing all line breaks to #xA on input, before
+parsing.)</p>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E104">[E104]</loc>To
+simplify the tasks of <termref def="dt-app">applications</termref>, the characters
+passed to an application by the <termref def="dt-xml-proc">XML processor</termref>
+must be as if the XML processor normalized all line breaks in external parsed
+entities (including the document entity) on input, before parsing, by translating
+both the two-character sequence #xD #xA and any #xD that is not followed by
+#xA to a single #xA character.</p>
+</div2>
+<div2 id="sec-lang-tag">
+<head>Language Identification</head>
+<p>In document processing, it is often useful to identify the natural or formal
+language in which the content is written. A special <termref def="dt-attr">attribute</termref>
+named <att>xml:lang</att> may be inserted in documents to specify the language
+used in the contents and attribute values of any element in an XML document.
+In valid documents, this attribute, like any other, must be <termref def="dt-attdecl">declared</termref>
+if it is used. <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E73">[E73]</loc>The
+values of the attribute are language identifiers as defined by <bibref ref="RFC1766"/>, <titleref>Tags
+for the Identification of Languages</titleref>, or its successor on the IETF
+Standards Track.</phrase></p>
+<note diff="add">
+<p><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E73">[E73]</loc><bibref
+ref="RFC1766"/> tags are constructed from two-letter language codes as defined
+by <bibref ref="ISO639"/>, from two-letter country codes as defined by <bibref
+ref="ISO3166"/>, or from language identifiers registered with the Internet
+Assigned Numbers Authority <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E58">[E58]</loc><bibref
+diff="chg" ref="IANA-LANGCODES"/></phrase>. It is expected that the successor
+to <bibref ref="RFC1766"/> will introduce three-letter language codes for
+languages not presently covered by <bibref ref="ISO639"/>.</p>
+</note>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E73">[E73]</loc>(Productions
+33 through 38 have been removed.)</p>
+<scrap diff="del" lang="ebnf">
+<head>Language Identification</head>
+<prod id="NT-LanguageID">
+<lhs>LanguageID</lhs><rhs><nt def="NT-Langcode">Langcode</nt> ('-' <nt def="NT-Subcode">Subcode</nt>)*</rhs>
+</prod>
+<prod id="NT-Langcode">
+<lhs>Langcode</lhs><rhs><nt def="NT-ISO639Code">ISO639Code</nt> | <nt def="NT-IanaCode">IanaCode</nt>
+| <nt def="NT-UserCode">UserCode</nt></rhs>
+</prod>
+<prod id="NT-ISO639Code">
+<lhs>ISO639Code</lhs><rhs>([a-z] | [A-Z]) ([a-z] | [A-Z])</rhs>
+</prod>
+<prod id="NT-IanaCode">
+<lhs>IanaCode</lhs><rhs>('i' | 'I') '-' ([a-z] | [A-Z])+</rhs>
+</prod>
+<prod id="NT-UserCode">
+<lhs>UserCode</lhs><rhs>('x' | 'X') '-' ([a-z] | [A-Z])+</rhs>
+</prod>
+<prod id="NT-Subcode">
+<lhs>Subcode</lhs><rhs>([a-z] | [A-Z])+</rhs>
+</prod>
+</scrap>
+<p diff="del">The <nt def="NT-Langcode">Langcode</nt> may be any of the following:</p>
+<ulist diff="del">
+<item><p>a two-letter language code as defined by <bibref ref="ISO639"/>, <titleref>Codes
+for the representation of names of languages</titleref></p></item>
+<item><p>a language identifier registered with the Internet Assigned Numbers
+Authority <bibref diff="chg" ref="IANA-LANGCODES"/>; these begin with the
+prefix <quote><code>i-</code></quote> (or <quote><code>I-</code></quote>)</p>
+</item>
+<item><p>a language identifier assigned by the user, or agreed on between
+parties in private use; these must begin with the prefix <quote><code>x-</code></quote>
+or <quote><code>X-</code></quote> in order to ensure that they do not conflict
+with names later standardized or registered with IANA</p></item>
+</ulist>
+<p diff="del">There may be any number of <nt def="NT-Subcode">Subcode</nt>
+segments; if the first subcode segment exists and the Subcode consists of
+two letters, then it must be a country code from <bibref ref="ISO3166"/>,
+"Codes for the representation of names of countries." If the first subcode
+consists of more than two letters, it must be a subcode for the language in
+question registered with IANA, unless the <nt def="NT-Langcode">Langcode</nt>
+begins with the prefix "<code>x-</code>" or "<code>X-</code>". </p>
+<p diff="del">It is customary to give the language code in lower case, and
+the country code (if any) in upper case. Note that these values, unlike other
+names in XML documents, are case insensitive.</p>
+<p>For example:</p>
+<eg><![CDATA[<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
+<p xml:lang="en-GB">What colour is it?</p>
+<p xml:lang="en-US">What color is it?</p>
+<sp who="Faust" desc='leise' xml:lang="de">
+ <l>Habe nun, ach! Philosophie,</l>
+ <l>Juristerei, und Medizin</l>
+ <l>und leider auch Theologie</l>
+ <l>durchaus studiert mit heißem Bemüh'n.</l>
+</sp>]]></eg>
+<!--<p>The xml:lang value is considered to apply both to the contents of an
+element and
+(unless otherwise via attribute default values) to the
+values of all of its attributes with free-text (CDATA) values. -->
+<p>The intent declared with <att>xml:lang</att> is considered to apply to
+all attributes and content of the element where it is specified, unless overridden
+with an instance of <att>xml:lang</att> on another element within that content.</p>
+<!--
+If no
+value is specified for xml:lang on an element, and no default value is
+defined for it in the DTD, then the xml:lang attribute of any element
+takes the same value it has in the parent element, if any. The two
+technical terms in the following example both have the same effective
+value for xml:lang:
+
+ <p xml:lang="en">Here the keywords are
+ <term xml:lang="en">shift</term> and
+ <term>reduce</term>. ...</p>
+
+The application, not the XML processor, is responsible for this '
+inheritance' of attribute values.
+-->
+<p>A simple declaration for <att>xml:lang</att> might take the form</p>
+<eg>xml:lang NMTOKEN #IMPLIED</eg>
+<p>but specific default values may also be given, if appropriate. In a collection
+of French poems for English students, with glosses and notes in English, the <att>xml:lang</att>
+attribute might be declared this way:</p>
+<eg><![CDATA[<!ATTLIST poem xml:lang NMTOKEN 'fr'>
+<!ATTLIST gloss xml:lang NMTOKEN 'en'>
+<!ATTLIST note xml:lang NMTOKEN 'en'>]]></eg>
+</div2>
+</div1>
+<!-- &Elements; -->
+<div1 id="sec-logical-struct">
+<head>Logical Structures</head>
+<p><termdef id="dt-element" term="Element">Each <termref def="dt-xml-doc">XML
+document</termref> contains one or more <term>elements</term>, the boundaries
+of which are either delimited by <termref def="dt-stag">start-tags</termref>
+and <termref def="dt-etag">end-tags</termref>, or, for <termref def="dt-empty">empty</termref>
+elements, by an <termref def="dt-eetag">empty-element tag</termref>. Each
+element has a type, identified by name, sometimes called its <quote>generic
+identifier</quote> (GI), and may have a set of attribute specifications.</termdef>
+Each attribute specification has a <termref def="dt-attrname">name</termref>
+and a <termref def="dt-attrval">value</termref>.</p>
+<scrap lang="ebnf">
+<head>Element</head>
+<prod id="NT-element">
+<lhs>element</lhs><rhs><nt def="NT-EmptyElemTag">EmptyElemTag</nt></rhs>
+<rhs>| <nt def="NT-STag">STag</nt> <nt def="NT-content">content</nt> <nt def="NT-ETag">ETag</nt></rhs>
+<wfc def="GIMatch"/><vc def="elementvalid"/>
+</prod>
+</scrap>
+<p>This specification does not constrain the semantics, use, or (beyond syntax)
+names of the element types and attributes, except that names beginning with
+a match to <code>(('X'|'x')('M'|'m')('L'|'l'))</code> are reserved for standardization
+in this or future versions of this specification.</p>
+<wfcnote id="GIMatch"><head>Element Type Match</head><p>The <nt def="NT-Name">Name</nt>
+in an element's end-tag must match the element type in the start-tag.</p>
+</wfcnote>
+<vcnote id="elementvalid"><head>Element Valid</head><p>An element is valid
+if there is a declaration matching <nt def="NT-elementdecl">elementdecl</nt>
+where the <nt def="NT-Name">Name</nt> matches the element type, and one of
+the following holds:</p>
+<olist>
+<item><p>The declaration matches <kw>EMPTY</kw> and the element has no <termref
+def="dt-content">content</termref>.</p></item>
+<item><p>The declaration matches <nt def="NT-children">children</nt> and the
+sequence of <termref def="dt-parentchild">child elements</termref> belongs
+to the language generated by the regular expression in the content model,
+with optional white space (characters matching the nonterminal <nt def="NT-S">S</nt>)
+between <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E59">[E59]</loc>the
+start-tag and the first child element, between child elements, or between
+the last child element and the end-tag. Note that a CDATA section containing
+only white space does not match the nonterminal <nt def="NT-S">S</nt>, and
+hence cannot appear in these positions.</phrase></p></item>
+<item><p>The declaration matches <nt def="NT-Mixed">Mixed</nt> and the content
+consists of <termref def="dt-chardata">character data</termref> and <termref
+def="dt-parentchild">child elements</termref> whose types match names in the
+content model.</p></item>
+<item><p>The declaration matches <kw>ANY</kw>, and the types of any <termref
+def="dt-parentchild">child elements</termref> have been declared.</p></item>
+</olist>
+</vcnote>
+<div2 id="sec-starttags">
+<head>Start-Tags, End-Tags, and Empty-Element Tags</head>
+<p><termdef id="dt-stag" term="Start-Tag">The beginning of every non-empty
+XML element is marked by a <term>start-tag</term>.</termdef></p>
+<scrap lang="ebnf">
+<head>Start-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-STag">
+<lhs>STag</lhs><rhs>'&lt;' <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt
+def="NT-Attribute">Attribute</nt>)* <nt def="NT-S">S</nt>? '>'</rhs><wfc def="uniqattspec"/>
+</prod>
+<prod id="NT-Attribute">
+<lhs>Attribute</lhs><rhs><nt def="NT-Name">Name</nt> <nt def="NT-Eq">Eq</nt> <nt
+def="NT-AttValue">AttValue</nt></rhs><vc def="ValueType"/><wfc def="NoExternalRefs"/>
+<wfc def="CleanAttrVals"/>
+</prod>
+</prodgroup></scrap>
+<p>The <nt def="NT-Name">Name</nt> in the start- and end-tags gives the element's <term>type</term>. <termdef
+id="dt-attr" term="Attribute"> The <nt def="NT-Name">Name</nt>-<nt def="NT-AttValue">AttValue</nt>
+pairs are referred to as the <term>attribute specifications</term> of the
+element</termdef>, <termdef id="dt-attrname" term="Attribute Name">with the <nt
+def="NT-Name">Name</nt> in each pair referred to as the <term>attribute name</term></termdef>
+and <termdef id="dt-attrval" term="Attribute Value">the content of the <nt
+def="NT-AttValue">AttValue</nt> (the text between the <code>'</code> or <code>"</code>
+delimiters) as the <term>attribute value</term>.</termdef><phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E46">[E46]</loc>Note
+that the order of attribute specifications in a start-tag or empty-element
+tag is not significant.</phrase></p>
+<wfcnote id="uniqattspec"><head>Unique Att Spec</head><p>No attribute name
+may appear more than once in the same start-tag or empty-element tag.</p>
+</wfcnote>
+<vcnote id="ValueType"><head>Attribute Value Type</head><p>The attribute must
+have been declared; the value must be of the type declared for it. (For attribute
+types, see <specref ref="attdecls"/>.)</p>
+</vcnote>
+<wfcnote id="NoExternalRefs"><head>No External Entity References</head><p>Attribute
+values cannot contain direct or indirect entity references to external entities.</p>
+</wfcnote>
+<wfcnote id="CleanAttrVals"><head>No <code>&lt;</code> in Attribute Values</head>
+<p>The <termref def="dt-repltext">replacement text</termref> of any entity
+referred to directly or indirectly in an attribute value <phrase diff="del"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E83">[E83]</loc>(other
+than <quote><code>&amp;lt;</code></quote>) </phrase>must not contain a <code>&lt;</code>.</p>
+</wfcnote>
+<p>An example of a start-tag:</p>
+<eg>&lt;termdef id="dt-dog" term="dog"></eg>
+<p><termdef id="dt-etag" term="End Tag">The end of every element that begins
+with a start-tag must be marked by an <term>end-tag</term> containing a name
+that echoes the element's type as given in the start-tag:</termdef></p>
+<scrap lang="ebnf">
+<head>End-tag</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-ETag">
+<lhs>ETag</lhs><rhs>'&lt;/' <nt def="NT-Name">Name</nt> <nt def="NT-S">S</nt>?
+'>'</rhs>
+</prod>
+</prodgroup></scrap>
+<p>An example of an end-tag:</p>
+<eg>&lt;/termdef></eg>
+<p><termdef id="dt-content" term="Content">The <termref def="dt-text">text</termref>
+between the start-tag and end-tag is called the element's <term>content</term>:</termdef></p>
+<scrap lang="ebnf">
+<head>Content of Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-content" diff="chg">
+<lhs>content</lhs><rhs><nt def="NT-CharData">CharData</nt>? ((<nt def="NT-element">element</nt>
+| <nt def="NT-Reference">Reference</nt> | <nt def="NT-CDSect">CDSect</nt>
+| <nt def="NT-PI">PI</nt> | <nt def="NT-Comment">Comment</nt>) <nt def="NT-CharData">CharData</nt>?)*</rhs>
+<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E71">[E71]</loc></com>
+</prod>
+</prodgroup></scrap>
+<p><phrase diff="chg"><termdef id="dt-empty" term="Empty"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E97">[E97]</loc>An element
+with no content is said to be <term>empty</term>.</termdef> The representation
+of an empty element is either a start-tag immediately followed by an end-tag,
+or an empty-element tag.</phrase> <termdef id="dt-eetag" term="empty-element tag">An <term>empty-element
+tag</term> takes a special form:</termdef></p>
+<scrap lang="ebnf">
+<head>Tags for Empty Elements</head>
+<prodgroup pcw2="6" pcw4="15" pcw5="11.5">
+<prod id="NT-EmptyElemTag">
+<lhs>EmptyElemTag</lhs><rhs>'&lt;' <nt def="NT-Name">Name</nt> (<nt def="NT-S">S</nt> <nt
+def="NT-Attribute">Attribute</nt>)* <nt def="NT-S">S</nt>? '/>'</rhs><wfc
+def="uniqattspec"/>
+</prod>
+</prodgroup></scrap>
+<p>Empty-element tags may be used for any element which has no content, whether
+or not it is declared using the keyword <kw>EMPTY</kw>. <termref def="dt-interop">For
+interoperability</termref>, the empty-element tag <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E45">[E45]</loc>should
+be used, and should only be used,</phrase> for elements which are declared
+EMPTY.</p>
+<p>Examples of empty elements:</p>
+<eg>&lt;IMG align="left"
+ src="http://www.w3.org/Icons/WWW/w3c_home" />
+&lt;br>&lt;/br>
+&lt;br/></eg>
+</div2>
+<div2 id="elemdecls">
+<head>Element Type Declarations</head>
+<p>The <termref def="dt-element">element</termref> structure of an <termref
+def="dt-xml-doc">XML document</termref> may, for <termref def="dt-valid">validation</termref>
+purposes, be constrained using element type and attribute-list declarations.
+An element type declaration constrains the element's <termref def="dt-content">content</termref>.</p>
+<p>Element type declarations often constrain which element types can appear
+as <termref def="dt-parentchild">children</termref> of the element. At user
+option, an XML processor may issue a warning when a declaration mentions an
+element type for which no declaration is provided, but this is not an error.</p>
+<p><termdef id="dt-eldecl" term="Element Type declaration">An <term>element
+type declaration</term> takes the form:</termdef></p>
+<scrap lang="ebnf">
+<head>Element Type Declaration</head>
+<prodgroup pcw2="5.5" pcw4="18" pcw5="9">
+<prod id="NT-elementdecl">
+<lhs>elementdecl</lhs><rhs>'&lt;!ELEMENT' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt
+def="NT-S">S</nt> <nt def="NT-contentspec">contentspec</nt> <nt def="NT-S">S</nt>?
+'>'</rhs><vc def="EDUnique"/>
+</prod>
+<prod id="NT-contentspec">
+<lhs>contentspec</lhs><rhs>'EMPTY' | 'ANY' | <nt def="NT-Mixed">Mixed</nt>
+| <nt def="NT-children">children</nt> </rhs>
+</prod>
+</prodgroup></scrap>
+<p>where the <nt def="NT-Name">Name</nt> gives the element type being declared.</p>
+<vcnote id="EDUnique"><head>Unique Element Type Declaration</head><p>No element
+type may be declared more than once.</p>
+</vcnote>
+<p>Examples of element type declarations:</p>
+<eg>&lt;!ELEMENT br EMPTY>
+&lt;!ELEMENT p (#PCDATA|emph)* >
+&lt;!ELEMENT %name.para; %content.para; >
+&lt;!ELEMENT container ANY></eg>
+<div3 id="sec-element-content">
+<head>Element Content</head>
+<p><termdef id="dt-elemcontent" term="Element content">An element <termref
+def="dt-stag">type</termref> has <term>element content</term> when elements
+of that type must contain only <termref def="dt-parentchild">child</termref>
+elements (no character data), optionally separated by white space (characters
+matching the nonterminal <nt def="NT-S">S</nt>).</termdef><termdef id="dt-content-model"
+term="Content model">In this case, the constraint includes a <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E55">[E55]</loc><term>content
+model</term></phrase>, a simple grammar governing the allowed types of the
+child elements and the order in which they are allowed to appear.</termdef>
+The grammar is built on content particles (<nt def="NT-cp">cp</nt>s), which
+consist of names, choice lists of content particles, or sequence lists of
+content particles:</p>
+<scrap lang="ebnf">
+<head>Element-content Models</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id="NT-children">
+<lhs>children</lhs><rhs>(<nt def="NT-choice">choice</nt> | <nt def="NT-seq">seq</nt>)
+('?' | '*' | '+')?</rhs>
+</prod>
+<prod id="NT-cp">
+<lhs>cp</lhs><rhs>(<nt def="NT-Name">Name</nt> | <nt def="NT-choice">choice</nt>
+| <nt def="NT-seq">seq</nt>) ('?' | '*' | '+')?</rhs>
+</prod>
+<prod id="NT-choice" diff="chg">
+<lhs>choice</lhs><rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> ( <nt
+def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )+ <nt
+def="NT-S">S</nt>? ')'</rhs><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E50">[E50]</loc></com>
+<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E52">[E52]</loc></com>
+<vc def="vc-PEinGroup"/>
+</prod>
+<prod id="NT-seq" diff="chg">
+<lhs>seq</lhs><rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> ( <nt
+def="NT-S">S</nt>? ',' <nt def="NT-S">S</nt>? <nt def="NT-cp">cp</nt> )* <nt
+def="NT-S">S</nt>? ')'</rhs><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E52">[E52]</loc></com>
+<vc def="vc-PEinGroup"/>
+</prod>
+</prodgroup></scrap>
+<p>where each <nt def="NT-Name">Name</nt> is the type of an element which
+may appear as a <termref def="dt-parentchild">child</termref>. Any content
+particle in a choice list may appear in the <termref def="dt-elemcontent">element
+content</termref> at the location where the choice list appears in the grammar;
+content particles occurring in a sequence list must each appear in the <termref
+def="dt-elemcontent">element content</termref> in the order given in the list.
+The optional character following a name or list governs whether the element
+or the content particles in the list may occur one or more (<code>+</code>),
+zero or more (<code>*</code>), or zero or one times (<code>?</code>). The
+absence of such an operator means that the element or content particle must
+appear exactly once. This syntax and meaning are identical to those used in
+the productions in this specification.</p>
+<p>The content of an element matches a content model if and only if it is
+possible to trace out a path through the content model, obeying the sequence,
+choice, and repetition operators and matching each element in the content
+against an element type in the content model. <termref def="dt-compat">For
+compatibility</termref>, it is an error if an element in the document can
+match more than one occurrence of an element type in the content model. For
+more information, see <specref ref="determinism"/>.</p>
+<!--appendix <specref ref="determinism"/>.-->
+<!-- appendix on deterministic content models. -->
+<vcnote id="vc-PEinGroup"><head>Proper Group/PE Nesting</head><p>Parameter-entity <termref
+def="dt-repltext">replacement text</termref> must be properly nested with <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E11">[E11]</loc>parenthesized</phrase>
+groups. That is to say, if either of the opening or closing parentheses in
+a <nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or <nt def="NT-Mixed">Mixed</nt>
+construct is contained in the replacement text for a <termref def="dt-PERef">parameter
+entity</termref>, both must be contained in the same replacement text.</p>
+<p diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E19">[E19]</loc><termref
+def="dt-interop">For interoperability</termref>, if a parameter-entity reference
+appears in a <nt def="NT-choice">choice</nt>, <nt def="NT-seq">seq</nt>, or <nt
+def="NT-Mixed">Mixed</nt> construct, its replacement text should contain at
+least one non-blank character, and neither the first nor last non-blank character
+of the replacement text should be a connector (<code>|</code> or <code>,</code>).</p>
+</vcnote>
+<p>Examples of element-content models:</p>
+<eg>&lt;!ELEMENT spec (front, body, back?)>
+&lt;!ELEMENT div1 (head, (p | list | note)*, div2*)>
+&lt;!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*></eg>
+</div3>
+<div3 id="sec-mixed-content">
+<head>Mixed Content</head>
+<p><termdef id="dt-mixed" term="Mixed Content">An element <termref def="dt-stag">type</termref>
+has <term>mixed content</term> when elements of that type may contain character
+data, optionally interspersed with <termref def="dt-parentchild">child</termref>
+elements.</termdef> In this case, the types of the child elements may be constrained,
+but not their order or their number of occurrences:</p>
+<scrap lang="ebnf">
+<head>Mixed-content Declaration</head>
+<prodgroup pcw2="5.5" pcw4="16" pcw5="11">
+<prod id="NT-Mixed">
+<lhs>Mixed</lhs><rhs>'(' <nt def="NT-S">S</nt>? '#PCDATA' (<nt def="NT-S">S</nt>?
+'|' <nt def="NT-S">S</nt>? <nt def="NT-Name">Name</nt>)* <nt def="NT-S">S</nt>?
+')*' </rhs>
+<rhs>| '(' <nt def="NT-S">S</nt>? '#PCDATA' <nt def="NT-S">S</nt>? ')' </rhs>
+<vc def="vc-PEinGroup"/><vc def="vc-MixedChildrenUnique"/>
+</prod>
+</prodgroup></scrap>
+<p>where the <nt def="NT-Name">Name</nt>s give the types of elements that
+may appear as children. <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E10">[E10]</loc>The
+keyword <kw>#PCDATA</kw> derives historically from the term <quote>parsed
+character data.</quote></phrase></p>
+<vcnote id="vc-MixedChildrenUnique"><head>No Duplicate Types</head><p>The
+same name must not appear more than once in a single mixed-content declaration.</p>
+</vcnote>
+<p>Examples of mixed content declarations:</p>
+<eg>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
+&lt;!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
+&lt;!ELEMENT b (#PCDATA)></eg>
+</div3>
+</div2>
+<div2 id="attdecls">
+<head>Attribute-List Declarations</head>
+<p><termref def="dt-attr">Attributes</termref> are used to associate name-value
+pairs with <termref def="dt-element">elements</termref>. Attribute specifications
+may appear only within <termref def="dt-stag">start-tags</termref> and <termref
+def="dt-eetag">empty-element tags</termref>; thus, the productions used to
+recognize them appear in <specref ref="sec-starttags"/>. Attribute-list declarations
+may be used:</p>
+<ulist>
+<item><p>To define the set of attributes pertaining to a given element type.</p>
+</item>
+<item><p>To establish type constraints for these attributes.</p></item>
+<item><p>To provide <termref def="dt-default">default values</termref> for
+attributes.</p></item>
+</ulist>
+<p><termdef id="dt-attdecl" term="Attribute-List Declaration"> <term>Attribute-list
+declarations</term> specify the name, data type, and default value (if any)
+of each attribute associated with a given element type:</termdef></p>
+<scrap lang="ebnf">
+<head>Attribute-list Declaration</head>
+<prod id="NT-AttlistDecl">
+<lhs>AttlistDecl</lhs><rhs>'&lt;!ATTLIST' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt
+def="NT-AttDef">AttDef</nt>* <nt def="NT-S">S</nt>? '>'</rhs>
+</prod>
+<prod id="NT-AttDef">
+<lhs>AttDef</lhs><rhs><nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt
+def="NT-S">S</nt> <nt def="NT-AttType">AttType</nt> <nt def="NT-S">S</nt> <nt
+def="NT-DefaultDecl">DefaultDecl</nt></rhs>
+</prod>
+</scrap>
+<p>The <nt def="NT-Name">Name</nt> in the <nt def="NT-AttlistDecl">AttlistDecl</nt>
+rule is the type of an element. At user option, an XML processor may issue
+a warning if attributes are declared for an element type not itself declared,
+but this is not an error. The <nt def="NT-Name">Name</nt> in the <nt def="NT-AttDef">AttDef</nt>
+rule is the name of the attribute.</p>
+<p>When more than one <nt def="NT-AttlistDecl">AttlistDecl</nt> is provided
+for a given element type, the contents of all those provided are merged. When
+more than one definition is provided for the same attribute of a given element
+type, the first declaration is binding and later declarations are ignored. <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E9">[E9]</loc><termref
+def="dt-interop">For interoperability,</termref> writers of DTDs may choose
+to provide at most one attribute-list declaration for a given element type,
+at most one attribute definition for a given attribute name in an attribute-list
+declaration, and at least one attribute definition in each attribute-list
+declaration.</phrase> For interoperability, an XML processor may at user option
+issue a warning when more than one attribute-list declaration is provided
+for a given element type, or more than one attribute definition is provided
+for a given attribute, but this is not an error.</p>
+<div3 id="sec-attribute-types">
+<head>Attribute Types</head>
+<p>XML attribute types are of three kinds: a string type, a set of tokenized
+types, and enumerated types. The string type may take any literal string as
+a value; the tokenized types have varying lexical and semantic constraints<phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E8">[E8]</loc>.
+The validity constraints noted in the grammar are applied after the attribute
+value has been normalized as described in <specref ref="attdecls"/>.</phrase></p>
+<scrap lang="ebnf">
+<head>Attribute Types</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id="NT-AttType">
+<lhs>AttType</lhs><rhs><nt def="NT-StringType">StringType</nt> | <nt def="NT-TokenizedType">TokenizedType</nt>
+| <nt def="NT-EnumeratedType">EnumeratedType</nt> </rhs>
+</prod>
+<prod id="NT-StringType">
+<lhs>StringType</lhs><rhs>'CDATA'</rhs>
+</prod>
+<prod id="NT-TokenizedType">
+<lhs>TokenizedType</lhs><rhs>'ID'</rhs><vc def="id"/><vc def="one-id-per-el"/>
+<vc def="id-default"/>
+<rhs>| 'IDREF'</rhs><vc def="idref"/>
+<rhs>| 'IDREFS'</rhs><vc def="idref"/>
+<rhs>| 'ENTITY'</rhs><vc def="entname"/>
+<rhs>| 'ENTITIES'</rhs><vc def="entname"/>
+<rhs>| 'NMTOKEN'</rhs><vc def="nmtok"/>
+<rhs>| 'NMTOKENS'</rhs><vc def="nmtok"/>
+</prod>
+</prodgroup></scrap>
+<vcnote id="id"><head>ID</head><p>Values of type <kw>ID</kw> must match the <nt
+def="NT-Name">Name</nt> production. A name must not appear more than once
+in an XML document as a value of this type; i.e., ID values must uniquely
+identify the elements which bear them.</p>
+</vcnote>
+<vcnote id="one-id-per-el"><head>One ID per Element Type</head><p>No element
+type may have more than one ID attribute specified.</p>
+</vcnote>
+<vcnote id="id-default"><head>ID Attribute Default</head><p>An ID attribute
+must have a declared default of <kw>#IMPLIED</kw> or <kw>#REQUIRED</kw>.</p>
+</vcnote>
+<vcnote id="idref"><head>IDREF</head><p>Values of type <kw>IDREF</kw> must
+match the <nt def="NT-Name">Name</nt> production, and values of type <kw>IDREFS</kw>
+must match <nt def="NT-Names">Names</nt>; each <nt def="NT-Name">Name</nt>
+must match the value of an ID attribute on some element in the XML document;
+i.e. <kw>IDREF</kw> values must match the value of some ID attribute.</p>
+</vcnote>
+<vcnote id="entname"><head>Entity Name</head><p>Values of type <kw>ENTITY</kw>
+must match the <nt def="NT-Name">Name</nt> production, values of type <kw>ENTITIES</kw>
+must match <nt def="NT-Names">Names</nt>; each <nt def="NT-Name">Name</nt>
+must match the name of an <termref def="dt-unparsed">unparsed entity</termref>
+declared in the <termref def="dt-doctype">DTD</termref>.</p>
+</vcnote>
+<vcnote id="nmtok"><head>Name Token</head><p>Values of type <kw>NMTOKEN</kw>
+must match the <nt def="NT-Nmtoken">Nmtoken</nt> production; values of type <kw>NMTOKENS</kw>
+must match <termref def="NT-Nmtokens">Nmtokens</termref>.</p>
+</vcnote>
+<!-- why?
+<p>The XML processor must normalize attribute values before
+passing them to the application, as described in
+<specref ref="AVNormalize"/>.</p>-->
+<p><termdef id="dt-enumerated" term="Enumerated Attribute
+Values"><term>Enumerated attributes</term> can take one of a list of values
+provided in the declaration</termdef>. There are two kinds of enumerated types:</p>
+<scrap lang="ebnf">
+<head>Enumerated Attribute Types</head>
+<prod id="NT-EnumeratedType">
+<lhs>EnumeratedType</lhs><rhs><nt def="NT-NotationType">NotationType</nt>
+| <nt def="NT-Enumeration">Enumeration</nt> </rhs>
+</prod>
+<prod id="NT-NotationType">
+<lhs>NotationType</lhs><rhs>'NOTATION' <nt def="NT-S">S</nt> '(' <nt def="NT-S">S</nt>? <nt
+def="NT-Name">Name</nt> (<nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt
+def="NT-Name">Name</nt>)* <nt def="NT-S">S</nt>? ')' </rhs><vc def="notatn"/>
+<vc def="OneNotationPer" diff="add"/><vc def="NoNotationEmpty" diff="add"/>
+</prod>
+<prod id="NT-Enumeration">
+<lhs>Enumeration</lhs><rhs>'(' <nt def="NT-S">S</nt>? <nt def="NT-Nmtoken">Nmtoken</nt>
+(<nt def="NT-S">S</nt>? '|' <nt def="NT-S">S</nt>? <nt def="NT-Nmtoken">Nmtoken</nt>)* <nt
+def="NT-S">S</nt>? ')'</rhs><vc def="enum"/>
+</prod>
+</scrap>
+<p>A <kw>NOTATION</kw> attribute identifies a <termref def="dt-notation">notation</termref>,
+declared in the DTD with associated system and/or public identifiers, to be
+used in interpreting the element to which the attribute is attached.</p>
+<vcnote id="notatn"><head>Notation Attributes</head><p>Values of this type
+must match one of the <titleref href="#Notations">notation</titleref> names
+included in the declaration; all notation names in the declaration must be
+declared.</p>
+</vcnote>
+<vcnote id="OneNotationPer" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E7">[E7]</loc>One
+Notation Per Element Type</head><p>No element type may have more than one <kw>NOTATION</kw>
+attribute specified.</p>
+</vcnote>
+<vcnote id="NoNotationEmpty" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E68">[E68]</loc>No
+Notation on Empty Element</head><p><termref def="dt-compat">For compatibility</termref>,
+an attribute of type <kw>NOTATION</kw> must not be declared on an element
+declared <kw>EMPTY</kw>.</p>
+</vcnote>
+<vcnote id="enum"><head>Enumeration</head><p>Values of this type must match
+one of the <nt def="NT-Nmtoken">Nmtoken</nt> tokens in the declaration.</p>
+</vcnote>
+<p><termref def="dt-interop">For interoperability,</termref> the same <nt
+def="NT-Nmtoken">Nmtoken</nt> should not occur more than once in the enumerated
+attribute types of a single element type.</p>
+</div3>
+<div3 id="sec-attr-defaults">
+<head>Attribute Defaults</head>
+<p>An <termref def="dt-attdecl">attribute declaration</termref> provides information
+on whether the attribute's presence is required, and if not, how an XML processor
+should react if a declared attribute is absent in a document.</p>
+<scrap lang="ebnf">
+<head>Attribute Defaults</head>
+<prodgroup pcw4="14" pcw5="11.5">
+<prod id="NT-DefaultDecl">
+<lhs>DefaultDecl</lhs><rhs>'#REQUIRED' |&nbsp;'#IMPLIED' </rhs>
+<rhs>| (('#FIXED' S)? <nt def="NT-AttValue">AttValue</nt>)</rhs><vc def="RequiredAttr"/>
+<vc def="defattrvalid"/><wfc def="CleanAttrVals"/><vc def="FixedAttr"/>
+</prod>
+</prodgroup></scrap>
+<p>In an attribute declaration, <kw>#REQUIRED</kw> means that the attribute
+must always be provided, <kw>#IMPLIED</kw> that no default value is provided. <!-- not any more!!
+<kw>#IMPLIED</kw> means that if the attribute is omitted
+from an element of this type,
+the XML processor must inform the application
+that no value was specified; no constraint is placed on the behavior
+of the application. --> <termdef id="dt-default" term="Attribute Default">If
+the declaration is neither <kw>#REQUIRED</kw> nor <kw>#IMPLIED</kw>, then
+the <nt def="NT-AttValue">AttValue</nt> value contains the declared <term>default</term>
+value; the <kw>#FIXED</kw> keyword states that the attribute must always have
+the default value. If a default value is declared, when an XML processor encounters
+an omitted attribute, it is to behave as though the attribute were present
+with the declared default value.</termdef></p>
+<vcnote id="RequiredAttr"><head>Required Attribute</head><p>If the default
+declaration is the keyword <kw>#REQUIRED</kw>, then the attribute must be
+specified for all elements of the type in the attribute-list declaration.</p>
+</vcnote>
+<vcnote id="defattrvalid"><head>Attribute Default Legal</head><p>The declared
+default value must meet the lexical constraints of the declared attribute
+type.</p>
+</vcnote>
+<vcnote id="FixedAttr"><head>Fixed Attribute Default</head><p>If an attribute
+has a default value declared with the <kw>#FIXED</kw> keyword, instances of
+that attribute must match the default value.</p>
+</vcnote>
+<p>Examples of attribute-list declarations:</p>
+<eg>&lt;!ATTLIST termdef
+ id ID #REQUIRED
+ name CDATA #IMPLIED>
+&lt;!ATTLIST list
+ type (bullets|ordered|glossary) "ordered">
+&lt;!ATTLIST form
+ method CDATA #FIXED "POST"></eg>
+</div3>
+<div3 id="AVNormalize" diff="chg">
+<head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E70">[E70]</loc>Attribute-Value
+Normalization</head>
+<p>Before the value of an attribute is passed to the application or checked
+for validity, the XML processor must normalize the attribute value by applying
+the algorithm below, or by using some other method such that the value passed
+to the application is the same as that produced by the algorithm.</p>
+<olist>
+<item><p>All line breaks must have been normalized on input to #xA as described
+in <specref ref="sec-line-ends"/>, so the rest of this algorithm operates
+on text normalized in this way.</p></item>
+<item><p>Begin with a normalized value consisting of the empty string.</p>
+</item>
+<item><p>For each character, entity reference, or character reference in the
+unnormalized attribute value, beginning with the first and continuing to the
+last, do the following:</p>
+<ulist>
+<item><p>For a character reference, append the referenced character to the
+normalized value.</p></item>
+<item><p>For an entity reference, recursively apply step 3 of this algorithm
+to the replacement text of the entity.</p></item>
+<item><p>For a white space character (#x20, #xD, #xA, #x9), append a space
+character (#x20) to the normalized value.</p></item>
+<item><p>For another character, append the character to the normalized value.</p>
+</item>
+</ulist>
+</item>
+</olist>
+<p>If the attribute type is not CDATA, then the XML processor must further
+process the normalized attribute value by discarding any leading and trailing
+space (#x20) characters, and by replacing sequences of space (#x20) characters
+by a single space (#x20) character.</p>
+<p>Note that if the unnormalized attribute value contains a character reference
+to a white space character other than space (#x20), the normalized value contains
+the referenced character itself (#xD, #xA or #x9). This contrasts with the
+case where the unnormalized value contains a white space character (not a
+reference), which is replaced with a space character (#x20) in the normalized
+value and also contrasts with the case where the unnormalized value contains
+an entity reference whose replacement text contains a white space character;
+being recursively processed, the white space character is replaced with a
+space character (#x20) in the normalized value.</p>
+<p>All attributes for which no declaration has been read should be treated
+by a non-validating <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E95">[E95]</loc>processor</phrase>
+as if declared <kw>CDATA</kw>.</p>
+<p>Following are examples of attribute normalization. Given the following
+declarations:</p>
+<eg>&lt;!ENTITY d "&amp;#xD;">
+&lt;!ENTITY a "&amp;#xA;">
+&lt;!ENTITY da "&amp;#xD;&amp;#xA;"></eg>
+<p>the attribute specifications in the left column below would be normalized
+to the character sequences of the middle column if the attribute <att>a</att>
+is declared <kw>NMTOKENS</kw> and to those of the right columns if <att>a</att>
+is declared <kw>CDATA</kw>.</p>
+<table border="1" frame="border"><thead><tr><th>Attribute specification</th>
+<th>a is NMTOKENS</th><th>a is CDATA</th></tr></thead><tbody><tr><td><eg>a="
+
+xyz"</eg></td><td><code>x y z</code></td><td><code>#x20 #x20 x y z</code></td>
+</tr><tr><td><eg>a="&amp;d;&amp;d;A&amp;a;&amp;a;B&amp;da;"</eg></td><td><code>A
+#x20 B</code></td><td><code>#x20 #x20 A #x20 #x20 B #x20 #x20</code></td>
+</tr><tr><td><eg>a=
+"&amp;#xd;&amp;#xd;A&amp;#xa;&amp;#xa;B&amp;#xd;&amp;#xa;"</eg></td><td><code>#xD
+#xD A #xA #xA B #xD #xA</code></td><td><code>#xD #xD A #xA #xA B #xD #xD</code></td>
+</tr></tbody></table>
+<p>Note that the last example is invalid (but well-formed) if <att>a</att>
+is declared to be of type <kw>NMTOKENS</kw>.</p>
+</div3>
+</div2>
+<div2 id="sec-condition-sect">
+<head>Conditional Sections</head>
+<p><termdef id="dt-cond-section" term="conditional section"> <term>Conditional
+sections</term> are portions of the <termref def="dt-doctype">document type
+declaration external subset</termref> which are included in, or excluded from,
+the logical structure of the DTD based on the keyword which governs them.</termdef></p>
+<scrap lang="ebnf">
+<head>Conditional Section</head>
+<prodgroup pcw2="9" pcw4="14.5">
+<prod id="NT-conditionalSect">
+<lhs>conditionalSect</lhs><rhs><nt def="NT-includeSect">includeSect</nt> | <nt
+def="NT-ignoreSect">ignoreSect</nt> </rhs>
+</prod>
+<prod id="NT-includeSect">
+<lhs>includeSect</lhs><rhs>'&lt;![' S? 'INCLUDE' S? '[' <nt def="NT-extSubsetDecl">extSubsetDecl</nt>
+']]&gt;' </rhs><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc></com>
+<vc def="condsec-nesting" diff="add"/>
+</prod>
+<prod id="NT-ignoreSect">
+<lhs>ignoreSect</lhs><rhs>'&lt;![' S? 'IGNORE' S? '[' <nt def="NT-ignoreSectContents">ignoreSectContents</nt>*
+']]&gt;'</rhs><com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc></com>
+<vc def="condsec-nesting" diff="add"/>
+</prod>
+<prod id="NT-ignoreSectContents">
+<lhs>ignoreSectContents</lhs><rhs><nt def="NT-Ignore">Ignore</nt> ('&lt;![' <nt
+def="NT-ignoreSectContents">ignoreSectContents</nt> ']]&gt;' <nt def="NT-Ignore">Ignore</nt>)*</rhs>
+</prod>
+<prod id="NT-Ignore">
+<lhs>Ignore</lhs><rhs><nt def="NT-Char">Char</nt>* - (<nt def="NT-Char">Char</nt>*
+('&lt;![' | ']]&gt;') <nt def="NT-Char">Char</nt>*) </rhs>
+</prod>
+</prodgroup></scrap>
+<vcnote id="condsec-nesting" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc>Proper
+Conditional Section/PE Nesting</head><p>If any of the "<code>&lt;![</code>",
+"<code>[</code>", or "<code>]]&gt;</code>" of a conditional section is contained
+in the replacement text for a parameter-entity reference, all of them must
+be contained in the same replacement text.</p>
+</vcnote>
+<p>Like the internal and external DTD subsets, a conditional section may contain
+one or more complete declarations, comments, processing instructions, or nested
+conditional sections, intermingled with white space.</p>
+<p>If the keyword of the conditional section is <kw>INCLUDE</kw>, then the
+contents of the conditional section are part of the DTD. If the keyword of
+the conditional section is <kw>IGNORE</kw>, then the contents of the conditional
+section are not logically part of the DTD. <phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc>Note that
+for reliable parsing, the contents of even ignored conditional sections must
+be read in order to detect nested conditional sections and ensure that the
+end of the outermost (ignored) conditional section is properly detected.</phrase>
+If a conditional section with a keyword of <kw>INCLUDE</kw> occurs within
+a larger conditional section with a keyword of <kw>IGNORE</kw>, both the outer
+and the inner conditional sections are ignored.<phrase diff="add"> <loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc>The contents
+of an ignored conditional section are parsed by ignoring all characters after
+the "<code>[</code>" following the keyword, except conditional section starts
+"<code>&lt;![</code>" and ends "<code>]]&gt;</code>", until the matching conditional
+section end is found. Parameter entity references are not recognized in this
+process.</phrase></p>
+<p>If the keyword of the conditional section is a parameter-entity reference,
+the parameter entity must be replaced by its content before the processor
+decides whether to include or ignore the conditional section.</p>
+<p>An example:</p>
+<eg>&lt;!ENTITY % draft 'INCLUDE' >
+&lt;!ENTITY % final 'IGNORE' >
+
+&lt;![%draft;[
+&lt;!ELEMENT book (comments*, title, body, supplements?)>
+]]&gt;
+&lt;![%final;[
+&lt;!ELEMENT book (title, body, supplements?)>
+]]&gt;</eg>
+</div2>
+<!--
+<div2 id='sec-pass-to-app'>
+<head>XML Processor Treatment of Logical Structure</head>
+<p>When an XML processor encounters a start-tag, it must make
+at least the following information available to the application:
+<ulist>
+<item>
+<p>the element type's generic identifier</p>
+</item>
+<item>
+<p>the names of attributes known to apply to this element type
+(validating processors must make available names of all attributes
+declared for the element type; non-validating processors must
+make available at least the names of the attributes for which
+values are specified.
+</p>
+</item>
+</ulist>
+</p>
+</div2>
+-->
+</div1>
+<!-- &Entities; -->
+<div1 id="sec-physical-struct">
+<head>Physical Structures</head>
+<p><termdef id="dt-entity" term="Entity">An XML document may consist of one
+or many storage units. <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E6">[E6]</loc>These
+are called <term>entities</term>; they all have <term>content</term> and are
+all (except for the <termref def="dt-docent">document entity</termref> and
+the <termref def="dt-doctype">external DTD subset</termref>) identified by
+entity <term>name</term></phrase>.</termdef> Each XML document has one entity
+called the <termref def="dt-docent">document entity</termref>, which serves
+as the starting point for the <termref def="dt-xml-proc">XML processor</termref>
+and may contain the whole document.</p>
+<p>Entities may be either parsed or unparsed. <termdef id="dt-parsedent" term="Text Entity">A <term>parsed
+entity's</term> contents are referred to as its <termref def="dt-repltext">replacement
+text</termref>; this <termref def="dt-text">text</termref> is considered an
+integral part of the document.</termdef></p>
+<p><termdef id="dt-unparsed" term="Unparsed Entity">An <term>unparsed entity</term>
+is a resource whose contents may or may not be <termref def="dt-text">text</termref>,
+and if text, <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E25">[E25]</loc>may
+be other than</phrase> XML. Each unparsed entity has an associated <termref
+def="dt-notation">notation</termref>, identified by name. Beyond a requirement
+that an XML processor make the identifiers for the entity and notation available
+to the application, XML places no constraints on the contents of unparsed
+entities.</termdef></p>
+<p>Parsed entities are invoked by name using entity references; unparsed entities
+by name, given in the value of <kw>ENTITY</kw> or <kw>ENTITIES</kw> attributes.</p>
+<p><termdef id="gen-entity" term="general entity"><term>General entities</term>
+are entities for use within the document content. In this specification, general
+entities are sometimes referred to with the unqualified term <emph>entity</emph>
+when this leads to no ambiguity.</termdef> <termdef id="dt-PE" term="Parameter entity"><phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E53">[E53]</loc><term>Parameter
+entities</term></phrase> are parsed entities for use within the DTD.</termdef>
+These two types of entities use different forms of reference and are recognized
+in different contexts. Furthermore, they occupy different namespaces; a parameter
+entity and a general entity with the same name are two distinct entities.</p>
+<div2 id="sec-references">
+<head>Character and Entity References</head>
+<p><termdef id="dt-charref" term="Character Reference"> A <term>character
+reference</term> refers to a specific character in the ISO/IEC 10646 character
+set, for example one not directly accessible from available input devices.</termdef></p>
+<scrap lang="ebnf">
+<head>Character Reference</head>
+<prod id="NT-CharRef">
+<lhs>CharRef</lhs><rhs>'&amp;#' [0-9]+ ';' </rhs>
+<rhs>| '&hcro;' [0-9a-fA-F]+ ';'</rhs><wfc def="wf-Legalchar"/>
+</prod>
+</scrap>
+<wfcnote id="wf-Legalchar"><head>Legal Character</head><p>Characters referred
+to using character references must match the production for <termref def="NT-Char">Char</termref>.</p>
+</wfcnote>
+<p>If the character reference begins with <quote><code>&amp;#x</code></quote>,
+the digits and letters up to the terminating <code>;</code> provide a hexadecimal
+representation of the character's code point in ISO/IEC 10646. If it begins
+just with <quote><code>&amp;#</code></quote>, the digits up to the terminating <code>;</code>
+provide a decimal representation of the character's code point.</p>
+<p><termdef id="dt-entref" term="Entity Reference">An <term>entity reference</term>
+refers to the content of a named entity.</termdef> <termdef id="dt-GERef"
+term="General Entity Reference">References to parsed general entities use
+ampersand (<code>&amp;</code>) and semicolon (<code>;</code>) as delimiters.</termdef> <termdef
+id="dt-PERef" term="Parameter-entity reference"> <term>Parameter-entity references</term>
+use percent-sign (<code>%</code>) and semicolon (<code>;</code>) as delimiters.</termdef></p>
+<scrap lang="ebnf">
+<head>Entity Reference</head>
+<prod id="NT-Reference">
+<lhs>Reference</lhs><rhs><nt def="NT-EntityRef">EntityRef</nt> | <nt def="NT-CharRef">CharRef</nt></rhs>
+</prod>
+<prod id="NT-EntityRef">
+<lhs>EntityRef</lhs><rhs>'&amp;' <nt def="NT-Name">Name</nt> ';'</rhs><wfc
+def="wf-entdeclared"/><vc def="vc-entdeclared"/><wfc def="textent"/><wfc def="norecursion"/>
+</prod>
+<prod id="NT-PEReference">
+<lhs>PEReference</lhs><rhs>'%' <nt def="NT-Name">Name</nt> ';'</rhs><vc def="vc-entdeclared"/>
+<wfc def="norecursion"/><wfc def="indtd"/>
+</prod>
+</scrap>
+<wfcnote id="wf-entdeclared"><head>Entity Declared</head><p>In a document
+without any DTD, a document with only an internal DTD subset which contains
+no parameter entity references, or a document with <quote><code>standalone='yes'</code></quote>, <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E34">[E34]</loc>for
+an entity reference that does not occur within the external subset or a parameter
+entity, the <nt def="NT-Name">Name</nt> given in the entity reference must <termref
+def="dt-match">match</termref> that in an <titleref href="#sec-entity-decl">entity
+declaration</titleref> that does not occur within the external subset or a
+parameter entity</phrase>, except that well-formed documents need not declare
+any of the following entities: &magicents;. <phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E29">[E29]</loc>The declaration
+of a parameter entity must precede any reference to it. Similarly, </phrase>The
+declaration of a general entity must precede any reference to it which appears
+in a default value in an attribute-list declaration.</p>
+<p>Note that if entities are declared in the external subset or in external
+parameter entities, a non-validating processor is <titleref href="#include-if-valid">not
+obligated to</titleref> read and process their declarations; for such documents,
+the rule that an entity must be declared is a well-formedness constraint only
+if <titleref href="#sec-rmd">standalone='yes'</titleref>.</p>
+</wfcnote>
+<vcnote id="vc-entdeclared"><head>Entity Declared</head><p>In a document with
+an external subset or external parameter entities with <quote><code>standalone='no'</code></quote>,
+the <nt def="NT-Name">Name</nt> given in the entity reference must <termref
+def="dt-match">match</termref> that in an <titleref href="#sec-entity-decl">entity
+declaration</titleref>. For interoperability, valid documents should declare
+the entities &magicents;, in the form specified in <specref ref="sec-predefined-ent"/>.
+The declaration of a parameter entity must precede any reference to it. Similarly,
+the declaration of a general entity must precede any <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E92">[E92]</loc>attribute-list
+declaration containing a default value with a direct or indirect reference
+to that general entity.</phrase></p>
+</vcnote>
+<!-- FINAL EDIT: is this duplication too clumsy? -->
+<wfcnote id="textent"><head>Parsed Entity</head><p>An entity reference must
+not contain the name of an <termref def="dt-unparsed">unparsed entity</termref>.
+Unparsed entities may be referred to only in <termref def="dt-attrval">attribute
+values</termref> declared to be of type <kw>ENTITY</kw> or <kw>ENTITIES</kw>.</p>
+</wfcnote>
+<wfcnote id="norecursion"><head>No Recursion</head><p>A parsed entity must
+not contain a recursive reference to itself, either directly or indirectly.</p>
+</wfcnote>
+<wfcnote id="indtd"><head>In DTD</head><p>Parameter-entity references may
+only appear in the <termref def="dt-doctype">DTD</termref>.</p>
+</wfcnote>
+<p>Examples of character and entity references:</p>
+<eg>Type &lt;key>less-than&lt;/key> (&hcro;3C;) to save options.
+This document was prepared on &amp;docdate; and
+is classified &amp;security-level;.</eg>
+<p>Example of a parameter-entity reference:</p>
+<eg><![CDATA[<!-- declare the parameter entity "ISOLat2"... -->
+<!ENTITY % ISOLat2
+ SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
+<!-- ... now reference it. -->
+%ISOLat2;]]></eg>
+</div2>
+<div2 id="sec-entity-decl">
+<head>Entity Declarations</head>
+<p><termdef id="dt-entdecl" term="entity declaration"> Entities are declared
+thus:</termdef></p>
+<scrap lang="ebnf">
+<head>Entity Declaration</head>
+<prodgroup pcw2="5" pcw4="18.5">
+<prod id="NT-EntityDecl">
+<lhs>EntityDecl</lhs><rhs><nt def="NT-GEDecl">GEDecl</nt><!--</rhs><com>General entities</com>
+<rhs>--> | <nt def="NT-PEDecl">PEDecl</nt></rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id="NT-GEDecl">
+<lhs>GEDecl</lhs><rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt
+def="NT-S">S</nt> <nt def="NT-EntityDef">EntityDef</nt> <nt def="NT-S">S</nt>?
+'>'</rhs>
+</prod>
+<prod id="NT-PEDecl">
+<lhs>PEDecl</lhs><rhs>'&lt;!ENTITY' <nt def="NT-S">S</nt> '%' <nt def="NT-S">S</nt> <nt
+def="NT-Name">Name</nt> <nt def="NT-S">S</nt> <nt def="NT-PEDef">PEDef</nt> <nt
+def="NT-S">S</nt>? '>'</rhs>
+<!--<com>Parameter entities</com>-->
+</prod>
+<prod id="NT-EntityDef">
+<lhs>EntityDef</lhs><rhs><nt def="NT-EntityValue">EntityValue</nt> <!--</rhs>
+<rhs>-->| (<nt def="NT-ExternalID">ExternalID</nt> <nt def="NT-NDataDecl">NDataDecl</nt>?)</rhs>
+<!-- <nt def='NT-ExternalDef'>ExternalDef</nt></rhs> -->
+</prod>
+<!-- FINAL EDIT: what happened to WFs here? -->
+<prod id="NT-PEDef">
+<lhs>PEDef</lhs><rhs><nt def="NT-EntityValue">EntityValue</nt> | <nt def="NT-ExternalID">ExternalID</nt></rhs>
+</prod>
+</prodgroup></scrap>
+<p>The <nt def="NT-Name">Name</nt> identifies the entity in an <termref def="dt-entref">entity
+reference</termref> or, in the case of an unparsed entity, in the value of
+an <kw>ENTITY</kw> or <kw>ENTITIES</kw> attribute. If the same entity is declared
+more than once, the first declaration encountered is binding; at user option,
+an XML processor may issue a warning if entities are declared multiple times.</p>
+<div3 id="sec-internal-ent">
+<head>Internal Entities</head>
+<p><termdef id="dt-internent" term="Internal Entity Replacement Text">If the
+entity definition is an <nt def="NT-EntityValue">EntityValue</nt>, the defined
+entity is called an <term>internal entity</term>. There is no separate physical
+storage object, and the content of the entity is given in the declaration.</termdef>
+Note that some processing of entity and character references in the <termref
+def="dt-litentval">literal entity value</termref> may be required to produce
+the correct <termref def="dt-repltext">replacement text</termref>: see <specref
+ref="intern-replacement"/>.</p>
+<p>An internal entity is a <termref def="dt-parsedent">parsed entity</termref>.</p>
+<p>Example of an internal entity declaration:</p>
+<eg>&lt;!ENTITY Pub-Status "This is a pre-release of the
+ specification."></eg>
+</div3>
+<div3 id="sec-external-ent">
+<head>External Entities</head>
+<p><termdef id="dt-extent" term="External Entity">If the entity is not internal,
+it is an <term>external entity</term>, declared as follows:</termdef></p>
+<scrap lang="ebnf">
+<head>External Entity Declaration</head>
+<!--
+<prod id='NT-ExternalDef'><lhs>ExternalDef</lhs>
+<rhs></prod> -->
+<prod id="NT-ExternalID">
+<lhs>ExternalID</lhs><rhs>'SYSTEM' <nt def="NT-S">S</nt> <nt def="NT-SystemLiteral">SystemLiteral</nt></rhs>
+<rhs>| 'PUBLIC' <nt def="NT-S">S</nt> <nt def="NT-PubidLiteral">PubidLiteral</nt> <nt
+def="NT-S">S</nt> <nt def="NT-SystemLiteral">SystemLiteral</nt> </rhs>
+</prod>
+<prod id="NT-NDataDecl">
+<lhs>NDataDecl</lhs><rhs><nt def="NT-S">S</nt> 'NDATA' <nt def="NT-S">S</nt> <nt
+def="NT-Name">Name</nt></rhs><vc def="not-declared"/>
+</prod>
+</scrap>
+<p>If the <nt def="NT-NDataDecl">NDataDecl</nt> is present, this is a general <termref
+def="dt-unparsed">unparsed entity</termref>; otherwise it is a parsed entity.</p>
+<vcnote id="not-declared"><head>Notation Declared</head><p>The <nt def="NT-Name">Name</nt>
+must match the declared name of a <termref def="dt-notation">notation</termref>.</p>
+</vcnote>
+<p><phrase diff="chg"><termdef id="dt-sysid" term="System Identifier">The <nt
+def="NT-SystemLiteral">SystemLiteral</nt> is called the entity's <term>system
+identifier</term>. It is a <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E88">[E88]</loc>URI
+reference</phrase><phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E66">[E66]</loc>
+(as defined in <bibref ref="rfc2396"/>, updated by <bibref ref="rfc2732"/>)</phrase>, <loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E76">[E76]</loc>meant
+to be dereferenced to obtain input for the XML processor to construct the
+entity's replacement text.</termdef> It is an error for a fragment identifier
+(beginning with a <code>#</code> character) to be part of a system identifier.</phrase>
+Unless otherwise provided by information outside the scope of this specification
+(e.g. a special XML element type defined by a particular DTD, or a processing
+instruction defined by a particular application specification), relative URIs
+are relative to the location of the resource within which the entity declaration
+occurs. A URI might thus be relative to the <termref def="dt-docent">document
+entity</termref>, to the entity containing the <termref def="dt-doctype">external
+DTD subset</termref>, or to some other <termref def="dt-extent">external parameter
+entity</termref>.</p>
+<p diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E78">[E78]</loc>URI
+references require encoding and escaping of certain characters. The disallowed
+characters include all non-ASCII characters, plus the excluded characters
+listed in Section 2.4 of <bibref ref="rfc2396"/>, except for the number sign
+(<code>#</code>) and percent sign (<code>%</code>) characters and the square
+bracket characters re-allowed in <bibref ref="rfc2732"/>. Disallowed characters
+must be escaped as follows:</p>
+<olist diff="add">
+<item><p>Each disallowed character is converted to UTF-8 <bibref ref="rfc2279"/>
+as one or more bytes.</p></item>
+<item><p>Any octets corresponding to a disallowed character are escaped with
+the URI escaping mechanism (that is, converted to <code>%</code><var>HH</var>,
+where HH is the hexadecimal notation of the byte value).</p></item>
+<item><p>The original character is replaced by the resulting character sequence.</p>
+</item>
+</olist>
+<p><termdef id="dt-pubid" term="Public identifier"> In addition to a system
+identifier, an external identifier may include a <term>public identifier</term>.</termdef>
+An XML processor attempting to retrieve the entity's content may use the public
+identifier to try to generate an alternative <phrase diff="chg"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E88">[E88]</loc>URI reference</phrase>.
+If the processor is unable to do so, it must use the <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E88">[E88]</loc>URI
+reference</phrase> specified in the system literal. Before a match is attempted,
+all strings of white space in the public identifier must be normalized to
+single space characters (#x20), and leading and trailing white space must
+be removed.</p>
+<p>Examples of external entity declarations:</p>
+<eg>&lt;!ENTITY open-hatch
+ SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY open-hatch
+ PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
+ "http://www.textuality.com/boilerplate/OpenHatch.xml">
+&lt;!ENTITY hatch-pic
+ SYSTEM "../grafix/OpenHatch.gif"
+ NDATA gif ></eg>
+</div3>
+</div2>
+<div2 id="TextEntities">
+<head>Parsed Entities</head>
+<div3 id="sec-TextDecl">
+<head>The Text Declaration</head>
+<p>External parsed entities <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E107">[E107]</loc>should</phrase
+> each begin with a <term>text declaration</term>.</p>
+<scrap lang="ebnf">
+<head>Text Declaration</head>
+<prodgroup pcw4="12.5" pcw5="13">
+<prod id="NT-TextDecl">
+<lhs>TextDecl</lhs><rhs>&pio; <nt def="NT-VersionInfo">VersionInfo</nt>? <nt
+def="NT-EncodingDecl">EncodingDecl</nt> <nt def="NT-S">S</nt>? &pic;</rhs>
+</prod>
+</prodgroup></scrap>
+<p>The text declaration must be provided literally, not by reference to a
+parsed entity. No text declaration may appear at any position other than the
+beginning of an external parsed entity. <phrase diff="add"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E94">[E94]</loc>The text declaration
+in an external parsed entity is not considered part of its <termref def="dt-repltext">replacement
+text</termref>.</phrase></p>
+</div3>
+<div3 id="wf-entities">
+<head>Well-Formed Parsed Entities</head>
+<p>The document entity is well-formed if it matches the production labeled <nt
+def="NT-document">document</nt>. An external general parsed entity is well-formed
+if it matches the production labeled <nt def="NT-extParsedEnt">extParsedEnt</nt>. <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc>All
+external parameter entities are well-formed by definition.</phrase></p>
+<scrap lang="ebnf">
+<head>Well-Formed External Parsed Entity</head>
+<prod id="NT-extParsedEnt">
+<lhs>extParsedEnt</lhs><rhs><nt def="NT-TextDecl">TextDecl</nt>? <nt def="NT-content">content</nt></rhs>
+</prod>
+<prod id="NT-extPE" diff="del">
+<lhs>extPE</lhs><rhs><nt def="NT-TextDecl">TextDecl</nt>? <nt def="NT-extSubsetDecl">extSubsetDecl</nt></rhs>
+<com><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E109">[E109]</loc></com>
+</prod>
+</scrap>
+<p>An internal general parsed entity is well-formed if its replacement text
+matches the production labeled <nt def="NT-content">content</nt>. All internal
+parameter entities are well-formed by definition.</p>
+<p>A consequence of well-formedness in entities is that the logical and physical
+structures in an XML document are properly nested; no <termref def="dt-stag">start-tag</termref>, <termref
+def="dt-etag">end-tag</termref>, <termref def="dt-empty">empty-element tag</termref>, <termref
+def="dt-element">element</termref>, <termref def="dt-comment">comment</termref>, <termref
+def="dt-pi">processing instruction</termref>, <termref def="dt-charref">character
+reference</termref>, or <termref def="dt-entref">entity reference</termref>
+can begin in one entity and end in another.</p>
+</div3>
+<div3 id="charencoding">
+<head>Character Encoding in Entities</head>
+<p>Each external parsed entity in an XML document may use a different encoding
+for its characters. All XML processors must be able to read entities in <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E56">[E56]</loc>both
+the UTF-8 and UTF-16 encodings.</phrase> <phrase diff="add"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E77">[E77]</loc>The terms <quote>UTF-8</quote>
+and <quote>UTF-16</quote> in this specification do not apply to character
+encodings with any other labels, even if the encodings or labels are very
+similar to UTF-8 or UTF-16.</phrase></p>
+<p>Entities encoded in UTF-16 must begin with the Byte Order Mark described
+by <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>Annex
+F of <bibref ref="ISO10646"/>, Annex H of <bibref ref="ISO10646-2000"/>, section
+2.4 of <bibref ref="Unicode"/>, and section 2.7 of <bibref ref="Unicode3"/></phrase>
+(the ZERO WIDTH NO-BREAK SPACE character, #xFEFF). This is an encoding signature,
+not part of either the markup or the character data of the XML document. XML
+processors must be able to use this character to differentiate between UTF-8
+and UTF-16 encoded documents.</p>
+<p>Although an XML processor is required to read only entities in the UTF-8
+and UTF-16 encodings, it is recognized that other encodings are used around
+the world, and it may be desired for XML processors to read entities that
+use them. <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E47">[E47]</loc>In
+the absence of external character encoding information (such as MIME headers),</phrase>
+parsed entities which are stored in an encoding other than UTF-8 or UTF-16
+must begin with a text declaration <phrase diff="add">(see <specref ref="sec-TextDecl"/>) </phrase>containing
+an encoding declaration:</p>
+<scrap lang="ebnf">
+<head>Encoding Declaration</head>
+<prod id="NT-EncodingDecl">
+<lhs>EncodingDecl</lhs><rhs><nt def="NT-S">S</nt> 'encoding' <nt def="NT-Eq">Eq</nt>
+('"' <nt def="NT-EncName">EncName</nt> '"' | "'" <nt def="NT-EncName">EncName</nt>
+"'" ) </rhs>
+</prod>
+<prod id="NT-EncName">
+<lhs>EncName</lhs><rhs>[A-Za-z] ([A-Za-z0-9._] | '-')*</rhs><com>Encoding
+name contains only Latin characters</com>
+</prod>
+</scrap>
+<p>In the <termref def="dt-docent">document entity</termref>, the encoding
+declaration is part of the <termref def="dt-xmldecl">XML declaration</termref>.
+The <nt def="NT-EncName">EncName</nt> is the name of the encoding used.</p>
+<!-- FINAL EDIT: check name of IANA and charset names -->
+<p>In an encoding declaration, the values <quote><code>UTF-8</code></quote>, <quote><code>UTF-16</code></quote>, <quote><code>ISO-10646-UCS-2</code
+></quote>, and <quote><code>ISO-10646-UCS-4</code></quote> should be used
+for the various encodings and transformations of Unicode / ISO/IEC 10646,
+the values <quote><code>ISO-8859-1</code></quote>, <quote><code>ISO-8859-2</code></quote>,
+... <loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E106">[E106]</loc><phrase
+diff="chg"><quote><code>ISO-8859-</code><var>n</var></quote> (where <var>n</var>
+is the part number)</phrase> should be used for the parts of ISO 8859, and
+the values <quote><code>ISO-2022-JP</code></quote>, <quote><code>Shift_JIS</code></quote>,
+and <quote><code>EUC-JP</code></quote> should be used for the various encoded
+forms of JIS X-0208-1997. <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E57">[E57]</loc>It
+is recommended that character encodings registered (as <emph>charset</emph>s)
+with the Internet Assigned Numbers Authority <phrase diff="chg"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E58">[E58]</loc><bibref ref="IANA"/></phrase>,
+other than those just listed, be referred to using their registered names;
+other encodings should use names starting with an <quote>x-</quote> prefix.
+XML processors should match character encoding names in a case-insensitive
+way and should either interpret an IANA-registered name as the encoding registered
+at IANA for that name or treat it as unknown (processors are, of course, not
+required to support all IANA-registered encodings).</phrase></p>
+<p>In the absence of information provided by an external transport protocol
+(e.g. HTTP or MIME), it is an <termref def="dt-error">error</termref> for
+an entity including an encoding declaration to be presented to the XML processor
+in an encoding other than that named in the declaration, <phrase diff="del"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E5">[E5]</loc>for
+an encoding declaration to occur other than at the beginning of an external
+entity, </phrase>or for an entity which begins with neither a Byte Order Mark
+nor an encoding declaration to use an encoding other than UTF-8. Note that
+since ASCII is a subset of UTF-8, ordinary ASCII entities do not strictly
+need an encoding declaration.</p>
+<p diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E5">[E5]</loc>It
+is <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E36">[E36]</loc>a
+fatal</phrase> error for a <nt def="NT-TextDecl">TextDecl</nt> to occur other
+than at the beginning of an external entity.</p>
+<p>It is a <termref def="dt-fatal">fatal error</termref> when an XML processor
+encounters an entity with an encoding that it is unable to process. <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E79">[E79]</loc>It
+is a fatal error if an XML entity is determined (via default, encoding declaration,
+or higher-level protocol) to be in a certain encoding but contains octet sequences
+that are not legal in that encoding. It is also a fatal error if an XML entity
+contains no encoding declaration and its content is not legal UTF-8 or UTF-16.</phrase></p>
+<p>Examples of <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E23">[E23]</loc>text
+declarations containing </phrase>encoding declarations:</p>
+<eg>&lt;?xml encoding='UTF-8'?>
+&lt;?xml encoding='EUC-JP'?></eg>
+</div3>
+</div2>
+<div2 id="entproc">
+<head>XML Processor Treatment of Entities and References</head>
+<p>The table below summarizes the contexts in which character references,
+entity references, and invocations of unparsed entities might appear and the
+required behavior of an <termref def="dt-xml-proc">XML processor</termref>
+in each case. The labels in the leftmost column describe the recognition context: <glist>
+<gitem><label>Reference in Content</label>
+<def>
+<p>as a reference anywhere after the <termref def="dt-stag">start-tag</termref>
+and before the <termref def="dt-etag">end-tag</termref> of an element; corresponds
+to the nonterminal <nt def="NT-content">content</nt>.</p>
+</def></gitem>
+<gitem><label>Reference in Attribute Value</label>
+<def>
+<p>as a reference within either the value of an attribute in a <termref def="dt-stag">start-tag</termref>,
+or a default value in an <termref def="dt-attdecl">attribute declaration</termref>;
+corresponds to the nonterminal <nt def="NT-AttValue">AttValue</nt>.</p>
+</def></gitem>
+<gitem><label>Occurs as Attribute Value</label>
+<def>
+<p>as a <nt def="NT-Name">Name</nt>, not a reference, appearing either as
+the value of an attribute which has been declared as type <kw>ENTITY</kw>,
+or as one of the space-separated tokens in the value of an attribute which
+has been declared as type <kw>ENTITIES</kw>.</p>
+</def></gitem>
+<gitem><label>Reference in Entity Value</label>
+<def>
+<p>as a reference within a parameter or internal entity's <termref def="dt-litentval">literal
+entity value</termref> in the entity's declaration; corresponds to the nonterminal <nt
+def="NT-EntityValue">EntityValue</nt>.</p>
+</def></gitem>
+<gitem><label>Reference in DTD</label>
+<def>
+<p diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E90">[E90]</loc>as
+a reference within either the internal or external subsets of the <termref
+def="dt-doctype">DTD</termref>, but outside of an <nt def="NT-EntityValue">EntityValue</nt>, <nt
+def="NT-AttValue">AttValue</nt>, <nt def="NT-PI">PI</nt>, <nt def="NT-Comment">Comment</nt>, <nt
+def="NT-SystemLiteral">SystemLiteral</nt>, <nt def="NT-PubidLiteral">PubidLiteral</nt>,
+or the contents of an ignored conditional section (see <specref ref="sec-condition-sect"/>).</p>
+<p>.</p>
+</def></gitem>
+</glist></p>
+<table border="1" frame="border" cellpadding="7"><tbody align="center"><tr>
+<td rowspan="2" colspan="1"></td><td colspan="4" align="center" valign="bottom">Entity
+Type</td><td rowspan="2" align="center">Character</td></tr><tr align="center"
+valign="bottom"><td>Parameter</td><td>Internal General</td><td>External Parsed
+General</td><td>Unparsed</td></tr><tr align="center" valign="middle"><td align="right">Reference
+in Content</td><td><titleref href="#not-recognized">Not recognized</titleref></td>
+<td><titleref href="#included">Included</titleref></td><td><titleref href="#include-if-valid">Included
+if validating</titleref></td><td><titleref href="#forbidden">Forbidden</titleref></td>
+<td><titleref href="#included">Included</titleref></td></tr><tr align="center"
+valign="middle"><td align="right">Reference in Attribute Value</td><td><titleref
+href="#not-recognized">Not recognized</titleref></td><td><titleref href="#inliteral">Included
+in literal</titleref></td><td><titleref href="#forbidden">Forbidden</titleref></td>
+<td><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E51">[E51]</loc><titleref
+diff="chg" href="#forbidden">Forbidden</titleref></td><td><titleref href="#included">Included</titleref></td>
+</tr><tr align="center" valign="middle"><td align="right">Occurs as Attribute
+Value</td><td><titleref href="#not-recognized">Not recognized</titleref></td>
+<td><titleref href="#forbidden">Forbidden</titleref></td><td><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E51">[E51]</loc><titleref
+diff="chg" href="#forbidden">Forbidden</titleref></td><td><titleref href="#notify">Notify</titleref></td>
+<td><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E51">[E51]</loc><titleref
+diff="chg" href="#not-recognized">Not recognized</titleref></td></tr><tr align="center"
+valign="middle"><td align="right">Reference in EntityValue</td><td><titleref
+href="#inliteral">Included in literal</titleref></td><td><titleref href="#bypass">Bypassed</titleref></td>
+<td><titleref href="#bypass">Bypassed</titleref></td><td><titleref href="#forbidden">Forbidden</titleref></td>
+<td><titleref href="#included">Included</titleref></td></tr><tr align="center"
+valign="middle"><td align="right">Reference in DTD</td><td><titleref href="#as-PE">Included
+as PE</titleref></td><td><titleref href="#forbidden">Forbidden</titleref></td>
+<td><titleref href="#forbidden">Forbidden</titleref></td><td><titleref href="#forbidden">Forbidden</titleref></td>
+<td><titleref href="#forbidden">Forbidden</titleref></td></tr></tbody></table>
+<div3 id="not-recognized">
+<head>Not Recognized</head>
+<p>Outside the DTD, the <code>%</code> character has no special significance;
+thus, what would be parameter entity references in the DTD are not recognized
+as markup in <nt def="NT-content">content</nt>. Similarly, the names of unparsed
+entities are not recognized except when they appear in the value of an appropriately
+declared attribute.</p>
+</div3>
+<div3 id="included">
+<head>Included</head>
+<p><termdef id="dt-include" term="Include">An entity is <term>included</term>
+when its <termref def="dt-repltext">replacement text</termref> is retrieved
+and processed, in place of the reference itself, as though it were part of
+the document at the location the reference was recognized.</termdef> The replacement
+text may contain both <termref def="dt-chardata">character data</termref>
+and (except for parameter entities) <termref def="dt-markup">markup</termref>,
+which must be recognized in the usual way<phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E65">[E65]</loc>, except that
+the replacement text of entities used to escape markup delimiters (the entities &magicents;)
+is always treated as data</phrase>. (The string <quote><code>AT&amp;amp;T;</code></quote>
+expands to <quote><code>AT&amp;T;</code></quote> and the remaining ampersand
+is not recognized as an entity-reference delimiter.) A character reference
+is <term>included</term> when the indicated character is processed in place
+of the reference itself. </p>
+</div3>
+<div3 id="include-if-valid">
+<head>Included If Validating</head>
+<p>When an XML processor recognizes a reference to a parsed entity, in order
+to <termref def="dt-valid">validate</termref> the document, the processor
+must <termref def="dt-include">include</termref> its replacement text. If
+the entity is external, and the processor is not attempting to validate the
+XML document, the processor <termref def="dt-may">may</termref>, but need
+not, include the entity's replacement text. If a non-validating <phrase diff="chg"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E95">[E95]</loc>processor</phrase>
+does not include the replacement text, it must inform the application that
+it recognized, but did not read, the entity.</p>
+<p>This rule is based on the recognition that the automatic inclusion provided
+by the SGML and XML entity mechanism, primarily designed to support modularity
+in authoring, is not necessarily appropriate for other applications, in particular
+document browsing. Browsers, for example, when encountering an external parsed
+entity reference, might choose to provide a visual indication of the entity's
+presence and retrieve it for display only on demand.</p>
+</div3>
+<div3 id="forbidden">
+<head>Forbidden</head>
+<p>The following are forbidden, and constitute <termref def="dt-fatal">fatal</termref>
+errors:</p>
+<ulist>
+<item><p>the appearance of a reference to an <termref def="dt-unparsed">unparsed
+entity</termref>.</p></item>
+<item><p>the appearance of any character or general-entity reference in the
+DTD except within an <nt def="NT-EntityValue">EntityValue</nt> or <nt def="NT-AttValue">AttValue</nt>.</p>
+</item>
+<item><p>a reference to an external entity in an attribute value.</p></item>
+</ulist>
+</div3>
+<div3 id="inliteral">
+<head>Included in Literal</head>
+<p>When an <termref def="dt-entref">entity reference</termref> appears in
+an attribute value, or a parameter entity reference appears in a literal entity
+value, its <termref def="dt-repltext">replacement text</termref> is processed
+in place of the reference itself as though it were part of the document at
+the location the reference was recognized, except that a single or double
+quote character in the replacement text is always treated as a normal data
+character and will not terminate the literal. For example, this is well-formed:</p>
+<eg diff="chg">&lt;!-- <loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E4">[E4]</loc> -->
+<![CDATA[<!ENTITY % YN '"Yes"' >
+<!ENTITY WhatHeSaid "He said %YN;" >]]></eg>
+<p>while this is not:</p>
+<eg>&lt;!ENTITY EndAttr "27'" >
+&lt;element attribute='a-&amp;EndAttr;></eg>
+</div3>
+<div3 id="notify">
+<head>Notify</head>
+<p>When the name of an <termref def="dt-unparsed">unparsed entity</termref>
+appears as a token in the value of an attribute of declared type <kw>ENTITY</kw>
+or <kw>ENTITIES</kw>, a validating processor must inform the application of
+the <termref def="dt-sysid">system</termref> and <termref def="dt-pubid">public</termref>
+(if any) identifiers for both the entity and its associated <termref def="dt-notation">notation</termref>.</p>
+</div3>
+<div3 id="bypass">
+<head>Bypassed</head>
+<p>When a general entity reference appears in the <nt def="NT-EntityValue">EntityValue</nt>
+in an entity declaration, it is bypassed and left as is.</p>
+</div3>
+<div3 id="as-PE">
+<head>Included as PE</head>
+<p>Just as with external parsed entities, parameter entities need only be <titleref
+href="#include-if-valid">included if validating</titleref>. When a parameter-entity
+reference is recognized in the DTD and included, its <termref def="dt-repltext">replacement
+text</termref> is enlarged by the attachment of one leading and one following
+space (#x20) character; the intent is to constrain the replacement text of
+parameter entities to contain an integral number of grammatical tokens in
+the DTD. <phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E96">[E96]</loc>This
+behavior does not apply to parameter entity references within entity values;
+these are described in <specref ref="inliteral"/>.</phrase></p>
+</div3>
+</div2>
+<div2 id="intern-replacement">
+<head>Construction of Internal Entity Replacement Text</head>
+<p>In discussing the treatment of internal entities, it is useful to distinguish
+two forms of the entity's value. <termdef id="dt-litentval" term="Literal Entity Value">The <term>literal
+entity value</term> is the quoted string actually present in the entity declaration,
+corresponding to the non-terminal <nt def="NT-EntityValue">EntityValue</nt>.</termdef> <termdef
+id="dt-repltext" term="Replacement Text">The <term>replacement text</term>
+is the content of the entity, after replacement of character references and
+parameter-entity references.</termdef></p>
+<p>The literal entity value as given in an internal entity declaration (<nt
+def="NT-EntityValue">EntityValue</nt>) may contain character, parameter-entity,
+and general-entity references. Such references must be contained entirely
+within the literal entity value. The actual replacement text that is <termref
+def="dt-include">included</termref> as described above must contain the <emph>replacement
+text</emph> of any parameter entities referred to, and must contain the character
+referred to, in place of any character references in the literal entity value;
+however, general-entity references must be left as-is, unexpanded. For example,
+given the following declarations:</p>
+<eg><![CDATA[<!ENTITY % pub "&#xc9;ditions Gallimard" >
+<!ENTITY rights "All rights reserved" >
+<!ENTITY book "La Peste: Albert Camus,
+&#xA9; 1947 %pub;. &rights;" >]]></eg>
+<p>then the replacement text for the entity <quote><code>book</code></quote>
+is:</p>
+<eg>La Peste: Albert Camus,
+© 1947 Éditions Gallimard. &amp;rights;</eg>
+<p>The general-entity reference <quote><code>&amp;rights;</code></quote> would
+be expanded should the reference <quote><code>&amp;book;</code></quote> appear
+in the document's content or an attribute value.</p>
+<p>These simple rules may have complex interactions; for a detailed discussion
+of a difficult example, see <specref ref="sec-entexpand"/>.</p>
+</div2>
+<div2 id="sec-predefined-ent">
+<head>Predefined Entities</head>
+<p><termdef id="dt-escape" term="escape">Entity and character references can
+both be used to <term>escape</term> the left angle bracket, ampersand, and
+other delimiters. A set of general entities (&magicents;) is specified for
+this purpose. Numeric character references may also be used; they are expanded
+immediately when recognized and must be treated as character data, so the
+numeric character references <quote><code>&amp;#60;</code></quote> and <quote><code>&amp;#38;</code></quote>
+may be used to escape <code>&lt;</code> and <code>&amp;</code> when they occur
+in character data.</termdef></p>
+<p>All XML processors must recognize these entities whether they are declared
+or not. <termref def="dt-interop">For interoperability</termref>, valid XML
+documents should declare these entities, like any others, before using them. <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E80">[E80]</loc>If
+the entities <code>lt</code> or <code>amp</code> are declared, they must be
+declared as internal entities whose replacement text is a character reference
+to the <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E103">[E103]</loc>respective
+character (less-than sign or ampersand)</phrase> being escaped; the double
+escaping is required for these entities so that references to them produce
+a well-formed result. If the entities <code>gt</code>, <code>apos</code>,
+or <code>quot</code> are declared, they must be declared as internal entities
+whose replacement text is the single character being escaped (or a character
+reference to that character; the double escaping here is unnecessary but harmless).
+For example:</phrase></p>
+<eg><![CDATA[<!ENTITY lt "&#38;#60;">
+<!ENTITY gt "&#62;">
+<!ENTITY amp "&#38;#38;">
+<!ENTITY apos "&#39;">
+<!ENTITY quot "&#34;">]]></eg>
+<p diff="del">Note that the <code>&lt;</code> and <code>&amp;</code> characters
+in the declarations of <quote><code>lt</code></quote> and <quote><code>amp</code></quote>
+are doubly escaped to meet the requirement that entity replacement be well-formed.</p>
+</div2>
+<div2 id="Notations">
+<head>Notation Declarations</head>
+<p><termdef id="dt-notation" term="Notation"><term>Notations</term> identify
+by name the format of <termref def="dt-extent">unparsed entities</termref>,
+the format of elements which bear a notation attribute, or the application
+to which a <termref def="dt-pi">processing instruction</termref> is addressed.</termdef></p>
+<p><termdef id="dt-notdecl" term="Notation Declaration"> <term>Notation declarations</term>
+provide a name for the notation, for use in entity and attribute-list declarations
+and in attribute specifications, and an external identifier for the notation
+which may allow an XML processor or its client application to locate a helper
+application capable of processing data in the given notation.</termdef></p>
+<scrap lang="ebnf">
+<head>Notation Declarations</head>
+<prod id="NT-NotationDecl">
+<lhs>NotationDecl</lhs><rhs>'&lt;!NOTATION' <nt def="NT-S">S</nt> <nt def="NT-Name">Name</nt> <nt
+def="NT-S">S</nt> (<nt def="NT-ExternalID">ExternalID</nt> | <nt def="NT-PublicID">PublicID</nt>) <nt
+def="NT-S">S</nt>? '>'</rhs><vc def="UniqueNotationName" diff="add"/>
+</prod>
+<prod id="NT-PublicID">
+<lhs>PublicID</lhs><rhs>'PUBLIC' <nt def="NT-S">S</nt> <nt def="NT-PubidLiteral">PubidLiteral</nt> </rhs>
+</prod>
+</scrap>
+<vcnote id="UniqueNotationName" diff="add"><head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E22">[E22]</loc>Unique
+Notation Name</head><p>Only one notation declaration can declare a given <nt
+def="NT-Name">Name</nt>.</p>
+</vcnote>
+<p>XML processors must provide applications with the name and external identifier(s)
+of any notation declared and referred to in an attribute value, attribute
+definition, or entity declaration. They may additionally resolve the external
+identifier into the <termref def="dt-sysid">system identifier</termref>, file
+name, or other information needed to allow the application to call a processor
+for data in the notation described. (It is not an error, however, for XML
+documents to declare and refer to notations for which notation-specific applications
+are not available on the system where the XML processor or application is
+running.)</p>
+</div2>
+<div2 id="sec-doc-entity">
+<head>Document Entity</head>
+<p><termdef id="dt-docent" term="Document Entity">The <term>document entity</term>
+serves as the root of the entity tree and a starting-point for an <termref
+def="dt-xml-proc">XML processor</termref>.</termdef> This specification does
+not specify how the document entity is to be located by an XML processor;
+unlike other entities, the document entity has no name and might well appear
+on a processor input stream without any identification at all.</p>
+</div2>
+</div1>
+<!-- &Conformance; -->
+<div1 id="sec-conformance">
+<head>Conformance</head>
+<div2 id="proc-types">
+<head>Validating and Non-Validating Processors</head>
+<p>Conforming <termref def="dt-xml-proc">XML processors</termref> fall into
+two classes: validating and non-validating.</p>
+<p>Validating and non-validating processors alike must report violations of
+this specification's well-formedness constraints in the content of the <termref
+def="dt-docent">document entity</termref> and any other <termref def="dt-parsedent">parsed
+entities</termref> that they read.</p>
+<p><termdef id="dt-validating" term="Validating Processor"><term>Validating
+processors</term> must<phrase diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E21">[E21]</loc>,
+at user option,</phrase> report violations of the constraints expressed by
+the declarations in the <termref def="dt-doctype">DTD</termref>, and failures
+to fulfill the validity constraints given in this specification.</termdef>
+To accomplish this, validating XML processors must read and process the entire
+DTD and all external parsed entities referenced in the document.</p>
+<p>Non-validating processors are required to check only the <termref def="dt-docent">document
+entity</termref>, including the entire internal DTD subset, for well-formedness. <termdef
+id="dt-use-mdecl" term="Process Declarations"> While they are not required
+to check the document for validity, they are required to <term>process</term>
+all the declarations they read in the internal DTD subset and in any parameter
+entity that they read, up to the first reference to a parameter entity that
+they do <emph>not</emph> read; that is to say, they must use the information
+in those declarations to <titleref href="#AVNormalize">normalize</titleref>
+attribute values, <titleref href="#included">include</titleref> the replacement
+text of internal entities, and supply <titleref href="#sec-attr-defaults">default
+attribute values</titleref>.</termdef> <phrase diff="add"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E33">[E33]</loc>Except when <code>standalone="yes"</code>, </phrase>they
+must not <termref def="dt-use-mdecl">process</termref> <termref def="dt-entdecl">entity
+declarations</termref> or <termref def="dt-attdecl">attribute-list declarations</termref>
+encountered after a reference to a parameter entity that is not read, since
+the entity may have contained overriding declarations.</p>
+</div2>
+<div2 id="safe-behavior">
+<head>Using XML Processors</head>
+<p>The behavior of a validating XML processor is highly predictable; it must
+read every piece of a document and report all well-formedness and validity
+violations. Less is required of a non-validating processor; it need not read
+any part of the document other than the document entity. This has two effects
+that may be important to users of XML processors:</p>
+<ulist>
+<item><p>Certain well-formedness errors, specifically those that require reading
+external entities, may not be detected by a non-validating processor. Examples
+include the constraints entitled <titleref href="#wf-entdeclared">Entity Declared</titleref>, <titleref
+href="#textent">Parsed Entity</titleref>, and <titleref href="#norecursion">No
+Recursion</titleref>, as well as some of the cases described as <titleref
+href="#forbidden">forbidden</titleref> in <specref ref="entproc"/>.</p></item>
+<item><p>The information passed from the processor to the application may
+vary, depending on whether the processor reads parameter and external entities.
+For example, a non-validating processor may not <titleref href="#AVNormalize">normalize</titleref>
+attribute values, <titleref href="#included">include</titleref> the replacement
+text of internal entities, or supply <titleref href="#sec-attr-defaults">default
+attribute values</titleref>, where doing so depends on having read declarations
+in external or parameter entities.</p></item>
+</ulist>
+<p>For maximum reliability in interoperating between different XML processors,
+applications which use non-validating processors should not rely on any behaviors
+not required of such processors. Applications which require facilities such
+as the use of default attributes or internal entities which are declared in
+external entities should use validating XML processors.</p>
+</div2>
+</div1>
+<div1 id="sec-notation">
+<head>Notation</head>
+<p>The formal grammar of XML is given in this specification using a simple
+Extended Backus-Naur Form (EBNF) notation. Each rule in the grammar defines
+one symbol, in the form</p>
+<eg>symbol ::= expression</eg>
+<p>Symbols are written with an initial capital letter if they are <phrase
+diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E42">[E42]</loc>the
+start symbol of a regular language,</phrase> otherwise with an initial lower
+case letter. Literal strings are quoted.</p>
+<p>Within the expression on the right-hand side of a rule, the following expressions
+are used to match strings of one or more characters: <glist>
+<gitem><label><code>#xN</code></label>
+<def>
+<p>where <code>N</code> is a hexadecimal integer, the expression matches the
+character in ISO/IEC 10646 whose canonical (UCS-4) code value, when interpreted
+as an unsigned binary number, has the value indicated. The number of leading
+zeros in the <code>#xN</code> form is insignificant; the number of leading
+zeros in the corresponding code value is governed by the character encoding
+in use and is not significant for XML.</p>
+</def></gitem>
+<gitem><label><code>[a-zA-Z]</code>, <code>[#xN-#xN]</code></label>
+<def>
+<p>matches any <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E93">[E93]</loc><nt
+def="NT-Char">Char</nt></phrase> with a value in the range(s) indicated (inclusive).</p>
+</def></gitem>
+<gitem diff="add"><label><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E3">[E3]</loc><code>[abc]</code>, <code>[#xN#xN#xN]</code
+></label>
+<def>
+<p>matches any <nt def="NT-Char">Char</nt> with a value among the characters
+enumerated. Enumerations and ranges can be mixed in one set of brackets.</p>
+</def></gitem>
+<gitem><label><code>[^a-z]</code>, <code>[^#xN-#xN]</code></label>
+<def>
+<p>matches any <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E93">[E93]</loc><nt
+def="NT-Char">Char</nt></phrase> with a value <emph>outside</emph> the range
+indicated.</p>
+</def></gitem>
+<gitem><label><code>[^abc]</code>, <code>[^#xN#xN#xN]</code></label>
+<def>
+<p>matches any <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E93">[E93]</loc><nt
+def="NT-Char">Char</nt></phrase> with a value not among the characters given. <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E3">[E3]</loc>Enumerations
+and ranges of forbidden values can be mixed in one set of brackets.</phrase></p>
+</def></gitem>
+<gitem><label><code>"string"</code></label>
+<def>
+<p>matches a literal string <termref def="dt-match">matching</termref> that
+given inside the double quotes.</p>
+</def></gitem>
+<gitem><label><code>'string'</code></label>
+<def>
+<p>matches a literal string <termref def="dt-match">matching</termref> that
+given inside the single quotes.</p>
+</def></gitem>
+</glist> These symbols may be combined to match more complex patterns as follows,
+where <code>A</code> and <code>B</code> represent simple expressions: <glist>
+<gitem><label>(<code>expression</code>)</label>
+<def>
+<p><code>expression</code> is treated as a unit and may be combined as described
+in this list.</p>
+</def></gitem>
+<gitem><label><code>A?</code></label>
+<def>
+<p>matches <code>A</code> or nothing; optional <code>A</code>.</p>
+</def></gitem>
+<gitem><label><code>A B</code></label>
+<def>
+<p>matches <code>A</code> followed by <code>B</code>. <phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E20">[E20]</loc>This
+operator has higher precedence than alternation; thus <code>A B | C D</code>
+is identical to <code>(A B) | (C D)</code>.</phrase></p>
+</def></gitem>
+<gitem><label><code>A | B</code></label>
+<def>
+<p>matches <code>A</code> or <code>B</code> but not both.</p>
+</def></gitem>
+<gitem><label><code>A - B</code></label>
+<def>
+<p>matches any string that matches <code>A</code> but does not match <code>B</code>.</p>
+</def></gitem>
+<gitem><label><code>A+</code></label>
+<def>
+<p>matches one or more occurrences of <code>A</code>.<phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E20">[E20]</loc>Concatenation
+has higher precedence than alternation; thus <code>A+ | B+</code> is identical
+to <code>(A+) | (B+)</code>.</phrase></p>
+</def></gitem>
+<gitem><label><code>A*</code></label>
+<def>
+<p>matches zero or more occurrences of <code>A</code>. <phrase diff="add"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E20">[E20]</loc>Concatenation
+has higher precedence than alternation; thus <code>A* | B*</code> is identical
+to <code>(A*) | (B*)</code>.</phrase></p>
+</def></gitem>
+</glist> Other notations used in the productions are: <glist>
+<gitem><label><code>/* ... */</code></label>
+<def>
+<p>comment.</p>
+</def></gitem>
+<gitem><label><code>[ wfc: ... ]</code></label>
+<def>
+<p>well-formedness constraint; this identifies by name a constraint on <termref
+def="dt-wellformed">well-formed</termref> documents associated with a production.</p>
+</def></gitem>
+<gitem><label><code>[ vc: ... ]</code></label>
+<def>
+<p>validity constraint; this identifies by name a constraint on <termref def="dt-valid">valid</termref>
+documents associated with a production.</p>
+</def></gitem>
+</glist></p>
+</div1>
+</body><back>
+<!-- &SGML; -->
+<!-- &Biblio; -->
+<div1 id="sec-bibliography">
+<head>References</head>
+<div2 id="sec-existing-stds">
+<head>Normative References</head>
+<blist>
+<bibl id="IANA" diff="chg" key="IANA-CHARSETS"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E58">[E58]</loc>(Internet
+Assigned Numbers Authority) <titleref>Official Names for Character Sets</titleref>,
+ed. Keld Simonsen et al. See <loc href="ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets">ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets</loc
+>. </bibl>
+<bibl id="RFC1766" href="http://www.ietf.org/rfc/rfc1766.txt" key="IETF RFC 1766">IETF
+(Internet Engineering Task Force). <titleref>RFC 1766: Tags for the Identification
+of Languages</titleref>, ed. H. Alvestrand. 1995.</bibl>
+<bibl id="ISO639-old" diff="del" key="ISO 639"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E38">[E38]</loc>
+(International Organization for Standardization). <titleref>ISO 639:1988 (E).
+Code for the representation of names of languages.</titleref> [Geneva]: International
+Organization for Standardization, 1988.</bibl>
+<bibl id="ISO3166-old" diff="del" key="ISO 3166"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E38">[E38]</loc>
+(International Organization for Standardization). <titleref>ISO 3166-1:1997
+(E). Codes for the representation of names of countries and their subdivisions &mdash;
+Part 1: Country codes</titleref> [Geneva]: International Organization for
+Standardization, 1997.</bibl>
+<bibl id="ISO10646" key="ISO/IEC 10646">ISO (International Organization for
+Standardization). <titleref>ISO/IEC 10646-1993 (E). Information technology &mdash;
+Universal Multiple-Octet Coded Character Set (UCS) &mdash; Part 1: Architecture
+and Basic Multilingual Plane.</titleref> [Geneva]: International Organization
+for Standardization, 1993 (plus amendments AM 1 through AM 7).</bibl>
+<bibl id="ISO10646-2000" diff="add" key="ISO/IEC 10646-2000"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc> ISO (International
+Organization for Standardization). <titleref>ISO/IEC 10646-1:2000. Information
+technology &mdash; Universal Multiple-Octet Coded Character Set (UCS) &mdash;
+Part 1: Architecture and Basic Multilingual Plane.</titleref> [Geneva]: International
+Organization for Standardization, 2000.</bibl>
+<bibl id="Unicode" key="Unicode">The Unicode Consortium. <emph>The Unicode
+Standard, Version 2.0.</emph> Reading, Mass.: Addison-Wesley Developers Press,
+1996.</bibl>
+<bibl id="Unicode3" diff="add" key="Unicode3"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>
+The Unicode Consortium. <emph>The Unicode Standard, Version 3.0.</emph> Reading,
+Mass.: Addison-Wesley Developers Press, 2000. ISBN 0-201-61633-5.</bibl>
+</blist></div2>
+<div2 id="null">
+<!--
+ID made "null" to match its previous value in the First
+Edition; it's odd, but if there's no set value, the stylesheet
+currently generates an odd string that would be backwards
+incompatible with any references anyone might have made before.
+-->
+<head>Other References</head>
+<blist>
+<bibl id="Aho" key="Aho/Ullman">Aho, Alfred V., Ravi Sethi, and Jeffrey D.
+Ullman. <titleref>Compilers: Principles, Techniques, and Tools</titleref>.
+Reading: Addison-Wesley, 1986, rpt. corr. 1988.</bibl>
+<bibl id="Berners-Lee" key="Berners-Lee et al."> Berners-Lee, T., R. Fielding,
+and L. Masinter. <titleref>Uniform Resource Identifiers (URI): Generic Syntax
+and Semantics</titleref>. 1997. (Work in progress; see updates to RFC1738.)</bibl>
+<bibl id="ABK" diff="chg" key="Brüggemann-Klein"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E2">[E2]</loc>Brüggemann-Klein,
+Anne. Formal Models in Document Processing. Habilitationsschrift. Faculty
+of Mathematics at the University of Freiburg, 1993. (See <loc href="ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps">ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps</loc
+>.)</bibl>
+<bibl id="ABKDW" diff="chg" key="Brüggemann-Klein and Wood"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E2">[E2]</loc>Brüggemann-Klein,
+Anne, and Derick Wood. <titleref>Deterministic Regular Languages</titleref>.
+Universität Freiburg, Institut für Informatik, Bericht 38, Oktober 1991. Extended
+abstract in A. Finkel, M. Jantzen, Hrsg., STACS 1992, S. 173-184. Springer-Verlag,
+Berlin 1992. Lecture Notes in Computer Science 577. Full version titled <titleref>One-Unambiguous
+Regular Languages</titleref> in Information and Computation 140 (2): 229-253,
+February 1998.</bibl>
+<bibl id="Clark" key="Clark">James Clark. Comparison of SGML and XML. See <loc
+href="http://www.w3.org/TR/NOTE-sgml-xml-971215">http://www.w3.org/TR/NOTE-sgml-xml-971215</loc>. </bibl>
+<bibl id="IANA-LANGCODES" diff="add" href="http://www.isi.edu/in-notes/iana/assignments/languages/"
+key="IANA-LANGCODES"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E58">[E58]</loc>(Internet
+Assigned Numbers Authority) <titleref>Registry of Language Tags</titleref>,
+ed. Keld Simonsen et al.</bibl>
+<bibl id="RFC1738" diff="del" href="http://www.ietf.org/rfc/rfc1738.txt" key="IETF RFC1738">IETF
+(Internet Engineering Task Force). <titleref>RFC 1738: Uniform Resource Locators
+(URL)</titleref>, ed. T. Berners-Lee, L. Masinter, M. McCahill. 1994. </bibl>
+<bibl id="RFC1808" diff="del" href="http://www.ietf.org/rfc/rfc1808.txt" key="IETF RFC1808">IETF
+(Internet Engineering Task Force). <titleref>RFC 1808: Relative Uniform Resource
+Locators</titleref>, ed. R. Fielding. 1995. </bibl>
+<bibl id="RFC2141" href="http://www.ietf.org/rfc/rfc2141.txt" key="IETF RFC2141">IETF
+(Internet Engineering Task Force). <emph>RFC 2141: URN Syntax</emph>, ed.
+R. Moats. 1997. </bibl>
+<bibl id="rfc2279" diff="add" href="http://www.ietf.org/rfc/rfc2279.txt" key="IETF RFC 2279"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E78">[E78]</loc>IETF
+(Internet Engineering Task Force). <titleref>RFC 2279: UTF-8, a transformation
+format of ISO 10646</titleref>, <phrase diff="add">ed. F. Yergeau, </phrase>1998.</bibl>
+<bibl id="rfc2376" diff="add" href="http://www.ietf.org/rfc/rfc2376.txt" key="IETF RFC 2376"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E48">[E48]</loc>IETF
+(Internet Engineering Task Force). <titleref>RFC 2376: XML Media Types</titleref>.
+ed. E. Whitehead, M. Murata. 1998.</bibl>
+<bibl id="rfc2396" diff="add" href="http://www.ietf.org/rfc/rfc2396.txt" key="IETF RFC 2396"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E66">[E66]</loc>IETF
+(Internet Engineering Task Force). <titleref>RFC 2396: Uniform Resource Identifiers
+(URI): Generic Syntax</titleref>. T. Berners-Lee, R. Fielding, L. Masinter.
+1998.</bibl>
+<bibl id="rfc2732" diff="add" href="http://www.ietf.org/rfc/rfc2732.txt" key="IETF RFC 2732"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E66">[E66]</loc>IETF
+(Internet Engineering Task Force). <titleref>RFC 2732: Format for Literal
+IPv6 Addresses in URL's</titleref>. R. Hinden, B. Carpenter, L. Masinter.
+1999.</bibl>
+<bibl id="rfc2781" diff="add" href="http://www.ietf.org/rfc/rfc2781.txt" key="IETF RFC 2781"><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E77">[E77]</loc>
+IETF (Internet Engineering Task Force). <emph>RFC 2781: UTF-16, an encoding
+of ISO 10646</emph>, ed. P. Hoffman, F. Yergeau. 2000.</bibl>
+<bibl id="ISO639" diff="add" key="ISO 639"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E38">[E38]</loc>
+(International Organization for Standardization). <titleref>ISO 639:1988 (E).
+Code for the representation of names of languages.</titleref> [Geneva]: International
+Organization for Standardization, 1988.</bibl>
+<bibl id="ISO3166" diff="add" key="ISO 3166"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E38">[E38]</loc>
+(International Organization for Standardization). <titleref>ISO 3166-1:1997
+(E). Codes for the representation of names of countries and their subdivisions &mdash;
+Part 1: Country codes</titleref> [Geneva]: International Organization for
+Standardization, 1997.</bibl>
+<bibl id="ISO8879" key="ISO 8879">ISO (International Organization for Standardization). <titleref>ISO
+8879:1986(E). Information processing &mdash; Text and Office Systems &mdash;
+Standard Generalized Markup Language (SGML).</titleref> First edition &mdash;
+1986-10-15. [Geneva]: International Organization for Standardization, 1986. </bibl>
+<bibl id="ISO10744" key="ISO/IEC 10744">ISO (International Organization for
+Standardization). <titleref>ISO/IEC 10744-1992 (E). Information technology &mdash;
+Hypermedia/Time-based Structuring Language (HyTime). </titleref> [Geneva]:
+International Organization for Standardization, 1992. <emph>Extended Facilities
+Annexe.</emph> [Geneva]: International Organization for Standardization, 1996. </bibl>
+<bibl id="websgml" diff="add" href="http://www.sgmlsource.com/8879rev/n0029.htm"
+key="WEBSGML"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E43">[E43]</loc>ISO
+(International Organization for Standardization). <titleref>ISO 8879:1986
+TC2. Information technology &mdash; Document Description and Processing Languages. </titleref>
+[Geneva]: International Organization for Standardization, 1998.</bibl>
+<bibl id="xml-names" diff="add" xmlns:xlink="http://www.w3.org/TR/WD-xlink"
+href="http://www.w3.org/TR/REC-xml-names/" key="XML Names"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E98">[E98]</loc>Tim Bray,
+Dave Hollander, and Andrew Layman, editors. <titleref>Namespaces in XML</titleref>.
+Textuality, Hewlett-Packard, and Microsoft. World Wide Web Consortium, 1999.</bibl>
+</blist></div2>
+</div1>
+<div1 id="CharClasses">
+<head>Character Classes</head>
+<p>Following the characteristics defined in the Unicode standard, characters
+are classed as base characters (among others, these contain the alphabetic
+characters of the Latin alphabet<phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E84">[E84]</loc>, without
+diacritics</phrase>), ideographic characters, and combining characters (among
+others, this class contains most diacritics)<phrase diff="del"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E30">[E30]</loc>; these classes
+combine to form the class of letters.</phrase> Digits and extenders are also
+distinguished.</p>
+<scrap id="CHARACTERS" lang="ebnf">
+<head>Characters</head>
+<prodgroup pcw3="3" pcw4="15">
+<prod id="NT-Letter">
+<lhs>Letter</lhs><rhs><nt def="NT-BaseChar">BaseChar</nt> | <nt def="NT-Ideographic">Ideographic</nt></rhs>
+</prod>
+<prod id="NT-BaseChar">
+<lhs>BaseChar</lhs><rhs>[#x0041-#x005A] |&nbsp;[#x0061-#x007A] |&nbsp;[#x00C0-#x00D6]
+|&nbsp;[#x00D8-#x00F6] |&nbsp;[#x00F8-#x00FF] |&nbsp;[#x0100-#x0131] |&nbsp;[#x0134-#x013E]
+|&nbsp;[#x0141-#x0148] |&nbsp;[#x014A-#x017E] |&nbsp;[#x0180-#x01C3] |&nbsp;[#x01CD-#x01F0]
+|&nbsp;[#x01F4-#x01F5] |&nbsp;[#x01FA-#x0217] |&nbsp;[#x0250-#x02A8] |&nbsp;[#x02BB-#x02C1]
+|&nbsp;#x0386 |&nbsp;[#x0388-#x038A] |&nbsp;#x038C |&nbsp;[#x038E-#x03A1]
+|&nbsp;[#x03A3-#x03CE] |&nbsp;[#x03D0-#x03D6] |&nbsp;#x03DA |&nbsp;#x03DC
+|&nbsp;#x03DE |&nbsp;#x03E0 |&nbsp;[#x03E2-#x03F3] |&nbsp;[#x0401-#x040C]
+|&nbsp;[#x040E-#x044F] |&nbsp;[#x0451-#x045C] |&nbsp;[#x045E-#x0481] |&nbsp;[#x0490-#x04C4]
+|&nbsp;[#x04C7-#x04C8] |&nbsp;[#x04CB-#x04CC] |&nbsp;[#x04D0-#x04EB] |&nbsp;[#x04EE-#x04F5]
+|&nbsp;[#x04F8-#x04F9] |&nbsp;[#x0531-#x0556] |&nbsp;#x0559 |&nbsp;[#x0561-#x0586]
+|&nbsp;[#x05D0-#x05EA] |&nbsp;[#x05F0-#x05F2] |&nbsp;[#x0621-#x063A] |&nbsp;[#x0641-#x064A]
+|&nbsp;[#x0671-#x06B7] |&nbsp;[#x06BA-#x06BE] |&nbsp;[#x06C0-#x06CE] |&nbsp;[#x06D0-#x06D3]
+|&nbsp;#x06D5 |&nbsp;[#x06E5-#x06E6] |&nbsp;[#x0905-#x0939] |&nbsp;#x093D
+|&nbsp;[#x0958-#x0961] |&nbsp;[#x0985-#x098C] |&nbsp;[#x098F-#x0990] |&nbsp;[#x0993-#x09A8]
+|&nbsp;[#x09AA-#x09B0] |&nbsp;#x09B2 |&nbsp;[#x09B6-#x09B9] |&nbsp;[#x09DC-#x09DD]
+|&nbsp;[#x09DF-#x09E1] |&nbsp;[#x09F0-#x09F1] |&nbsp;[#x0A05-#x0A0A] |&nbsp;[#x0A0F-#x0A10]
+|&nbsp;[#x0A13-#x0A28] |&nbsp;[#x0A2A-#x0A30] |&nbsp;[#x0A32-#x0A33] |&nbsp;[#x0A35-#x0A36]
+|&nbsp;[#x0A38-#x0A39] |&nbsp;[#x0A59-#x0A5C] |&nbsp;#x0A5E |&nbsp;[#x0A72-#x0A74]
+|&nbsp;[#x0A85-#x0A8B] |&nbsp;#x0A8D |&nbsp;[#x0A8F-#x0A91] |&nbsp;[#x0A93-#x0AA8]
+|&nbsp;[#x0AAA-#x0AB0] |&nbsp;[#x0AB2-#x0AB3] |&nbsp;[#x0AB5-#x0AB9] |&nbsp;#x0ABD
+|&nbsp;#x0AE0 |&nbsp;[#x0B05-#x0B0C] |&nbsp;[#x0B0F-#x0B10] |&nbsp;[#x0B13-#x0B28]
+|&nbsp;[#x0B2A-#x0B30] |&nbsp;[#x0B32-#x0B33] |&nbsp;[#x0B36-#x0B39] |&nbsp;#x0B3D
+|&nbsp;[#x0B5C-#x0B5D] |&nbsp;[#x0B5F-#x0B61] |&nbsp;[#x0B85-#x0B8A] |&nbsp;[#x0B8E-#x0B90]
+|&nbsp;[#x0B92-#x0B95] |&nbsp;[#x0B99-#x0B9A] |&nbsp;#x0B9C |&nbsp;[#x0B9E-#x0B9F]
+|&nbsp;[#x0BA3-#x0BA4] |&nbsp;[#x0BA8-#x0BAA] |&nbsp;[#x0BAE-#x0BB5] |&nbsp;[#x0BB7-#x0BB9]
+|&nbsp;[#x0C05-#x0C0C] |&nbsp;[#x0C0E-#x0C10] |&nbsp;[#x0C12-#x0C28] |&nbsp;[#x0C2A-#x0C33]
+|&nbsp;[#x0C35-#x0C39] |&nbsp;[#x0C60-#x0C61] |&nbsp;[#x0C85-#x0C8C] |&nbsp;[#x0C8E-#x0C90]
+|&nbsp;[#x0C92-#x0CA8] |&nbsp;[#x0CAA-#x0CB3] |&nbsp;[#x0CB5-#x0CB9] |&nbsp;#x0CDE
+|&nbsp;[#x0CE0-#x0CE1] |&nbsp;[#x0D05-#x0D0C] |&nbsp;[#x0D0E-#x0D10] |&nbsp;[#x0D12-#x0D28]
+|&nbsp;[#x0D2A-#x0D39] |&nbsp;[#x0D60-#x0D61] |&nbsp;[#x0E01-#x0E2E] |&nbsp;#x0E30
+|&nbsp;[#x0E32-#x0E33] |&nbsp;[#x0E40-#x0E45] |&nbsp;[#x0E81-#x0E82] |&nbsp;#x0E84
+|&nbsp;[#x0E87-#x0E88] |&nbsp;#x0E8A |&nbsp;#x0E8D |&nbsp;[#x0E94-#x0E97]
+|&nbsp;[#x0E99-#x0E9F] |&nbsp;[#x0EA1-#x0EA3] |&nbsp;#x0EA5 |&nbsp;#x0EA7
+|&nbsp;[#x0EAA-#x0EAB] |&nbsp;[#x0EAD-#x0EAE] |&nbsp;#x0EB0 |&nbsp;[#x0EB2-#x0EB3]
+|&nbsp;#x0EBD |&nbsp;[#x0EC0-#x0EC4] |&nbsp;[#x0F40-#x0F47] |&nbsp;[#x0F49-#x0F69]
+|&nbsp;[#x10A0-#x10C5] |&nbsp;[#x10D0-#x10F6] |&nbsp;#x1100 |&nbsp;[#x1102-#x1103]
+|&nbsp;[#x1105-#x1107] |&nbsp;#x1109 |&nbsp;[#x110B-#x110C] |&nbsp;[#x110E-#x1112]
+|&nbsp;#x113C |&nbsp;#x113E |&nbsp;#x1140 |&nbsp;#x114C |&nbsp;#x114E |&nbsp;#x1150
+|&nbsp;[#x1154-#x1155] |&nbsp;#x1159 |&nbsp;[#x115F-#x1161] |&nbsp;#x1163
+|&nbsp;#x1165 |&nbsp;#x1167 |&nbsp;#x1169 |&nbsp;[#x116D-#x116E] |&nbsp;[#x1172-#x1173]
+|&nbsp;#x1175 |&nbsp;#x119E |&nbsp;#x11A8 |&nbsp;#x11AB |&nbsp;[#x11AE-#x11AF]
+|&nbsp;[#x11B7-#x11B8] |&nbsp;#x11BA |&nbsp;[#x11BC-#x11C2] |&nbsp;#x11EB
+|&nbsp;#x11F0 |&nbsp;#x11F9 |&nbsp;[#x1E00-#x1E9B] |&nbsp;[#x1EA0-#x1EF9]
+|&nbsp;[#x1F00-#x1F15] |&nbsp;[#x1F18-#x1F1D] |&nbsp;[#x1F20-#x1F45] |&nbsp;[#x1F48-#x1F4D]
+|&nbsp;[#x1F50-#x1F57] |&nbsp;#x1F59 |&nbsp;#x1F5B |&nbsp;#x1F5D |&nbsp;[#x1F5F-#x1F7D]
+|&nbsp;[#x1F80-#x1FB4] |&nbsp;[#x1FB6-#x1FBC] |&nbsp;#x1FBE |&nbsp;[#x1FC2-#x1FC4]
+|&nbsp;[#x1FC6-#x1FCC] |&nbsp;[#x1FD0-#x1FD3] |&nbsp;[#x1FD6-#x1FDB] |&nbsp;[#x1FE0-#x1FEC]
+|&nbsp;[#x1FF2-#x1FF4] |&nbsp;[#x1FF6-#x1FFC] |&nbsp;#x2126 |&nbsp;[#x212A-#x212B]
+|&nbsp;#x212E |&nbsp;[#x2180-#x2182] |&nbsp;[#x3041-#x3094] |&nbsp;[#x30A1-#x30FA]
+|&nbsp;[#x3105-#x312C] |&nbsp;[#xAC00-#xD7A3] </rhs>
+</prod>
+<prod id="NT-Ideographic">
+<lhs>Ideographic</lhs><rhs>[#x4E00-#x9FA5] |&nbsp;#x3007 |&nbsp;[#x3021-#x3029] </rhs>
+</prod>
+<prod id="NT-CombiningChar">
+<lhs>CombiningChar</lhs><rhs>[#x0300-#x0345] |&nbsp;[#x0360-#x0361] |&nbsp;[#x0483-#x0486]
+|&nbsp;[#x0591-#x05A1] |&nbsp;[#x05A3-#x05B9] |&nbsp;[#x05BB-#x05BD] |&nbsp;#x05BF
+|&nbsp;[#x05C1-#x05C2] |&nbsp;#x05C4 |&nbsp;[#x064B-#x0652] |&nbsp;#x0670
+|&nbsp;[#x06D6-#x06DC] |&nbsp;[#x06DD-#x06DF] |&nbsp;[#x06E0-#x06E4] |&nbsp;[#x06E7-#x06E8]
+|&nbsp;[#x06EA-#x06ED] |&nbsp;[#x0901-#x0903] |&nbsp;#x093C |&nbsp;[#x093E-#x094C]
+|&nbsp;#x094D |&nbsp;[#x0951-#x0954] |&nbsp;[#x0962-#x0963] |&nbsp;[#x0981-#x0983]
+|&nbsp;#x09BC |&nbsp;#x09BE |&nbsp;#x09BF |&nbsp;[#x09C0-#x09C4] |&nbsp;[#x09C7-#x09C8]
+|&nbsp;[#x09CB-#x09CD] |&nbsp;#x09D7 |&nbsp;[#x09E2-#x09E3] |&nbsp;#x0A02
+|&nbsp;#x0A3C |&nbsp;#x0A3E |&nbsp;#x0A3F |&nbsp;[#x0A40-#x0A42] |&nbsp;[#x0A47-#x0A48]
+|&nbsp;[#x0A4B-#x0A4D] |&nbsp;[#x0A70-#x0A71] |&nbsp;[#x0A81-#x0A83] |&nbsp;#x0ABC
+|&nbsp;[#x0ABE-#x0AC5] |&nbsp;[#x0AC7-#x0AC9] |&nbsp;[#x0ACB-#x0ACD] |&nbsp;[#x0B01-#x0B03]
+|&nbsp;#x0B3C |&nbsp;[#x0B3E-#x0B43] |&nbsp;[#x0B47-#x0B48] |&nbsp;[#x0B4B-#x0B4D]
+|&nbsp;[#x0B56-#x0B57] |&nbsp;[#x0B82-#x0B83] |&nbsp;[#x0BBE-#x0BC2] |&nbsp;[#x0BC6-#x0BC8]
+|&nbsp;[#x0BCA-#x0BCD] |&nbsp;#x0BD7 |&nbsp;[#x0C01-#x0C03] |&nbsp;[#x0C3E-#x0C44]
+|&nbsp;[#x0C46-#x0C48] |&nbsp;[#x0C4A-#x0C4D] |&nbsp;[#x0C55-#x0C56] |&nbsp;[#x0C82-#x0C83]
+|&nbsp;[#x0CBE-#x0CC4] |&nbsp;[#x0CC6-#x0CC8] |&nbsp;[#x0CCA-#x0CCD] |&nbsp;[#x0CD5-#x0CD6]
+|&nbsp;[#x0D02-#x0D03] |&nbsp;[#x0D3E-#x0D43] |&nbsp;[#x0D46-#x0D48] |&nbsp;[#x0D4A-#x0D4D]
+|&nbsp;#x0D57 |&nbsp;#x0E31 |&nbsp;[#x0E34-#x0E3A] |&nbsp;[#x0E47-#x0E4E]
+|&nbsp;#x0EB1 |&nbsp;[#x0EB4-#x0EB9] |&nbsp;[#x0EBB-#x0EBC] |&nbsp;[#x0EC8-#x0ECD]
+|&nbsp;[#x0F18-#x0F19] |&nbsp;#x0F35 |&nbsp;#x0F37 |&nbsp;#x0F39 |&nbsp;#x0F3E
+|&nbsp;#x0F3F |&nbsp;[#x0F71-#x0F84] |&nbsp;[#x0F86-#x0F8B] |&nbsp;[#x0F90-#x0F95]
+|&nbsp;#x0F97 |&nbsp;[#x0F99-#x0FAD] |&nbsp;[#x0FB1-#x0FB7] |&nbsp;#x0FB9
+|&nbsp;[#x20D0-#x20DC] |&nbsp;#x20E1 |&nbsp;[#x302A-#x302F] |&nbsp;#x3099
+|&nbsp;#x309A </rhs>
+</prod>
+<prod id="NT-Digit">
+<lhs>Digit</lhs><rhs>[#x0030-#x0039] |&nbsp;[#x0660-#x0669] |&nbsp;[#x06F0-#x06F9]
+|&nbsp;[#x0966-#x096F] |&nbsp;[#x09E6-#x09EF] |&nbsp;[#x0A66-#x0A6F] |&nbsp;[#x0AE6-#x0AEF]
+|&nbsp;[#x0B66-#x0B6F] |&nbsp;[#x0BE7-#x0BEF] |&nbsp;[#x0C66-#x0C6F] |&nbsp;[#x0CE6-#x0CEF]
+|&nbsp;[#x0D66-#x0D6F] |&nbsp;[#x0E50-#x0E59] |&nbsp;[#x0ED0-#x0ED9] |&nbsp;[#x0F20-#x0F29] </rhs>
+</prod>
+<prod id="NT-Extender">
+<lhs>Extender</lhs><rhs>#x00B7 |&nbsp;#x02D0 |&nbsp;#x02D1 |&nbsp;#x0387 |&nbsp;#x0640
+|&nbsp;#x0E46 |&nbsp;#x0EC6 |&nbsp;#x3005 |&nbsp;[#x3031-#x3035] |&nbsp;[#x309D-#x309E]
+|&nbsp;[#x30FC-#x30FE] </rhs>
+</prod>
+</prodgroup></scrap>
+<p>The character classes defined here can be derived from the Unicode <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>2.0</phrase>
+character database as follows:</p>
+<ulist>
+<item><p>Name start characters must have one of the categories Ll, Lu, Lo,
+Lt, Nl.</p></item>
+<item><p>Name characters other than Name-start characters must have one of
+the categories Mc, Me, Mn, Lm, or Nd.</p></item>
+<item><p>Characters in the compatibility area (i.e. with character code greater
+than #xF900 and less than #xFFFE) are not allowed in XML names.</p></item>
+<item><p>Characters which have a font or compatibility decomposition (i.e.
+those with a <quote>compatibility formatting tag</quote> in field 5 of the
+database -- marked by field 5 beginning with a <quote>&lt;</quote>) are not
+allowed.</p></item>
+<item><p>The following characters are treated as name-start characters rather
+than name characters, because the property file classifies them as Alphabetic:
+[#x02BB-#x02C1], #x0559, #x06E5, #x06E6.</p></item>
+<item><p>Characters #x20DD-#x20E0 are excluded (in accordance with Unicode <phrase
+diff="add"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E67">[E67]</loc>2.0</phrase>,
+section 5.14).</p></item>
+<item><p>Character #x00B7 is classified as an extender, because the property
+list so identifies it.</p></item>
+<item><p>Character #x0387 is added as a name character, because #x00B7 is
+its canonical equivalent.</p></item>
+<item><p>Characters ':' and '_' are allowed as name-start characters.</p>
+</item>
+<item><p>Characters '-' and '.' are allowed as name characters.</p></item>
+</ulist>
+</div1>
+<inform-div1 id="sec-xml-and-sgml">
+<head>XML and SGML</head>
+<p><phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E43">[E43]</loc>XML
+is designed to be a subset of SGML, in that every XML document should also
+be a conforming SGML document.</phrase> For a detailed comparison of the additional
+restrictions that XML places on documents beyond those of SGML, see <bibref
+ref="Clark"/>.</p>
+</inform-div1>
+<inform-div1 id="sec-entexpand">
+<head>Expansion of Entity and Character References</head>
+<p>This appendix contains some examples illustrating the sequence of entity-
+and character-reference recognition and expansion, as specified in <specref
+ref="entproc"/>.</p>
+<p>If the DTD contains the declaration</p>
+<eg><![CDATA[<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
+numerically (&#38;#38;#38;) or with a general entity
+(&amp;amp;).</p>" >]]></eg>
+<p>then the XML processor will recognize the character references when it
+parses the entity declaration, and resolve them before storing the following
+string as the value of the entity <quote><code>example</code></quote>:</p>
+<eg><![CDATA[<p>An ampersand (&#38;) may be escaped
+numerically (&#38;#38;) or with a general entity
+(&amp;amp;).</p>]]></eg>
+<p>A reference in the document to <quote><code>&amp;example;</code></quote>
+will cause the text to be reparsed, at which time the start- and end-tags
+of the <el>p</el> element will be recognized and the three references will
+be recognized and expanded, resulting in a <el>p</el> element with the following
+content (all data, no delimiters or markup):</p>
+<eg><![CDATA[An ampersand (&) may be escaped
+numerically (&#38;) or with a general entity
+(&amp;).]]></eg>
+<p>A more complex example will illustrate the rules and their effects fully.
+In the following example, the line numbers are solely for reference.</p>
+<eg><![CDATA[1 <?xml version='1.0'?>
+2 <!DOCTYPE test [
+3 <!ELEMENT test (#PCDATA) >
+4 <!ENTITY % xx '&#37;zz;'>
+5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
+6 %xx;
+7 ]>
+8 <test>This sample shows a &tricky; method.</test>]]></eg>
+<p>This produces the following:</p>
+<ulist spacing="compact">
+<item><p>in line 4, the reference to character 37 is expanded immediately,
+and the parameter entity <quote><code>xx</code></quote> is stored in the symbol
+table with the value <quote><code>%zz;</code></quote>. Since the replacement
+text is not rescanned, the reference to parameter entity <quote><code>zz</code></quote>
+is not recognized. (And it would be an error if it were, since <quote><code>zz</code></quote>
+is not yet declared.)</p></item>
+<item><p>in line 5, the character reference <quote><code>&amp;#60;</code></quote>
+is expanded immediately and the parameter entity <quote><code>zz</code></quote>
+is stored with the replacement text <quote><code>&lt;!ENTITY tricky "error-prone"
+></code></quote>, which is a well-formed entity declaration.</p></item>
+<item><p>in line 6, the reference to <quote><code>xx</code></quote> is recognized,
+and the replacement text of <quote><code>xx</code></quote> (namely <quote><code>%zz;</code></quote>)
+is parsed. The reference to <quote><code>zz</code></quote> is recognized in
+its turn, and its replacement text (<quote><code>&lt;!ENTITY tricky "error-prone"
+></code></quote>) is parsed. The general entity <quote><code>tricky</code></quote>
+has now been declared, with the replacement text <quote><code>error-prone</code></quote>.</p>
+</item>
+<item><p>in line 8, the reference to the general entity <quote><code>tricky</code></quote>
+is recognized, and it is expanded, so the full content of the <el>test</el>
+element is the self-describing (and ungrammatical) string <emph>This sample
+shows a error-prone method.</emph></p></item>
+</ulist>
+</inform-div1>
+<inform-div1 id="determinism">
+<head>Deterministic Content Models</head>
+<p><phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E102">[E102]</loc>As
+noted in <specref ref="sec-element-content"/>, it is required that content
+models in element type declarations be deterministic. This requirement is <termref
+def="dt-compat">for compatibility</termref> with SGML (which calls deterministic
+content models <quote>unambiguous</quote>);</phrase> XML processors built
+using SGML systems may flag non-deterministic content models as errors.</p>
+<p>For example, the content model <code>((b, c) | (b, d))</code> is non-deterministic,
+because given an initial <el>b</el> the <phrase diff="chg"><loc role="erratumref"
+href="http://www.w3.org/XML/xml-19980210-errata#E95">[E95]</loc>XML processor</phrase>
+cannot know which <el>b</el> in the model is being matched without looking
+ahead to see which element follows the <el>b</el>. In this case, the two references
+to <el>b</el> can be collapsed into a single reference, making the model read <code>(b,
+(c | d))</code>. An initial <el>b</el> now clearly matches only a single name
+in the content model. The <phrase diff="chg"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E95">[E95]</loc>processor</phrase
+> doesn't need to look ahead to see what follows; either <el>c</el> or <el>d</el>
+would be accepted.</p>
+<p>More formally: a finite state automaton may be constructed from the content
+model using the standard algorithms, e.g. algorithm 3.5 in section 3.9 of
+Aho, Sethi, and Ullman <bibref ref="Aho"/>. In many such algorithms, a follow
+set is constructed for each position in the regular expression (i.e., each
+leaf node in the syntax tree for the regular expression); if any position
+has a follow set in which more than one following position is labeled with
+the same element type name, then the content model is in error and may be
+reported as an error.</p>
+<p>Algorithms exist which allow many but not all non-deterministic content
+models to be reduced automatically to equivalent deterministic models; see
+Brüggemann-Klein 1991 <bibref ref="ABK"/>.</p>
+</inform-div1>
+<inform-div1 id="sec-guessing">
+<head><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E105">[E105]</loc><loc
+role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E48">[E48]</loc>Autodetection
+of Character Encodings</head>
+<p>The XML encoding declaration functions as an internal label on each entity,
+indicating which character encoding is in use. Before an XML processor can
+read the internal label, however, it apparently has to know what character
+encoding is in use&mdash;which is what the internal label is trying to indicate.
+In the general case, this is a hopeless situation. It is not entirely hopeless
+in XML, however, because XML limits the general case in two ways: each implementation
+is assumed to support only a finite set of character encodings, and the XML
+encoding declaration is restricted in position and content in order to make
+it feasible to autodetect the character encoding in use in each entity in
+normal cases. Also, in many cases other sources of information are available
+in addition to the XML data stream itself. Two cases may be distinguished,
+depending on whether the XML entity is presented to the processor without,
+or with, any accompanying (external) information. We consider the first case
+first.</p>
+<div2 id="sec-guessing-no-ext-info">
+<head diff="add">Detection Without External Encoding Information</head>
+<p>Because each XML entity <phrase diff="add">not accompanied by external
+encoding information and </phrase>not in UTF-8 or UTF-16 <phrase diff="chg">encoding</phrase> <emph>must</emph>
+begin with an XML encoding declaration, in which the first characters must
+be '<code>&lt;?xml</code>', any conforming processor can detect, after two
+to four octets of input, which of the following cases apply. In reading this
+list, it may help to know that in UCS-4, '&lt;' is <quote><code>#x0000003C</code></quote>
+and '?' is <quote><code>#x0000003F</code></quote>, and the Byte Order Mark
+required of UTF-16 data streams is <quote><code>#xFEFF</code></quote>. <phrase
+diff="add">The notation <var>##</var> is used to denote any byte value except <phrase
+diff="chg">that two consecutive <var>##</var>s cannot be both 00</phrase>.</phrase></p>
+<p diff="add">With a Byte Order Mark:</p>
+<table diff="add" border="1" frame="border"><tbody><tr><td><code>00 00 FE
+FF</code></td><td>UCS-4, big-endian machine (1234 order)</td></tr><tr><td><code>FF
+FE 00 00</code></td><td>UCS-4, little-endian machine (4321 order)</td></tr>
+<tr><td><code>00 00 FF FE</code></td><td>UCS-4, unusual octet order (2143)</td>
+</tr><tr><td><code>FE FF 00 00</code></td><td>UCS-4, unusual octet order (3412)</td>
+</tr><tr><td><code>FE FF ## ##</code></td><td>UTF-16, big-endian</td></tr>
+<tr><td><code>FF FE ## ##</code></td><td>UTF-16, little-endian</td></tr><tr>
+<td><code>EF BB BF</code></td><td>UTF-8</td></tr></tbody></table>
+<p diff="add">Without a Byte Order Mark:</p>
+<table diff="add" border="1" frame="border"><tbody><tr><td><code>00&nbsp;00&nbsp;00&nbsp;3C</code></td>
+<td rowspan="4">UCS-4 or other encoding with a 32-bit code unit and ASCII
+characters encoded as ASCII values, in respectively big-endian (1234), little-endian
+(4321) and two unusual byte orders (2143 and 3412). The encoding declaration
+must be read to determine which of UCS-4 or other supported 32-bit encodings
+applies.</td></tr><tr><td><code>3C 00 00 00</code></td>
+<!--<td>UCS-4, little-endian machine (4321 order)</td>-->
+</tr><tr><td><code>00 00 3C 00</code></td>
+<!--<td>UCS-4, unusual octet order (2143)</td>-->
+</tr><tr><td><code>00 3C 00 00</code></td>
+<!--<td>UCS-4, unusual octet order (3412)</td>-->
+</tr><tr><td><code>00 3C 00 3F</code></td><td>UTF-16BE or big-endian ISO-10646-UCS-2
+or other encoding with a 16-bit code unit in big-endian order and ASCII characters
+encoded as ASCII values (the encoding declaration must be read to determine
+which)</td></tr><tr><td><code>3C 00 3F 00</code></td><td>UTF-16LE or little-endian
+ISO-10646-UCS-2 or other encoding with a 16-bit code unit in little-endian
+order and ASCII characters encoded as ASCII values (the encoding declaration
+must be read to determine which)</td></tr><tr><td><code>3C 3F 78 6D</code></td>
+<td>UTF-8, ISO 646, ASCII, some part of ISO 8859, Shift-JIS, EUC, or any other
+7-bit, 8-bit, or mixed-width encoding which ensures that the characters of
+ASCII have their normal positions, width, and values; the actual encoding
+declaration must be read to detect which of these applies, but since all of
+these encodings use the same bit patterns for the relevant ASCII characters,
+the encoding declaration itself may be read reliably</td></tr><tr><td><code>4C
+6F A7 94</code></td><td>EBCDIC (in some flavor; the full encoding declaration
+must be read to tell which code page is in use)</td></tr><tr><td>Other</td>
+<td>UTF-8 without an encoding declaration, or else the data stream is mislabeled
+(lacking a required encoding declaration), corrupt, fragmentary, or enclosed
+in a wrapper of some kind</td></tr></tbody></table>
+<note diff="add">
+<p>In cases above which do not require reading the encoding declaration to
+determine the encoding, section 4.3.3 still requires that the encoding declaration,
+if present, be read and that the encoding name be checked to match the actual
+encoding of the entity. Also, it is possible that new character encodings
+will be invented that will make it necessary to use the encoding declaration
+to determine the encoding, in cases where this is not required at present.</p>
+</note>
+<p>This level of autodetection is enough to read the XML encoding declaration
+and parse the character-encoding identifier, which is still necessary to distinguish
+the individual members of each family of encodings (e.g. to tell UTF-8 from
+8859, and the parts of 8859 from each other, or to distinguish the specific
+EBCDIC code page in use, and so on).</p>
+<p>Because the contents of the encoding declaration are restricted to <phrase
+diff="chg">characters from the ASCII repertoire (however encoded)</phrase>,
+a processor can reliably read the entire encoding declaration as soon as it
+has detected which family of encodings is in use. Since in practice, all widely
+used character encodings fall into one of the categories above, the XML encoding
+declaration allows reasonably reliable in-band labeling of character encodings,
+even when external sources of information at the operating-system or transport-protocol
+level are unreliable. <phrase diff="del">Note that since external parsed entities
+in UTF-16 may begin with any character, this autodetection does not always
+work. Also, </phrase><phrase diff="add">Character encodings such as UTF-7
+that make overloaded usage of ASCII-valued bytes may fail to be reliably detected.</phrase></p>
+<p>Once the processor has detected the character encoding in use, it can act
+appropriately, whether by invoking a separate input routine for each case,
+or by calling the proper conversion function on each character of input.</p>
+<p>Like any self-labeling system, the XML encoding declaration will not work
+if any software changes the entity's character set or encoding without updating
+the encoding declaration. Implementors of character-encoding routines should
+be careful to ensure the accuracy of the internal and external information
+used to label the entity.</p>
+</div2>
+<div2 id="sec-guessing-with-ext-info">
+<head diff="add">Priorities in the Presence of External Encoding Information</head>
+<p>The second possible case occurs when the XML entity is accompanied by encoding
+information, as in some file systems and some network protocols. When multiple
+sources of information are available, their relative priority and the preferred
+method of handling conflict should be specified as part of the higher-level
+protocol used to deliver XML. <phrase diff="chg">In particular, please refer
+to <bibref ref="rfc2376"/> or its successor, which defines the <code>text/xml</code>
+and <code>application/xml</code> MIME types and provides some useful guidance.
+In the interests of interoperability, however, the following rule is recommended.</phrase></p>
+<ulist>
+<item><p>If an XML entity is in a file, the Byte-Order Mark and encoding declaration <phrase
+diff="del">PI </phrase>are used (if present) to determine the character encoding.<phrase
+diff="del"><loc role="erratumref" href="http://www.w3.org/XML/xml-19980210-errata#E74">[E74]</loc>
+All other heuristics and sources of information are solely for error recovery.</phrase></p>
+</item>
+</ulist>
+<ulist diff="del">
+<item><p>If an XML entity is delivered with a MIME type of text/xml, then
+the <code>charset</code> parameter on the MIME type determines the character
+encoding method; all other heuristics and sources of information are solely
+for error recovery.</p></item>
+<item><p>If an XML entity is delivered with a MIME type of application/xml,
+then the Byte-Order Mark and encoding-declaration PI are used (if present)
+to determine the character encoding. All other heuristics and sources of information
+are solely for error recovery.</p></item>
+</ulist>
+<p diff="del">These rules apply only in the absence of protocol-level documentation;
+in particular, when the MIME types text/xml and application/xml are defined,
+the recommendations of the relevant RFC will supersede these rules.</p>
+</div2>
+</inform-div1>
+<inform-div1 id="sec-xml-wg">
+<head>W3C XML Working Group</head>
+<p>This specification was prepared and approved for publication by the W3C
+XML Working Group (WG). WG approval of this specification does not necessarily
+imply that all WG members voted for its approval. The current and former members
+of the XML WG are:</p>
+<orglist>
+<member><name>Jon Bosak</name><affiliation>Sun</affiliation><role>Chair</role>
+</member>
+<member><name>James Clark</name><role>Technical Lead</role></member>
+<member><name>Tim Bray</name><affiliation>Textuality and Netscape</affiliation>
+<role>XML Co-editor</role></member>
+<member><name>Jean Paoli</name><affiliation>Microsoft</affiliation><role>XML
+Co-editor</role></member>
+<member><name>C. M. Sperberg-McQueen</name><affiliation>U. of Ill.</affiliation>
+<role>XML Co-editor</role></member>
+<member><name>Dan Connolly</name><affiliation>W3C</affiliation><role>W3C Liaison</role>
+</member>
+<member><name>Paula Angerstein</name><affiliation>Texcel</affiliation></member>
+<member><name>Steve DeRose</name><affiliation>INSO</affiliation></member>
+<member><name>Dave Hollander</name><affiliation>HP</affiliation></member>
+<member><name>Eliot Kimber</name><affiliation>ISOGEN</affiliation></member>
+<member><name>Eve Maler</name><affiliation>ArborText</affiliation></member>
+<member><name>Tom Magliery</name><affiliation>NCSA</affiliation></member>
+<member><name>Murray Maloney</name><affiliation diff="chg">SoftQuad, Grif
+SA, Muzmo and Veo Systems</affiliation></member>
+<member><name diff="chg">MURATA Makoto (FAMILY Given)</name><affiliation>Fuji
+Xerox Information Systems</affiliation></member>
+<member><name>Joel Nava</name><affiliation>Adobe</affiliation></member>
+<member><name>Conleth O'Connell</name><affiliation>Vignette</affiliation>
+</member>
+<member><name>Peter Sharpe</name><affiliation>SoftQuad</affiliation></member>
+<member><name>John Tigue</name><affiliation>DataChannel</affiliation></member>
+</orglist>
+</inform-div1>
+<inform-div1 id="sec-core-wg" diff="add">
+<head>W3C XML Core Group</head>
+<p>The second edition of this specification was prepared by the W3C XML Core
+Working Group (WG). The members of the WG at the time of publication of this
+edition were:</p>
+<orglist>
+<member><name>Paula Angerstein</name><affiliation>Vignette</affiliation></member>
+<member><name>Daniel Austin</name><affiliation>Ask Jeeves</affiliation></member>
+<member><name>Tim Boland</name></member>
+<member><name>Allen Brown</name><affiliation>Microsoft</affiliation></member>
+<member><name>Dan Connolly</name><affiliation>W3C</affiliation><role>Staff
+Contact</role></member>
+<member><name>John Cowan</name><affiliation>Reuters Limited</affiliation>
+</member>
+<member><name>John Evdemon</name><affiliation>XMLSolutions Corporation</affiliation>
+</member>
+<member><name>Paul Grosso</name><affiliation>Arbortext</affiliation><role>Co-Chair</role>
+</member>
+<member><name>Arnaud Le Hors</name><affiliation>IBM</affiliation><role>Co-Chair</role>
+</member>
+<member><name>Eve Maler</name><affiliation>Sun Microsystems</affiliation>
+<role>Second Edition Editor</role></member>
+<member><name>Jonathan Marsh</name><affiliation>Microsoft</affiliation></member>
+<member><name>MURATA Makoto (FAMILY Given)</name><affiliation>IBM</affiliation>
+</member>
+<member><name>Mark Needleman</name><affiliation>Data Research Associates</affiliation>
+</member>
+<member><name>David Orchard</name><affiliation>Jamcracker</affiliation></member>
+<member><name>Lew Shannon</name><affiliation>NCR</affiliation></member>
+<member><name>Richard Tobin</name><affiliation>University of Edinburgh</affiliation>
+</member>
+<member><name>Daniel Veillard</name><affiliation>W3C</affiliation></member>
+<member><name>Dan Vint</name><affiliation>Lexica</affiliation></member>
+<member><name>Norman Walsh</name><affiliation>Sun Microsystems</affiliation>
+</member>
+<member><name>François Yergeau</name><affiliation>Alis Technologies</affiliation>
+<role>Errata List Editor</role></member>
+<member><name>Kongyi Zhou</name><affiliation>Oracle</affiliation></member>
+</orglist>
+</inform-div1>
+<inform-div1 diff="add">
+<head>Production Notes</head>
+<p>This Second Edition was encoded in the <loc href="http://www.w3.org/XML/1998/06/xmlspec-v21.dtd">XMLspec
+DTD</loc> (which has <loc href="http://www.w3.org/XML/1998/06/xmlspec-report-v21.htm">documentation</loc>
+available). The HTML versions were produced with a combination of the <loc
+href="http://www.w3.org/XML/1998/06/xmlspec.xsl">xmlspec.xsl</loc>, <loc href="http://www.w3.org/XML/1998/06/diffspec.xsl">diffspec.xsl</loc>,
+and <loc href="http://www.w3.org/XML/1998/06/REC-xml-2e.xsl">REC-xml-2e.xsl</loc>
+XSLT stylesheets. The PDF version was produced with the <loc href="http://www.tdb.uu.se/~jan/html2ps.html">html2ps</loc>
+facility and a distiller program.</p>
+</inform-div1>
+</back></spec>
diff --git a/lib/libUPnP/Neptune/Source/Tests/Xml1/test.xml b/lib/libUPnP/Neptune/Source/Tests/Xml1/test.xml
new file mode 100644
index 0000000000..87e9ccc4af
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Xml1/test.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v5 U (http://www.xmlspy.com) by Gilles Boccon-Gibod -->
+<RootElement xmlns="foo.com" xmlns:pfy="bar.com" xmlns:prefix="prefix.com">Hello, I'm the first part<FirstChild first-attribute="some value">Hi, I'm at level 1</FirstChild>I'm the second part &lt;ubu &gt; oh &amp; hu<prefix:SecondChild pfy:second-attribute="hello">some text here in brackets</prefix:SecondChild>
+<data>Hello <![CDATA[This is some <cdata> stuff with ] and ] and ]] ]]> bla</data>
+ <TestElement some-attr='single quotes' attr2='single quote with " also' attr3="double quotes" attr4="double quotes with ' also" attr5='single with "&lt;" entity' attr6="double with '&gt;' entity"/>
+ <SomeElement>
+ the white
+ spaces &#xD;&#xA;should be
+ preserved
+ </SomeElement>
+<EmptyElement attr1="foo"/>
+
+
+<TestEscapes attr1="'&quot;'">&#xA;&#x0a;&amp;&#32;&#x20;&#64;&#14;&#15;&#xa9;</TestEscapes>
+</RootElement>
+<!--this is a comment - and some stuff - -->
diff --git a/lib/libUPnP/Neptune/Source/Tests/Xml1/unicode.xml b/lib/libUPnP/Neptune/Source/Tests/Xml1/unicode.xml
new file mode 100644
index 0000000000..947e44f1fc
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Xml1/unicode.xml
@@ -0,0 +1 @@
+<text>For example, the references &amp;#916;, &amp;#1049;, &amp;#1511;, &amp;#1605;, &amp;#3671;, &amp;#12354;, &amp;#21494;, &amp;#33865;, and &amp;#45307; (or the same numeric values expressed in hexadecimal, with &amp;#x as the prefix) display on browsers as &#916;, &#1049;, &#1511;,? &#1605;, &#3671;, &#12354;, &#21494;, &#33865; and &#45307;— if the proper fonts exist, these symbols look like the Greek capital letter "Delta", Cyrillic capital letter "Short I", Hebrew letter "Qof", Arabic letter "Meem", Thai numeral 7, Japanese Hiragana "A", simplified Chinese "Leaf", traditional Chinese "Leaf", and Korean Hangul syllable "Nyaelh", respectively</text> \ No newline at end of file
diff --git a/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTest1.cpp
new file mode 100644
index 0000000000..75fbf5a1c4
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTest1.cpp
@@ -0,0 +1,193 @@
+/*****************************************************************
+|
+| Zip Test Program 1
+|
+| (c) 2001-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Neptune.h"
+#include "NptDebug.h"
+
+#if defined(WIN32) && defined(_DEBUG)
+#include <crtdbg.h>
+#endif
+
+#define CHECK(x) \
+ do { \
+ if (!(x)) { \
+ fprintf(stderr, "ERROR line %d \n", __LINE__); \
+ error_hook(); \
+ return -1; \
+ } \
+ } while(0)
+
+/*----------------------------------------------------------------------
+| test vectors
++---------------------------------------------------------------------*/
+extern unsigned char t1[];
+extern unsigned int t1_len;
+extern unsigned char t1_gz[];
+extern unsigned int t1_gz_len;
+extern unsigned int t1_gz_header_len;
+
+extern unsigned char t2[];
+extern unsigned int t2_len;
+extern unsigned char t2_gz[];
+extern unsigned int t2_gz_len;
+extern unsigned int t2_gz_header_len;
+
+typedef struct {
+ unsigned char* uncompressed;
+ unsigned int uncompressed_len;
+ unsigned char* compressed;
+ unsigned int compressed_len;
+ unsigned int compressed_header_len;
+} TestVector;
+TestVector TestVectors[] = {
+ {t1, t1_len, t1_gz, t1_gz_len, t1_gz_header_len},
+ {t2, t2_len, t2_gz, t2_gz_len, t2_gz_header_len},
+};
+
+/*----------------------------------------------------------------------
+| error_hook
++---------------------------------------------------------------------*/
+static void
+error_hook()
+{
+ fprintf(stderr, "STOPPING\n");
+}
+
+/*----------------------------------------------------------------------
+| main
++---------------------------------------------------------------------*/
+int
+main(int /*argc*/, char** /*argv*/)
+{
+ // setup debugging
+#if defined(WIN32) && defined(_DEBUG)
+ int flags = _crtDbgFlag |
+ _CRTDBG_ALLOC_MEM_DF |
+ _CRTDBG_DELAY_FREE_MEM_DF |
+ _CRTDBG_CHECK_ALWAYS_DF;
+
+ _CrtSetDbgFlag(flags);
+ //AllocConsole();
+ //freopen("CONOUT$", "w", stdout);
+#endif
+
+for (unsigned int t=0; t<sizeof(TestVectors)/sizeof(TestVectors[0]); t++) {
+ TestVector* v = &TestVectors[t];
+ NPT_DataBuffer in1(v->compressed, v->compressed_len);
+ NPT_DataBuffer out1;
+ NPT_Result result = NPT_Zip::Inflate(in1, out1);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(out1.GetDataSize() == v->uncompressed_len);
+ CHECK(NPT_MemoryEqual(out1.GetData(), v->uncompressed, v->uncompressed_len));
+
+ NPT_DataBuffer in2(v->uncompressed, v->uncompressed_len);
+ NPT_DataBuffer out2;
+ NPT_DataBuffer out2_check;
+ result = NPT_Zip::Deflate(in2, out2, NPT_ZIP_COMPRESSION_LEVEL_MAX, NPT_Zip::GZIP);
+ CHECK(result == NPT_SUCCESS);
+ result = NPT_Zip::Inflate(out2, out2_check);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(out2_check.GetDataSize() == in2.GetDataSize());
+ CHECK(NPT_MemoryEqual(v->uncompressed, out2_check.GetData(), in2.GetDataSize()));
+
+ // try with random data
+ NPT_DataBuffer in3(300000);
+ unsigned char* in3_p = in3.UseData();
+ for (int i=0; i<300000; i++) {
+ *in3_p++ = NPT_System::GetRandomInteger();
+ }
+ in3.SetDataSize(300000);
+ NPT_DataBuffer out3;
+ result = NPT_Zip::Deflate(in3, out3);
+ CHECK(result == NPT_SUCCESS);
+ NPT_DataBuffer out3_check;
+ result = NPT_Zip::Inflate(out3, out3_check);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(in3 == out3_check);
+
+ // try with redundant data
+ in3_p = in3.UseData();
+ for (int i=0; i<200000; i+=4) {
+ *in3_p++ = NPT_System::GetRandomInteger();
+ *in3_p++ = 0;
+ *in3_p++ = 0;
+ *in3_p++ = 0;
+ }
+ result = NPT_Zip::Deflate(in3, out3);
+ CHECK(result == NPT_SUCCESS);
+ result = NPT_Zip::Inflate(out3, out3_check);
+ CHECK(result == NPT_SUCCESS);
+ CHECK(in3 == out3_check);
+
+ // streams
+ for (unsigned int x=0; x<1000; x++) {
+ NPT_MemoryStream* ms_gz = new NPT_MemoryStream(v->compressed, v->compressed_len);
+ NPT_InputStreamReference ms_gz_ref(ms_gz);
+ NPT_ZipInflatingInputStream ziis(ms_gz_ref);
+ NPT_DataBuffer buffer;
+ NPT_Position position = 0;
+ bool expect_eos = false;
+ for (;;) {
+ NPT_Size chunk = NPT_System::GetRandomInteger()%40000;
+ buffer.SetDataSize(chunk);
+ NPT_Size bytes_read = 0;
+ result = ziis.Read(buffer.UseData(), chunk, &bytes_read);
+ if (expect_eos) {
+ CHECK(result == NPT_ERROR_EOS);
+ break;
+ }
+ if (result == NPT_ERROR_EOS) {
+ CHECK(position == v->uncompressed_len);
+ } else {
+ CHECK(result == NPT_SUCCESS);
+ }
+ CHECK(bytes_read <= chunk);
+ if (bytes_read != chunk) expect_eos = true;
+ CHECK(NPT_MemoryEqual(v->uncompressed+position,
+ buffer.GetData(),
+ bytes_read));
+ position += bytes_read;
+ }
+ CHECK(position == v->uncompressed_len);
+ }
+
+ for (unsigned int x=0; x<1000; x++) {
+ NPT_MemoryStream* ms = new NPT_MemoryStream(v->uncompressed, v->uncompressed_len);
+ NPT_InputStreamReference ms_ref(ms);
+ NPT_ZipDeflatingInputStream zdis(ms_ref, NPT_ZIP_COMPRESSION_LEVEL_MAX, NPT_Zip::GZIP);
+ NPT_DataBuffer buffer;
+ NPT_Position position = 0;
+ bool expect_eos = false;
+ for (;;) {
+ NPT_Size chunk = NPT_System::GetRandomInteger()%40000;
+ buffer.Reserve(buffer.GetDataSize()+chunk);
+ NPT_Size bytes_read = 0;
+ result = zdis.Read(buffer.UseData()+buffer.GetDataSize(), chunk, &bytes_read);
+ if (expect_eos) {
+ CHECK(result == NPT_ERROR_EOS);
+ break;
+ }
+ CHECK(result == NPT_SUCCESS);
+ CHECK(bytes_read <= chunk);
+ if (bytes_read != chunk) expect_eos = true;
+ position += bytes_read;
+ buffer.SetDataSize(buffer.GetDataSize()+bytes_read);
+ }
+ NPT_DataBuffer out;
+ NPT_DataBuffer check(v->uncompressed, v->uncompressed_len);
+ CHECK(NPT_Zip::Inflate(buffer, out) == NPT_SUCCESS);
+ CHECK(out == check);
+ }
+}
+
+ return 0;
+}
diff --git a/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTestData1.cpp b/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTestData1.cpp
new file mode 100644
index 0000000000..9ea01295e5
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Tests/Zip1/ZipTestData1.cpp
@@ -0,0 +1,21332 @@
+unsigned char t1_gz[] = {
+ 0x1f, 0x8b, 0x08, 0x08, 0xf3, 0x53, 0xcf, 0x46, 0x02, 0x03, 0x68, 0x65,
+ 0x6c, 0x6c, 0x6f, 0x2e, 0x74, 0x78, 0x74, 0x00, 0xf3, 0x48, 0xcd, 0xc9,
+ 0xc9, 0x57, 0xf0, 0x4b, 0x2d, 0x28, 0x29, 0xcd, 0x4b, 0x05, 0x00, 0xf2,
+ 0xed, 0xac, 0x76, 0x0d, 0x00, 0x00, 0x00
+};
+unsigned int t1_gz_len = 43;
+unsigned int t1_gz_header_len = 20;
+unsigned char t1[] = {
+ 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x4e, 0x65, 0x70, 0x74, 0x75, 0x6e,
+ 0x65
+};
+unsigned int t1_len = 13;
+
+unsigned char t2_gz[] = {
+ 0x1f, 0x8b, 0x08, 0x08, 0x3a, 0x08, 0x0c, 0x47, 0x02, 0x03, 0x62, 0x69,
+ 0x67, 0x2e, 0x78, 0x6d, 0x6c, 0x00, 0xac, 0x5b, 0x6b, 0x53, 0x1b, 0x49,
+ 0x96, 0xfd, 0x4e, 0x04, 0xff, 0x21, 0x5b, 0x8e, 0x69, 0x60, 0x43, 0x4f,
+ 0xf0, 0x60, 0x8c, 0x65, 0x75, 0x63, 0xc0, 0x6e, 0x1c, 0xc6, 0x66, 0x0c,
+ 0x6d, 0x7b, 0x62, 0x76, 0x3e, 0xa4, 0xaa, 0x52, 0x52, 0x0d, 0xf5, 0x50,
+ 0xd7, 0x03, 0x50, 0xef, 0xec, 0x7f, 0xdf, 0x73, 0x6e, 0x66, 0x96, 0x54,
+ 0x20, 0xfc, 0x98, 0xd8, 0x88, 0x19, 0x77, 0xa9, 0x2a, 0xf3, 0xe6, 0xcd,
+ 0xfb, 0x3c, 0xf7, 0x66, 0x32, 0xfc, 0xe5, 0x2e, 0x89, 0xd5, 0x8d, 0xc9,
+ 0x8b, 0x28, 0x4b, 0x5f, 0xb6, 0x06, 0xdd, 0x7e, 0x4b, 0x99, 0x34, 0xc8,
+ 0xc2, 0x28, 0x9d, 0xbe, 0x6c, 0x45, 0x45, 0xd6, 0x39, 0x38, 0xf8, 0xeb,
+ 0xf3, 0xce, 0xa0, 0xf5, 0xcb, 0x68, 0x73, 0x63, 0xf8, 0xd3, 0xc9, 0x87,
+ 0xe3, 0xab, 0xbf, 0x5f, 0x9c, 0xaa, 0x62, 0x6e, 0x02, 0x75, 0xf1, 0xfb,
+ 0xab, 0x77, 0x67, 0xc7, 0xaa, 0xd5, 0xe9, 0xf5, 0x3e, 0xef, 0x1d, 0xf7,
+ 0x7a, 0x27, 0x57, 0x27, 0xea, 0x12, 0x1f, 0xa2, 0x49, 0x14, 0xe8, 0x12,
+ 0xf4, 0xd4, 0xa7, 0xdd, 0xee, 0xa0, 0xd7, 0x3b, 0x7d, 0xdf, 0xda, 0xdc,
+ 0x50, 0xad, 0x59, 0x59, 0xce, 0x0f, 0x7b, 0xbd, 0xdb, 0xdb, 0xdb, 0xee,
+ 0xed, 0x5e, 0x37, 0xcb, 0xa7, 0xbd, 0x2f, 0xe7, 0xef, 0x7a, 0x83, 0xe7,
+ 0xcf, 0x0f, 0x7a, 0xfd, 0xfd, 0x1e, 0xd8, 0x20, 0xd1, 0xce, 0xcd, 0xee,
+ 0xa0, 0x1b, 0x96, 0x61, 0x4b, 0xfd, 0x83, 0xeb, 0x75, 0x3a, 0x47, 0xf9,
+ 0x38, 0xcb, 0xaf, 0xcc, 0x5d, 0xd9, 0x56, 0x67, 0x69, 0xd0, 0x6d, 0xab,
+ 0xc1, 0xf3, 0x83, 0x83, 0xce, 0x6e, 0xbf, 0xdf, 0x6f, 0xab, 0x9b, 0xee,
+ 0xd3, 0x7e, 0x7f, 0xb7, 0xd3, 0x11, 0xd6, 0x4e, 0xdf, 0x5f, 0x9d, 0x5d,
+ 0xfd, 0x5d, 0x71, 0x95, 0x4e, 0x14, 0x9a, 0xb4, 0x5c, 0xb7, 0xe2, 0xd5,
+ 0xc7, 0x1e, 0xa7, 0xf6, 0x3e, 0x9e, 0x1e, 0x77, 0xb0, 0x62, 0x6b, 0x75,
+ 0x66, 0x98, 0xeb, 0x49, 0xd9, 0x4d, 0xb2, 0xb4, 0x9c, 0xa9, 0xd6, 0x87,
+ 0xa0, 0xcc, 0xc6, 0x26, 0x5f, 0x33, 0x20, 0xd4, 0x0b, 0xd5, 0xda, 0x6f,
+ 0x7c, 0x80, 0x98, 0xf6, 0xbb, 0x61, 0x16, 0xe0, 0x5b, 0x69, 0x54, 0x8b,
+ 0x2b, 0x0c, 0xfa, 0xfd, 0xfd, 0x35, 0x93, 0x17, 0x46, 0xe7, 0x76, 0x40,
+ 0xe3, 0xa3, 0x93, 0xff, 0x87, 0x09, 0x24, 0xa2, 0x44, 0x09, 0xab, 0x5f,
+ 0xe7, 0x51, 0xa6, 0x5a, 0x5b, 0x3f, 0xc7, 0xe5, 0x0b, 0x2a, 0x6b, 0xab,
+ 0x49, 0xb6, 0x5e, 0x75, 0xd0, 0x57, 0xaf, 0xcd, 0x38, 0xaf, 0x74, 0xbe,
+ 0x50, 0x14, 0x6a, 0x63, 0xd8, 0xed, 0x5e, 0xb0, 0xc2, 0x20, 0x64, 0x86,
+ 0xa1, 0x9d, 0x07, 0xa3, 0x3e, 0x9b, 0xf1, 0xe5, 0x1b, 0x72, 0xe0, 0x1f,
+ 0x8e, 0x42, 0x3d, 0x2f, 0x45, 0x95, 0x85, 0x3a, 0x4a, 0x53, 0x73, 0xa7,
+ 0xca, 0x4c, 0x9d, 0x5d, 0x7e, 0x50, 0x07, 0x07, 0xcf, 0x9e, 0xdf, 0xe3,
+ 0x31, 0x00, 0x8f, 0xbf, 0x8c, 0x9a, 0xdc, 0x8d, 0xb1, 0xd9, 0xff, 0x4e,
+ 0x1b, 0xaf, 0x02, 0x13, 0xc7, 0x63, 0x1d, 0x5c, 0xab, 0xd6, 0x93, 0xa0,
+ 0x1f, 0x3e, 0x0f, 0x9a, 0x5b, 0x4d, 0x42, 0x5d, 0x40, 0xfa, 0x9d, 0x4e,
+ 0x73, 0x4e, 0x96, 0xac, 0x7b, 0x97, 0xad, 0x7b, 0x19, 0x3c, 0x78, 0x39,
+ 0x0b, 0x72, 0x8c, 0xfc, 0x59, 0x27, 0xf3, 0x17, 0x4f, 0xee, 0x1a, 0x5f,
+ 0xd2, 0x71, 0x31, 0xc7, 0x97, 0x27, 0x83, 0xfd, 0xfe, 0x8b, 0x26, 0x1b,
+ 0x7a, 0x1a, 0x05, 0x30, 0xa1, 0x42, 0xb5, 0x86, 0xf0, 0x05, 0x33, 0xc2,
+ 0xe4, 0x61, 0x4f, 0x9e, 0xda, 0x18, 0x26, 0x0f, 0x71, 0x79, 0xff, 0xcd,
+ 0xf4, 0xc1, 0x1b, 0x3d, 0xcf, 0x8a, 0xfb, 0xef, 0xfe, 0xa8, 0x32, 0x3f,
+ 0xee, 0x81, 0x26, 0x75, 0x15, 0x46, 0xf0, 0x3e, 0xa8, 0x68, 0x5e, 0x8d,
+ 0x63, 0x88, 0x34, 0x37, 0x37, 0x91, 0xb9, 0x55, 0x3a, 0x0d, 0x55, 0x18,
+ 0x15, 0x41, 0x55, 0xd0, 0x4c, 0x1e, 0x1a, 0x40, 0x54, 0x94, 0x79, 0x34,
+ 0xae, 0xc4, 0xe7, 0x5a, 0x09, 0x0c, 0x74, 0x6c, 0x54, 0xfd, 0xd2, 0x84,
+ 0x6a, 0x92, 0x1b, 0x13, 0x2f, 0xda, 0x4a, 0x17, 0x2a, 0xce, 0xd2, 0x29,
+ 0xfe, 0xbb, 0xb9, 0xa1, 0xe3, 0x58, 0x95, 0xf0, 0x2b, 0x21, 0x1e, 0x9b,
+ 0xa9, 0x8e, 0x55, 0x9a, 0x95, 0xd8, 0x76, 0x81, 0x55, 0x13, 0x1d, 0xa5,
+ 0x2a, 0x4a, 0x4b, 0x1d, 0x94, 0x5c, 0xed, 0x9f, 0x5c, 0x51, 0x7c, 0x1e,
+ 0x86, 0xd4, 0xc1, 0x92, 0xe5, 0x62, 0x6e, 0x5e, 0xb6, 0x72, 0x13, 0x58,
+ 0x5e, 0x3a, 0x9d, 0xcd, 0x8d, 0xf7, 0x59, 0x89, 0xa9, 0x60, 0x60, 0x9e,
+ 0x9b, 0xb9, 0xce, 0x6d, 0x00, 0xc8, 0x26, 0xaa, 0x9c, 0x19, 0x75, 0x69,
+ 0x82, 0x0c, 0xab, 0x9c, 0x86, 0x11, 0xdf, 0x1e, 0x6e, 0x6e, 0x6c, 0x6e,
+ 0x74, 0xd4, 0xe7, 0x2c, 0xbf, 0x16, 0xde, 0xa0, 0xdd, 0xf5, 0xb1, 0x01,
+ 0xd6, 0x2e, 0x46, 0xda, 0xdf, 0x1d, 0xf4, 0x3b, 0x26, 0x07, 0x4d, 0xdd,
+ 0xe5, 0xcc, 0xe3, 0x99, 0x4e, 0xa7, 0x98, 0xca, 0x80, 0x93, 0x9b, 0x89,
+ 0xc9, 0x45, 0x66, 0x30, 0xcd, 0x79, 0x06, 0x9e, 0xf9, 0xc0, 0xc0, 0xc3,
+ 0xc5, 0x41, 0x85, 0x6c, 0xcb, 0xac, 0xf3, 0xec, 0x06, 0x73, 0x9c, 0xab,
+ 0xa9, 0xb4, 0x4a, 0xe0, 0xdf, 0x76, 0xf5, 0x61, 0x19, 0x95, 0xb1, 0x19,
+ 0x71, 0xe2, 0xd0, 0x7d, 0x1f, 0x29, 0x13, 0x9b, 0x84, 0x51, 0x04, 0xe2,
+ 0x41, 0xf4, 0x52, 0x3a, 0x0c, 0x31, 0xbb, 0x55, 0xd8, 0x9d, 0x18, 0xbb,
+ 0x93, 0x96, 0xba, 0xcd, 0x72, 0x86, 0xca, 0xae, 0x52, 0xe7, 0x18, 0x8c,
+ 0x57, 0xa6, 0xfe, 0x08, 0xf9, 0x4d, 0xb2, 0x3c, 0x11, 0x41, 0x90, 0x02,
+ 0x24, 0x5a, 0xc0, 0x99, 0xaa, 0x42, 0xb8, 0xf9, 0x68, 0x12, 0xe1, 0x67,
+ 0x3c, 0x0d, 0xb2, 0x38, 0xcb, 0x5f, 0xb6, 0x7e, 0xf6, 0x9e, 0xf1, 0xa2,
+ 0xa5, 0x74, 0xe9, 0x54, 0x57, 0x58, 0x06, 0xa9, 0xab, 0x61, 0x19, 0x8e,
+ 0x48, 0xc6, 0xf1, 0x55, 0x40, 0xc7, 0x81, 0xae, 0x0a, 0xec, 0x7b, 0xa6,
+ 0xcb, 0xe5, 0x0c, 0x04, 0x23, 0xea, 0x91, 0xab, 0x51, 0xf2, 0x41, 0x95,
+ 0xe7, 0xdc, 0x45, 0xa9, 0xc7, 0xb1, 0x51, 0x09, 0xac, 0x2e, 0x76, 0xcb,
+ 0x73, 0xa3, 0x58, 0xdf, 0xb2, 0x24, 0x46, 0xa0, 0xc7, 0xb0, 0x18, 0x68,
+ 0xbc, 0xad, 0x8a, 0xcc, 0x51, 0x75, 0x6f, 0x48, 0x74, 0x12, 0xe5, 0x05,
+ 0x3e, 0xe9, 0x20, 0xb0, 0x5b, 0x26, 0x2f, 0x10, 0x18, 0x22, 0xbf, 0x9a,
+ 0x56, 0x08, 0xb8, 0x71, 0x94, 0x9a, 0xa2, 0xa1, 0x9e, 0x22, 0x4b, 0x8c,
+ 0x1a, 0x9a, 0x64, 0x3e, 0x1b, 0x15, 0x22, 0x5b, 0x11, 0x33, 0x14, 0x86,
+ 0x9f, 0x60, 0x6f, 0x1c, 0xc1, 0xc4, 0xb3, 0x69, 0xae, 0xe7, 0xb3, 0xc5,
+ 0x9a, 0x79, 0xe2, 0x21, 0x76, 0x9e, 0x2e, 0xa1, 0x8e, 0x32, 0xe8, 0x82,
+ 0xa9, 0x3c, 0xab, 0xa6, 0xb3, 0xac, 0x2a, 0x5f, 0xa8, 0xdb, 0x19, 0x48,
+ 0xa9, 0x8a, 0x7b, 0xc0, 0x80, 0xf2, 0x46, 0xc7, 0xf4, 0x31, 0x45, 0xe3,
+ 0x15, 0xc1, 0x9a, 0x3b, 0x38, 0x00, 0xf8, 0x54, 0x43, 0x7a, 0x1c, 0x49,
+ 0x2d, 0x05, 0x66, 0xb0, 0xed, 0x45, 0x6c, 0x8a, 0x99, 0x31, 0x25, 0xec,
+ 0x35, 0x0b, 0x2b, 0x9a, 0x3d, 0xde, 0x27, 0x0d, 0xdd, 0x08, 0x23, 0xc5,
+ 0xbc, 0xca, 0xa3, 0x0c, 0x22, 0x2a, 0xe6, 0x3a, 0x70, 0x3b, 0x3c, 0x12,
+ 0x63, 0xd0, 0x93, 0x49, 0x14, 0x47, 0xd6, 0xd0, 0x13, 0x9d, 0x5f, 0x57,
+ 0x73, 0x72, 0x4b, 0xea, 0x59, 0x1e, 0x4d, 0xa3, 0x14, 0x1e, 0x95, 0x18,
+ 0xb1, 0xb2, 0x18, 0xac, 0xac, 0x4c, 0x44, 0x98, 0x4a, 0x34, 0xf9, 0x29,
+ 0x6f, 0x8d, 0xa1, 0x9d, 0x84, 0xd1, 0x4d, 0x14, 0x56, 0x9a, 0x4a, 0x9e,
+ 0x45, 0x05, 0x34, 0x53, 0x9b, 0x5f, 0xd1, 0xf6, 0x6c, 0x73, 0x6f, 0xb7,
+ 0xb3, 0x08, 0x36, 0x41, 0x3e, 0xac, 0x9a, 0x6f, 0x55, 0x11, 0x4d, 0x53,
+ 0xc9, 0xb7, 0xd4, 0x31, 0x25, 0xb2, 0x62, 0xea, 0x43, 0x33, 0x1d, 0x61,
+ 0xfe, 0xb0, 0x08, 0x20, 0x63, 0x3e, 0x89, 0xa7, 0x83, 0x15, 0xb8, 0x69,
+ 0x55, 0x16, 0xd0, 0x19, 0x5d, 0x64, 0x88, 0x4f, 0x0a, 0x86, 0xaa, 0x82,
+ 0xd8, 0xe8, 0x14, 0xcc, 0xfe, 0x76, 0x75, 0xfe, 0x8e, 0x8b, 0xc1, 0xd0,
+ 0x9d, 0x33, 0x78, 0x8b, 0x89, 0x28, 0xec, 0x4b, 0x6b, 0x30, 0x70, 0x04,
+ 0xd9, 0x38, 0x76, 0x0c, 0x8d, 0xc6, 0xf8, 0xa5, 0x52, 0x44, 0xaa, 0x15,
+ 0x0b, 0x7f, 0x1d, 0xdd, 0x51, 0x48, 0x0c, 0x33, 0x4e, 0xef, 0x6a, 0x86,
+ 0x7f, 0x0a, 0x6b, 0x5d, 0x66, 0xa1, 0xa6, 0x10, 0x3e, 0xcc, 0x2b, 0x2d,
+ 0xe8, 0x26, 0x18, 0x0a, 0x45, 0xcc, 0x4d, 0x1e, 0x2f, 0x5e, 0xc0, 0x9a,
+ 0xc9, 0x40, 0xca, 0xe8, 0xc4, 0x08, 0x48, 0x1e, 0xda, 0x9c, 0x03, 0xe5,
+ 0x91, 0x1e, 0x06, 0x8e, 0x61, 0xcf, 0x0b, 0x8c, 0xc0, 0x34, 0x70, 0x80,
+ 0x70, 0x17, 0x38, 0xe3, 0xc1, 0x2f, 0xaa, 0x8d, 0xf3, 0x33, 0x0a, 0xc4,
+ 0x69, 0x46, 0x38, 0x02, 0x80, 0xc8, 0xf2, 0x79, 0x86, 0x38, 0xe2, 0x18,
+ 0xb3, 0x31, 0x45, 0x6d, 0x8f, 0x75, 0x9e, 0xd3, 0x54, 0xb2, 0x71, 0x91,
+ 0xc5, 0x46, 0xbe, 0x42, 0x54, 0x51, 0x0a, 0xa3, 0x8a, 0x42, 0xc4, 0x34,
+ 0x53, 0xec, 0xbc, 0x58, 0x06, 0x01, 0x58, 0xfa, 0x75, 0xe1, 0x55, 0xed,
+ 0x48, 0x20, 0x26, 0x56, 0x12, 0x2e, 0x6e, 0x23, 0xc0, 0x87, 0x61, 0x9c,
+ 0x21, 0x76, 0x83, 0xd4, 0xcb, 0x96, 0x7c, 0xaf, 0x12, 0x6c, 0xbc, 0xd5,
+ 0x70, 0xdf, 0x17, 0xd6, 0x74, 0xc3, 0x68, 0x32, 0x79, 0xd9, 0xfa, 0x1f,
+ 0x10, 0xfe, 0x77, 0x30, 0x9b, 0xfe, 0x1b, 0x6e, 0xf4, 0xbf, 0x2b, 0xee,
+ 0x8f, 0xb0, 0x72, 0x05, 0x83, 0xa8, 0x83, 0x96, 0x10, 0xb8, 0x43, 0x40,
+ 0x2b, 0x0b, 0xeb, 0xa0, 0x62, 0x6c, 0x30, 0xc3, 0x20, 0x82, 0xf1, 0x50,
+ 0x71, 0xd4, 0xec, 0xbc, 0x22, 0x1b, 0xd8, 0xde, 0x4c, 0xdf, 0x18, 0xb7,
+ 0x02, 0x08, 0xb7, 0x54, 0x23, 0x7c, 0x14, 0xd5, 0x1c, 0x91, 0xba, 0x00,
+ 0x13, 0x94, 0x8d, 0x60, 0xa8, 0x99, 0xd1, 0x21, 0x6c, 0x0f, 0x4f, 0x36,
+ 0x20, 0x9e, 0xde, 0x95, 0x26, 0x2d, 0x22, 0x46, 0x8e, 0x73, 0x6b, 0xdf,
+ 0xef, 0x20, 0xe4, 0x4a, 0x4f, 0x8d, 0xda, 0x46, 0x64, 0xdd, 0x19, 0xf6,
+ 0xec, 0x38, 0x4c, 0xf0, 0x61, 0x13, 0xd8, 0x45, 0x6d, 0x37, 0xc3, 0x3d,
+ 0x86, 0xf9, 0xaf, 0x18, 0x28, 0x09, 0xc4, 0xd0, 0x6c, 0xc5, 0x71, 0x46,
+ 0x0e, 0x89, 0x75, 0x7e, 0x6e, 0x80, 0xa8, 0x17, 0xc3, 0xde, 0xfd, 0x81,
+ 0x7e, 0xae, 0x4d, 0x3e, 0x23, 0xc6, 0x9d, 0x8f, 0x86, 0x9e, 0x64, 0xd2,
+ 0x50, 0x46, 0xb8, 0x29, 0xee, 0x3b, 0x86, 0x23, 0x87, 0x92, 0xd6, 0x68,
+ 0x08, 0xc8, 0x36, 0xfa, 0xb9, 0x46, 0x6f, 0xa0, 0xcd, 0x17, 0x43, 0x41,
+ 0x7a, 0xfe, 0xbd, 0xfc, 0xc0, 0x17, 0xfb, 0x72, 0x48, 0x9c, 0xe6, 0x3f,
+ 0xf1, 0x19, 0x5f, 0xe4, 0x15, 0xa8, 0xf6, 0x3c, 0x59, 0xbb, 0x02, 0x34,
+ 0x3d, 0x12, 0x75, 0xd3, 0xb6, 0x11, 0xc5, 0x97, 0xf8, 0xf3, 0xc5, 0xfd,
+ 0x3d, 0xb5, 0x46, 0x5f, 0xfb, 0x3a, 0xec, 0x91, 0xd4, 0xe6, 0xc6, 0xf6,
+ 0x77, 0x52, 0xeb, 0xce, 0x4a, 0x02, 0xd8, 0x2f, 0xd4, 0xba, 0x9d, 0xdb,
+ 0x56, 0xdf, 0x3b, 0x55, 0xa0, 0xef, 0x97, 0xe6, 0xbc, 0xcd, 0x8d, 0xef,
+ 0x98, 0x38, 0x0f, 0x61, 0xc6, 0x17, 0x27, 0xaf, 0x7f, 0x70, 0xc1, 0x8e,
+ 0xc5, 0x31, 0xab, 0x2c, 0x6f, 0x6e, 0x38, 0x6c, 0xe3, 0x6c, 0xc3, 0x52,
+ 0xb4, 0xee, 0x23, 0x19, 0xb1, 0xc3, 0x04, 0x10, 0xd6, 0xfe, 0x2f, 0x51,
+ 0x12, 0x65, 0x45, 0x96, 0x17, 0x3b, 0xa2, 0x03, 0x2b, 0xad, 0x61, 0x0c,
+ 0xfa, 0x45, 0x79, 0x4f, 0x0b, 0x6b, 0x81, 0x7f, 0x8d, 0xf9, 0xbf, 0xf6,
+ 0xd5, 0xb2, 0x81, 0x7f, 0x6b, 0xb2, 0x54, 0x33, 0x98, 0xc0, 0x63, 0xf1,
+ 0xcd, 0x25, 0xa4, 0xb6, 0xf8, 0x7c, 0x22, 0x06, 0xbd, 0x6b, 0xa4, 0x4a,
+ 0xe9, 0x1f, 0x0c, 0x9e, 0xb6, 0x46, 0xea, 0x47, 0x86, 0x7b, 0x4b, 0xf8,
+ 0xd6, 0x6a, 0x52, 0x3a, 0x79, 0xff, 0xf1, 0x38, 0xe9, 0xb1, 0xb5, 0xd6,
+ 0x0e, 0x76, 0xbb, 0x15, 0xfc, 0xb6, 0x5c, 0x6d, 0x6b, 0x2d, 0x81, 0x8b,
+ 0x8f, 0x32, 0xf5, 0xf9, 0xb3, 0xc1, 0x6e, 0xff, 0x60, 0x0b, 0xec, 0x7d,
+ 0x7b, 0xd4, 0xc3, 0x8d, 0xac, 0x27, 0xed, 0x44, 0xf0, 0x7c, 0x7f, 0x30,
+ 0x18, 0x3c, 0x7d, 0x94, 0x74, 0x63, 0xd4, 0x0f, 0x92, 0x8e, 0x11, 0xb7,
+ 0xc0, 0x54, 0x7f, 0x6f, 0x6f, 0xf0, 0x2d, 0xfa, 0x2b, 0x43, 0xff, 0xc3,
+ 0x45, 0xf6, 0xf7, 0xfa, 0xdf, 0xbb, 0x08, 0x86, 0xfe, 0xa8, 0x90, 0x9e,
+ 0xf5, 0x0f, 0xfa, 0xcf, 0xbe, 0x29, 0x24, 0x19, 0xf5, 0xc3, 0xa4, 0x21,
+ 0xd9, 0xef, 0x20, 0xcd, 0x51, 0x96, 0x34, 0xd2, 0x86, 0x82, 0x33, 0x7a,
+ 0xf7, 0xc0, 0x4a, 0xba, 0x2a, 0x67, 0x84, 0x18, 0xfe, 0x19, 0xb8, 0xc2,
+ 0xe6, 0xc1, 0x81, 0x69, 0x8d, 0x86, 0xa9, 0x4e, 0xcc, 0xe8, 0x2a, 0x4a,
+ 0xd4, 0xab, 0x5c, 0x2f, 0x86, 0x3d, 0xf9, 0x39, 0x5c, 0x81, 0x51, 0x23,
+ 0x16, 0xfa, 0xc0, 0x41, 0x51, 0xb9, 0x90, 0x0c, 0xfc, 0xde, 0x94, 0x45,
+ 0xa0, 0xe7, 0x66, 0xd8, 0x5b, 0x1d, 0x04, 0xd2, 0x2c, 0x50, 0x62, 0xe7,
+ 0x1b, 0x7c, 0x2c, 0xb3, 0xc3, 0x72, 0x0c, 0x9a, 0xbf, 0x96, 0x35, 0x81,
+ 0x2e, 0x72, 0x43, 0x6b, 0xb4, 0xee, 0xed, 0xb0, 0x27, 0xd3, 0xe1, 0xe5,
+ 0x96, 0xc3, 0xaf, 0xf0, 0xfa, 0x16, 0x90, 0x48, 0x5d, 0xe8, 0x2c, 0x8e,
+ 0xd6, 0x71, 0x7b, 0x1e, 0xa1, 0xb4, 0x2c, 0xb2, 0x49, 0xf9, 0x3d, 0xfc,
+ 0xfd, 0x0b, 0xa4, 0xe6, 0xfa, 0xd7, 0xc4, 0xcf, 0xb1, 0xfc, 0xad, 0x7b,
+ 0xfb, 0x3d, 0xfc, 0xb9, 0xb4, 0x0e, 0xcc, 0xe0, 0x59, 0x3d, 0xee, 0xaa,
+ 0xf3, 0x2e, 0xfb, 0x2f, 0x39, 0x10, 0xe7, 0xb4, 0x73, 0x1e, 0xfc, 0xad,
+ 0x02, 0xb8, 0x5c, 0xc7, 0xf6, 0xef, 0x69, 0x24, 0x41, 0xb7, 0x5c, 0x6c,
+ 0x6e, 0x00, 0x00, 0x9e, 0xc5, 0x00, 0x34, 0x19, 0x50, 0x06, 0xf0, 0xc4,
+ 0xf1, 0x0c, 0x31, 0x76, 0x9a, 0x89, 0xf0, 0xa9, 0x0b, 0x75, 0xea, 0x7a,
+ 0x41, 0xc0, 0x4e, 0x48, 0xe6, 0x98, 0x7f, 0x73, 0x4f, 0x19, 0xeb, 0xb6,
+ 0x1a, 0x24, 0x45, 0x12, 0xfc, 0xf1, 0x6b, 0x15, 0x05, 0x5d, 0x13, 0x56,
+ 0xad, 0x51, 0xf3, 0xb7, 0xdf, 0x1e, 0x73, 0xe9, 0x23, 0x1b, 0xdc, 0xad,
+ 0x37, 0x08, 0x60, 0xe4, 0x37, 0x78, 0x7a, 0x43, 0x18, 0x02, 0x20, 0xb9,
+ 0x6e, 0x4f, 0x97, 0x55, 0xaa, 0xac, 0x3a, 0x16, 0x45, 0x69, 0x92, 0x02,
+ 0xa5, 0x00, 0xdb, 0x45, 0xdf, 0xe6, 0xd5, 0xc4, 0xc9, 0xaf, 0x46, 0x03,
+ 0x9e, 0x17, 0x55, 0x6a, 0x55, 0x82, 0xca, 0xa8, 0x9b, 0x70, 0x9d, 0xc6,
+ 0xfb, 0xf5, 0x5c, 0xf7, 0x1a, 0xf6, 0xee, 0xaa, 0x25, 0x49, 0x19, 0xa3,
+ 0x2b, 0x40, 0xb3, 0x6f, 0x01, 0x28, 0xa2, 0x78, 0x0d, 0x24, 0x36, 0x2e,
+ 0x00, 0x85, 0xa1, 0x0a, 0x69, 0xba, 0x08, 0xb0, 0xc3, 0x07, 0x2c, 0x3a,
+ 0x27, 0x18, 0x8d, 0xa1, 0x26, 0x00, 0xa1, 0x00, 0x90, 0xd0, 0x84, 0xb6,
+ 0xae, 0xc3, 0x57, 0x0f, 0x38, 0xbb, 0xea, 0x0c, 0x60, 0x6e, 0x9a, 0x01,
+ 0xff, 0x45, 0x02, 0x4a, 0x4d, 0x2a, 0xa5, 0xde, 0xd4, 0x00, 0xcb, 0x47,
+ 0x81, 0x23, 0x29, 0x10, 0xb9, 0x30, 0x39, 0xca, 0x82, 0x36, 0x33, 0x6f,
+ 0x60, 0x22, 0x3e, 0x8a, 0x9e, 0x81, 0xa6, 0x03, 0xc1, 0x81, 0x2c, 0xde,
+ 0x09, 0x28, 0x3f, 0x9b, 0xb1, 0x2f, 0x1f, 0x6f, 0xf5, 0xa2, 0xe6, 0x87,
+ 0xe5, 0xc6, 0x3c, 0x2b, 0xec, 0x76, 0x24, 0x4f, 0x33, 0x8f, 0x03, 0x3c,
+ 0xb2, 0x69, 0x35, 0x93, 0x7a, 0x06, 0xc5, 0x8c, 0x85, 0x6c, 0xac, 0xeb,
+ 0xa1, 0x4d, 0x08, 0x50, 0x6a, 0x8c, 0x88, 0x3b, 0x21, 0xb7, 0xb6, 0x58,
+ 0xe2, 0xaa, 0xfc, 0x8c, 0x62, 0xdd, 0x08, 0xe6, 0xd7, 0xe3, 0x28, 0x16,
+ 0x73, 0x14, 0xb2, 0x63, 0x00, 0x77, 0xcb, 0x37, 0x07, 0xca, 0x22, 0x08,
+ 0x32, 0x56, 0xdc, 0x2b, 0x22, 0xb6, 0xa5, 0x86, 0x17, 0xf6, 0x8a, 0x48,
+ 0x96, 0xcc, 0x58, 0x88, 0xc1, 0x2a, 0x7b, 0x21, 0x85, 0xea, 0xb9, 0x94,
+ 0x63, 0xb6, 0xda, 0xb5, 0xd5, 0x81, 0xb0, 0x80, 0x4c, 0xcf, 0xf2, 0x43,
+ 0xe7, 0x65, 0x64, 0xd8, 0x19, 0xc1, 0xd7, 0x9a, 0x04, 0xd0, 0x65, 0x26,
+ 0x85, 0xf2, 0x78, 0x21, 0x12, 0x39, 0x89, 0x20, 0x3d, 0xa0, 0x10, 0xf6,
+ 0x52, 0xb4, 0x7a, 0x88, 0x42, 0xa9, 0x0f, 0xa7, 0x56, 0xa9, 0xb9, 0xa1,
+ 0x3b, 0xcf, 0x16, 0xe9, 0xba, 0xe6, 0x8c, 0x60, 0x7f, 0x5d, 0xac, 0x74,
+ 0x2f, 0x12, 0x00, 0x8e, 0x9c, 0x28, 0x9e, 0x95, 0x58, 0x54, 0xda, 0xcf,
+ 0x1a, 0x42, 0x97, 0x0e, 0x02, 0x4c, 0xbf, 0x1e, 0xba, 0xb9, 0x61, 0x7b,
+ 0x02, 0xa9, 0xdd, 0xc1, 0xd2, 0x10, 0xc0, 0xcc, 0x56, 0x21, 0x1e, 0x44,
+ 0xf5, 0x25, 0xfa, 0x9a, 0x7e, 0x4b, 0x9e, 0x9b, 0x1c, 0x3a, 0x3b, 0x01,
+ 0xb8, 0xbd, 0xc5, 0x5e, 0xcb, 0xd2, 0xf6, 0x2d, 0x7c, 0x3d, 0x53, 0x34,
+ 0x1a, 0xb8, 0x64, 0x99, 0x7d, 0x15, 0x2c, 0x98, 0xb1, 0xb7, 0x00, 0x53,
+ 0xbb, 0x05, 0xc4, 0x2b, 0x10, 0xf2, 0x35, 0x8a, 0x17, 0x33, 0x8f, 0xb3,
+ 0x85, 0x5d, 0x9c, 0x1a, 0xd8, 0xdc, 0x30, 0x29, 0xca, 0x30, 0x57, 0x4b,
+ 0xab, 0x49, 0x95, 0x4a, 0x8d, 0xb8, 0x8c, 0xe7, 0xf7, 0x15, 0xee, 0xfb,
+ 0x43, 0xb0, 0x38, 0xaf, 0xe2, 0xfb, 0xba, 0x74, 0xfc, 0x18, 0x91, 0xe8,
+ 0x02, 0x16, 0x74, 0xa7, 0x02, 0x2c, 0x5e, 0x5a, 0x8d, 0x58, 0xd7, 0x91,
+ 0x32, 0x1f, 0x81, 0xda, 0x97, 0xfc, 0x6d, 0x61, 0x92, 0x7e, 0x23, 0x72,
+ 0x96, 0x55, 0x6d, 0x15, 0xa1, 0x5d, 0xcf, 0xcb, 0xd9, 0x3c, 0xe7, 0x41,
+ 0x4d, 0x10, 0x4c, 0x1e, 0xa2, 0x6c, 0xf1, 0x4f, 0x6f, 0xe8, 0x3b, 0xe0,
+ 0xfa, 0x4f, 0x4c, 0xbe, 0xe7, 0xb7, 0x8c, 0x2b, 0xae, 0xff, 0x79, 0x38,
+ 0x78, 0x7e, 0xb0, 0xbf, 0x7d, 0xba, 0x23, 0x8a, 0xa2, 0x74, 0x5d, 0xd9,
+ 0x88, 0x1a, 0x93, 0x26, 0x62, 0xc2, 0x1d, 0x31, 0x72, 0x76, 0x1c, 0xbc,
+ 0x63, 0x65, 0x79, 0x1c, 0xaa, 0xcf, 0x2c, 0xbc, 0xb9, 0x63, 0x90, 0x72,
+ 0xa6, 0x62, 0x5b, 0x10, 0x65, 0x2d, 0x0e, 0x58, 0x15, 0x9d, 0xea, 0x08,
+ 0xe2, 0xbb, 0x81, 0x98, 0xda, 0x90, 0x74, 0x89, 0xe0, 0x53, 0x70, 0xc0,
+ 0x2d, 0x42, 0x34, 0x20, 0x32, 0xb6, 0x0b, 0x3b, 0x9a, 0x64, 0x15, 0x1b,
+ 0x37, 0x65, 0x03, 0xc1, 0xaf, 0x6f, 0xa6, 0xad, 0xc3, 0xbd, 0x75, 0x09,
+ 0xd0, 0x55, 0xc3, 0xf9, 0x2c, 0xa7, 0xb7, 0xae, 0x86, 0x5d, 0xa1, 0xf9,
+ 0xa0, 0x8c, 0x55, 0x5f, 0x5b, 0x65, 0x4d, 0xcb, 0xee, 0xc9, 0xe9, 0x80,
+ 0xed, 0xee, 0x7f, 0xf0, 0x3f, 0xff, 0xf4, 0x90, 0x44, 0xa2, 0x63, 0x3a,
+ 0x45, 0xe8, 0x9c, 0xd5, 0xd5, 0xad, 0xec, 0x3e, 0x2a, 0xee, 0x99, 0x60,
+ 0x64, 0x8d, 0x29, 0x4b, 0x59, 0xef, 0xd7, 0xde, 0xe0, 0x3b, 0x13, 0xea,
+ 0xb7, 0xec, 0x96, 0xad, 0x2c, 0xe8, 0x85, 0xc2, 0x96, 0x76, 0x42, 0xec,
+ 0x3a, 0xd6, 0x9e, 0x9e, 0xb7, 0xa5, 0x36, 0x22, 0xa0, 0x51, 0x5f, 0x45,
+ 0xd5, 0xdc, 0xc2, 0x13, 0x21, 0xf2, 0x88, 0xb8, 0xdc, 0xd7, 0x5a, 0x6a,
+ 0x3d, 0x2b, 0xb6, 0xd1, 0xd1, 0xe6, 0x06, 0xd3, 0x00, 0xd7, 0xf4, 0x2d,
+ 0xb7, 0x87, 0xb1, 0x61, 0x35, 0xf0, 0x94, 0x26, 0x98, 0xa5, 0xd8, 0x63,
+ 0x5c, 0xb3, 0x57, 0x34, 0x94, 0x4a, 0xd7, 0x54, 0xdf, 0xaa, 0x00, 0xd6,
+ 0xd7, 0x32, 0x8e, 0x39, 0xef, 0x50, 0x2b, 0x1d, 0x80, 0xd1, 0xfa, 0xc6,
+ 0xc4, 0x8f, 0x6b, 0x74, 0x7f, 0x9f, 0x0a, 0xdd, 0xdf, 0x77, 0xfa, 0xb4,
+ 0xce, 0xdf, 0xd4, 0x1b, 0xec, 0xde, 0x6a, 0x0e, 0xce, 0x97, 0xa8, 0xdf,
+ 0x3f, 0x9e, 0xb5, 0x9d, 0xe9, 0x52, 0x23, 0x66, 0x12, 0xa5, 0xd6, 0x83,
+ 0x87, 0xe3, 0x68, 0xcc, 0xd6, 0x90, 0x70, 0xf0, 0x0a, 0x7e, 0x0a, 0xc5,
+ 0x76, 0xde, 0x19, 0xd3, 0xea, 0xb1, 0x9d, 0xa7, 0xd9, 0x60, 0xbd, 0x66,
+ 0x38, 0x83, 0x8b, 0x4c, 0xd9, 0xae, 0x70, 0xfd, 0x0f, 0xdb, 0xe9, 0xa9,
+ 0xe6, 0x72, 0xa0, 0xd1, 0xa0, 0xf1, 0xf1, 0xf5, 0xf1, 0xe0, 0xd9, 0xde,
+ 0x01, 0xe6, 0x8b, 0xb4, 0xdd, 0x37, 0x26, 0x3d, 0xf7, 0xf1, 0xa0, 0xcf,
+ 0x8f, 0xf7, 0xc5, 0x23, 0x16, 0x2f, 0xa1, 0xa7, 0xd9, 0xe2, 0x25, 0xbb,
+ 0xb6, 0x87, 0x99, 0xb2, 0x6f, 0x2f, 0x4f, 0x8c, 0xcb, 0xcb, 0xca, 0xd5,
+ 0xf5, 0x99, 0xd5, 0xb6, 0x74, 0x48, 0x95, 0x74, 0xee, 0x8b, 0x19, 0x18,
+ 0xbc, 0x7f, 0x22, 0xc3, 0x1e, 0x52, 0x54, 0xaa, 0x04, 0x61, 0x1c, 0xb6,
+ 0x1c, 0x2d, 0x9b, 0x51, 0x56, 0x4e, 0xb6, 0x83, 0x05, 0xe1, 0x44, 0x41,
+ 0xe9, 0xe3, 0x9b, 0x84, 0x51, 0x92, 0xed, 0x78, 0x76, 0x7c, 0xcb, 0x4a,
+ 0xdf, 0x20, 0x20, 0xd8, 0x04, 0xf3, 0x2d, 0x43, 0x79, 0x44, 0x8b, 0x8f,
+ 0x59, 0xf8, 0x9a, 0xa1, 0x56, 0xcb, 0x3b, 0x58, 0x8a, 0xd1, 0x4a, 0x1a,
+ 0x83, 0x69, 0xe4, 0x9b, 0xee, 0xb9, 0x74, 0x8d, 0x0a, 0xa6, 0x80, 0xba,
+ 0x1d, 0x26, 0xbe, 0x20, 0x0e, 0xb9, 0x5e, 0xa2, 0xff, 0x01, 0xf7, 0x9f,
+ 0xc0, 0x0d, 0x8a, 0xe4, 0x6f, 0xf3, 0xde, 0x18, 0x78, 0xcf, 0x17, 0x46,
+ 0x17, 0xb1, 0x60, 0x92, 0xdc, 0x40, 0xf2, 0x25, 0xb9, 0x45, 0x72, 0x7f,
+ 0x80, 0xa9, 0xa4, 0xe9, 0xbc, 0xe4, 0xc9, 0x21, 0x45, 0xd2, 0xe6, 0x16,
+ 0xb2, 0xfc, 0x57, 0xbb, 0x62, 0x6b, 0xf4, 0xe0, 0x95, 0x2b, 0xa8, 0x6d,
+ 0x50, 0x40, 0xea, 0x6f, 0x06, 0x53, 0xf5, 0xff, 0x12, 0x4b, 0x07, 0x36,
+ 0x96, 0x0e, 0x9c, 0xef, 0xbd, 0x58, 0x17, 0xfb, 0xa5, 0xcb, 0xeb, 0x69,
+ 0x1d, 0xe5, 0xc1, 0x0c, 0x31, 0xb3, 0xe8, 0x5d, 0xc8, 0xa1, 0x52, 0x6f,
+ 0xc9, 0x75, 0x6b, 0xa4, 0xdd, 0x37, 0xd7, 0x7e, 0xd1, 0xb9, 0x59, 0xea,
+ 0xa6, 0x0e, 0x6e, 0x5e, 0x7c, 0x29, 0x31, 0xc0, 0xca, 0x9e, 0x44, 0xa2,
+ 0xeb, 0xeb, 0x0e, 0x00, 0x91, 0xd5, 0xf6, 0x38, 0xe1, 0x94, 0xef, 0xd0,
+ 0x22, 0xeb, 0x06, 0xb6, 0x09, 0x6f, 0x0f, 0xb9, 0xdc, 0x01, 0x89, 0xcb,
+ 0x7d, 0xd6, 0x89, 0x9c, 0xa9, 0x20, 0xbc, 0xd7, 0x9d, 0x6e, 0xd7, 0xed,
+ 0x6c, 0xe6, 0x50, 0x75, 0x8c, 0xa8, 0x0a, 0x4d, 0x46, 0x55, 0x62, 0xc1,
+ 0x2c, 0x42, 0xe8, 0xe6, 0x06, 0xdb, 0xc1, 0x99, 0x1c, 0x5e, 0x99, 0x3a,
+ 0x39, 0xae, 0xad, 0x50, 0xbc, 0x1e, 0x1b, 0x3f, 0x9b, 0x26, 0xd3, 0xe3,
+ 0xa6, 0xe5, 0x61, 0x05, 0x6f, 0x02, 0x75, 0x94, 0x89, 0xc3, 0xf9, 0xae,
+ 0x64, 0x6a, 0xab, 0x4f, 0x40, 0x3e, 0x59, 0xc5, 0x5c, 0xa4, 0xce, 0x11,
+ 0xc1, 0x4b, 0x1e, 0xa1, 0x7d, 0x02, 0xfc, 0x6c, 0x2b, 0x80, 0x7b, 0x1d,
+ 0x77, 0x0f, 0x2d, 0xef, 0x9d, 0xb5, 0xbc, 0x7f, 0x61, 0x47, 0x8c, 0x27,
+ 0x62, 0x84, 0x24, 0x6f, 0xf2, 0xac, 0x9a, 0xf3, 0xa4, 0xfb, 0xf9, 0xbe,
+ 0xfc, 0xfb, 0xac, 0xad, 0xd8, 0x1b, 0xaa, 0x59, 0x5a, 0x59, 0xbf, 0xc8,
+ 0xaa, 0x3c, 0x30, 0x2c, 0x0f, 0x1c, 0x37, 0x0e, 0x1b, 0x61, 0x6d, 0xc3,
+ 0xa6, 0x7c, 0x9e, 0x21, 0xc9, 0xd0, 0x13, 0x93, 0x7a, 0x76, 0x73, 0x0a,
+ 0x3b, 0x11, 0x55, 0x01, 0x64, 0x53, 0xff, 0x60, 0x75, 0x12, 0x85, 0x2f,
+ 0x5b, 0xa7, 0xef, 0x5b, 0x23, 0x97, 0xa2, 0xd9, 0x0f, 0xb3, 0x5f, 0x1e,
+ 0x8c, 0x32, 0xe3, 0x74, 0xd2, 0xb2, 0x9d, 0x62, 0x02, 0xa0, 0x57, 0x3a,
+ 0xb8, 0xae, 0x8a, 0xce, 0x7b, 0x5d, 0xe5, 0xea, 0x35, 0x56, 0x45, 0x54,
+ 0x64, 0xce, 0x8e, 0xd5, 0x34, 0xd7, 0x49, 0xa2, 0xf3, 0x9d, 0x26, 0xa9,
+ 0x5e, 0x63, 0x79, 0xdf, 0xeb, 0xf3, 0xbc, 0x15, 0xbe, 0xb2, 0x42, 0xad,
+ 0x6a, 0x92, 0x11, 0x25, 0xd1, 0x19, 0xec, 0x76, 0xfa, 0x7b, 0xea, 0x50,
+ 0x1d, 0x9f, 0x5f, 0xc2, 0xd4, 0xf0, 0xb0, 0x80, 0x74, 0x27, 0x55, 0x2e,
+ 0x49, 0xd5, 0x85, 0x50, 0xec, 0x51, 0x26, 0x3c, 0x9c, 0xb9, 0x8b, 0x09,
+ 0x57, 0xaf, 0xf0, 0xcf, 0xbd, 0x19, 0x6a, 0x9b, 0xd0, 0x00, 0x5f, 0xe0,
+ 0xf9, 0x8c, 0xe5, 0x9f, 0xdf, 0x40, 0xe4, 0xea, 0x04, 0x75, 0x92, 0x9c,
+ 0xdf, 0x70, 0xfe, 0xce, 0xd7, 0xa9, 0xd6, 0xfc, 0x84, 0x06, 0xbb, 0x95,
+ 0x3a, 0x06, 0x36, 0x9f, 0xe8, 0x74, 0xe1, 0x01, 0x61, 0x0d, 0x00, 0x2c,
+ 0x24, 0x28, 0xed, 0xd9, 0xde, 0xe6, 0x86, 0x78, 0x42, 0x9e, 0x65, 0x13,
+ 0x17, 0x48, 0x39, 0xcf, 0xd7, 0x59, 0x87, 0x8a, 0xe8, 0x7c, 0xb2, 0x80,
+ 0x03, 0xe5, 0xa1, 0xeb, 0x88, 0xd6, 0x51, 0x4a, 0x72, 0x1f, 0x53, 0xa3,
+ 0x6d, 0x48, 0xfb, 0xd6, 0x3e, 0xd2, 0xa6, 0xdd, 0x15, 0x53, 0x25, 0xb0,
+ 0x8a, 0x4b, 0x51, 0x24, 0x04, 0xc4, 0xed, 0x8e, 0xf6, 0xdb, 0x3e, 0x77,
+ 0xba, 0xf3, 0x3f, 0x5b, 0x60, 0xce, 0x2d, 0xe8, 0xc7, 0xfa, 0xd8, 0xf4,
+ 0x09, 0xd0, 0x08, 0x4c, 0x34, 0xcd, 0x62, 0x22, 0xe9, 0x6d, 0x9d, 0xc8,
+ 0xb9, 0x62, 0x51, 0x31, 0x44, 0x8c, 0xb3, 0xaa, 0xb4, 0x15, 0x49, 0x6a,
+ 0x6c, 0x16, 0x58, 0x49, 0xdd, 0xce, 0xde, 0x77, 0xda, 0x3c, 0x2f, 0x51,
+ 0x5b, 0x48, 0x0b, 0x5b, 0x1c, 0xe1, 0x6b, 0x37, 0xc9, 0x22, 0x5c, 0xe0,
+ 0xf3, 0x1b, 0x2c, 0x1b, 0xb8, 0xd3, 0x1d, 0x9e, 0xb8, 0x01, 0x2e, 0x39,
+ 0xec, 0x36, 0x8b, 0xe4, 0x2c, 0xed, 0xd4, 0x9f, 0xe1, 0x79, 0x68, 0x2e,
+ 0x95, 0x8b, 0x5c, 0x1f, 0x48, 0x58, 0xb9, 0xe4, 0xb6, 0x58, 0x83, 0x40,
+ 0xc7, 0xc0, 0x13, 0x56, 0xea, 0x1f, 0x7d, 0x9d, 0x54, 0xb4, 0xc1, 0x61,
+ 0x27, 0xcb, 0x21, 0xd3, 0xd5, 0x29, 0x3c, 0x7e, 0x5a, 0xe2, 0x48, 0x3d,
+ 0x9f, 0x1b, 0x36, 0x96, 0x59, 0xf7, 0x05, 0x3c, 0xee, 0x73, 0xc7, 0x9c,
+ 0x98, 0x59, 0xea, 0xe9, 0xfd, 0x79, 0xf5, 0x89, 0x6e, 0x63, 0xa6, 0x44,
+ 0x4d, 0x8c, 0x9e, 0x8a, 0xdf, 0x71, 0x44, 0x18, 0xdd, 0x0c, 0xa4, 0xce,
+ 0x96, 0x5d, 0x7d, 0xf9, 0xf2, 0x45, 0xfe, 0x2f, 0x65, 0x9b, 0x47, 0x89,
+ 0x5b, 0x35, 0x0f, 0x5b, 0x02, 0x78, 0x0b, 0x07, 0x72, 0x0a, 0xe3, 0x64,
+ 0x21, 0x87, 0x8f, 0x75, 0xd1, 0x57, 0xb8, 0xaa, 0xef, 0x83, 0x58, 0xed,
+ 0x72, 0x8f, 0x94, 0xc7, 0xfb, 0x9a, 0xa7, 0xd5, 0xbd, 0x53, 0xf6, 0x80,
+ 0x3b, 0x8a, 0x60, 0x08, 0x51, 0x04, 0xa8, 0xc7, 0x46, 0xc8, 0xdd, 0xc1,
+ 0xd3, 0x01, 0x8c, 0x2e, 0x7b, 0x48, 0x6a, 0x5b, 0x4e, 0xe5, 0xb8, 0x19,
+ 0x2a, 0x7a, 0x29, 0x23, 0x1b, 0xb0, 0x6f, 0x11, 0xfa, 0x33, 0xf9, 0x92,
+ 0x9b, 0x3f, 0xaa, 0x28, 0x77, 0x21, 0xdc, 0x16, 0x52, 0x59, 0x2e, 0x24,
+ 0x0d, 0x77, 0x8f, 0xb1, 0xb4, 0xfa, 0xbc, 0x8a, 0x41, 0x73, 0xac, 0x97,
+ 0x8d, 0x85, 0xc4, 0x59, 0x44, 0xe3, 0xc8, 0x7e, 0xeb, 0x75, 0x64, 0x62,
+ 0xe9, 0x30, 0xc9, 0x69, 0xcb, 0x96, 0xda, 0x5e, 0xb1, 0x24, 0x14, 0x94,
+ 0xde, 0x94, 0x44, 0x26, 0x58, 0xdd, 0xe6, 0x93, 0x95, 0xd3, 0x47, 0x43,
+ 0x48, 0x3d, 0x51, 0xe3, 0x2c, 0x64, 0x9d, 0x84, 0xea, 0x92, 0x58, 0x13,
+ 0x0e, 0x90, 0x63, 0x74, 0xda, 0x21, 0xf8, 0x94, 0x93, 0x58, 0x39, 0xc6,
+ 0x67, 0x2d, 0x76, 0x79, 0x1d, 0xcd, 0xdf, 0x45, 0x3c, 0x20, 0x47, 0xd5,
+ 0xaf, 0xc3, 0xb6, 0x8a, 0x21, 0x73, 0x45, 0xd3, 0x5c, 0x34, 0x39, 0x03,
+ 0x48, 0x65, 0x01, 0x4b, 0x32, 0x35, 0x95, 0x2d, 0x7b, 0x9a, 0x08, 0xb3,
+ 0x8d, 0x8b, 0x2d, 0x68, 0x58, 0xb8, 0x6a, 0xcc, 0x3a, 0x9a, 0x65, 0xce,
+ 0xfe, 0x59, 0x77, 0x66, 0xde, 0x4c, 0xee, 0xd4, 0xf6, 0x55, 0x94, 0xb0,
+ 0x3c, 0x8f, 0xa6, 0xb3, 0xd2, 0x09, 0x42, 0xd4, 0xad, 0x24, 0xab, 0x16,
+ 0x7a, 0x21, 0x67, 0xea, 0xd2, 0x6c, 0x99, 0xf1, 0x12, 0x0c, 0x57, 0xb2,
+ 0xf1, 0x62, 0x92, 0xeb, 0xa9, 0x38, 0xbc, 0x1c, 0xae, 0xb0, 0x18, 0xce,
+ 0xad, 0xcd, 0xbd, 0xff, 0x70, 0x25, 0x5d, 0x0b, 0x5f, 0x37, 0x62, 0xe3,
+ 0xca, 0x86, 0x5b, 0x7a, 0x2c, 0xac, 0x4a, 0x5a, 0x00, 0x56, 0xed, 0x7e,
+ 0xbc, 0xbd, 0xe9, 0xc1, 0xbb, 0x08, 0xd2, 0x28, 0x6b, 0xd0, 0xdc, 0xae,
+ 0xb5, 0xc9, 0x8d, 0x2e, 0xb6, 0xe4, 0x74, 0x59, 0xc7, 0x74, 0x32, 0x0b,
+ 0x95, 0x76, 0xba, 0x72, 0x6b, 0xc3, 0x9f, 0xc3, 0x23, 0x96, 0xba, 0x5e,
+ 0x2e, 0x41, 0x60, 0x20, 0x9e, 0x8a, 0x2d, 0xbf, 0x45, 0x35, 0x5c, 0xa8,
+ 0xe3, 0x18, 0x1b, 0x68, 0x2f, 0x47, 0x10, 0x05, 0xb0, 0x4a, 0xc8, 0x6e,
+ 0xe1, 0xed, 0x75, 0x2f, 0xaf, 0x2d, 0x4c, 0x9d, 0x7c, 0x78, 0x7f, 0xaa,
+ 0xfe, 0x7e, 0x7a, 0x75, 0xe8, 0xe2, 0xb1, 0x82, 0x3b, 0x13, 0x35, 0xf7,
+ 0x6c, 0xb5, 0x4e, 0xa4, 0x9f, 0x62, 0xa3, 0x34, 0xa5, 0x9e, 0xb2, 0x0f,
+ 0x5d, 0x48, 0x29, 0x0d, 0x09, 0x20, 0x65, 0xb9, 0x2d, 0x1e, 0x68, 0xc2,
+ 0x03, 0x0b, 0x1b, 0xc1, 0x24, 0x3e, 0xf1, 0xc6, 0x14, 0x77, 0x2a, 0xc7,
+ 0xa9, 0xd5, 0x18, 0x52, 0xbe, 0xd1, 0x71, 0x05, 0xd6, 0x2a, 0xe8, 0x24,
+ 0x0f, 0x88, 0x03, 0x67, 0xe6, 0x8e, 0x4b, 0x32, 0x2c, 0x41, 0x00, 0x50,
+ 0x28, 0x3b, 0x8b, 0x62, 0x3c, 0xf4, 0xd3, 0xb6, 0x7a, 0x3c, 0xe6, 0x0f,
+ 0x10, 0xea, 0xdf, 0x32, 0x93, 0x50, 0x91, 0xe2, 0xab, 0x41, 0x16, 0x57,
+ 0x49, 0xda, 0xb9, 0x8d, 0x42, 0x44, 0x21, 0xde, 0x80, 0x49, 0x0c, 0x89,
+ 0x7e, 0x9d, 0x44, 0x9d, 0x36, 0xc6, 0x66, 0x0a, 0x56, 0x73, 0xa9, 0xe7,
+ 0x59, 0x44, 0xba, 0xbc, 0x54, 0x66, 0xab, 0x85, 0x82, 0x62, 0xe7, 0x2e,
+ 0x45, 0x04, 0x5d, 0x09, 0x9d, 0xab, 0x45, 0xe5, 0x4a, 0xa6, 0x39, 0xa4,
+ 0x0c, 0xc5, 0xaf, 0x6c, 0xbe, 0x2f, 0x1c, 0x55, 0xbb, 0xd5, 0xfa, 0x8e,
+ 0x1f, 0x2a, 0x12, 0xf8, 0xac, 0xda, 0xde, 0x7d, 0xa6, 0x8e, 0xaa, 0x29,
+ 0xa4, 0xbb, 0xa7, 0x2e, 0xcd, 0x9c, 0x06, 0xea, 0x68, 0xf9, 0x1b, 0x2e,
+ 0x9c, 0xfe, 0x5a, 0x57, 0x08, 0x5e, 0xbc, 0x4e, 0x61, 0xbd, 0x70, 0x9b,
+ 0x9d, 0xb3, 0x0c, 0x86, 0x45, 0xb7, 0x9b, 0x9b, 0x90, 0x35, 0x70, 0x6a,
+ 0x76, 0x9c, 0x1b, 0x5e, 0x9e, 0x9c, 0xd8, 0x90, 0xe7, 0x7b, 0xc8, 0x48,
+ 0xa7, 0x71, 0xdb, 0x6b, 0xd8, 0x5e, 0x3d, 0x2a, 0xef, 0xdf, 0xc7, 0x19,
+ 0x74, 0xfb, 0x76, 0x3a, 0x7c, 0x2b, 0x2a, 0x00, 0xd6, 0x65, 0xed, 0xed,
+ 0x5b, 0xe0, 0x98, 0xe9, 0x4f, 0x3b, 0xf0, 0x7b, 0xf8, 0x22, 0x3d, 0xcd,
+ 0x6a, 0x18, 0xe6, 0x09, 0xb9, 0x8c, 0x19, 0x68, 0x28, 0x04, 0x63, 0x51,
+ 0x08, 0x14, 0xc9, 0x9b, 0x2e, 0x4c, 0x9b, 0x52, 0x68, 0x46, 0x35, 0xc0,
+ 0xbc, 0x38, 0x3e, 0x61, 0x75, 0x02, 0xa1, 0x26, 0xfa, 0x1a, 0x56, 0x06,
+ 0x3d, 0xf3, 0xee, 0x46, 0x11, 0x38, 0x78, 0x52, 0xb2, 0x20, 0xaf, 0x59,
+ 0x74, 0x90, 0x05, 0xa6, 0x25, 0xa6, 0xe6, 0x84, 0xe0, 0xba, 0x49, 0xf0,
+ 0x0a, 0xd7, 0xb7, 0xdd, 0x96, 0xdd, 0x36, 0x82, 0xcd, 0x4a, 0x94, 0xd8,
+ 0xa9, 0xc9, 0x2d, 0x79, 0xb1, 0x64, 0x82, 0xb8, 0x0a, 0xcd, 0x25, 0x45,
+ 0x5c, 0x66, 0x72, 0x1d, 0x0b, 0x20, 0x97, 0x75, 0x52, 0xe4, 0x1a, 0x55,
+ 0x2e, 0xc6, 0xb9, 0x50, 0xce, 0x65, 0xc1, 0x50, 0xdc, 0x21, 0x55, 0x7f,
+ 0xbd, 0x0a, 0xc3, 0x19, 0xb8, 0x78, 0xe9, 0x49, 0x4e, 0x48, 0x9b, 0x9c,
+ 0x39, 0x3d, 0xac, 0xc8, 0xb1, 0x07, 0xcc, 0x00, 0x56, 0x72, 0xb9, 0xce,
+ 0xd2, 0x14, 0x65, 0xbe, 0x9a, 0x7a, 0x3d, 0x5c, 0x90, 0x76, 0xa8, 0x64,
+ 0x55, 0x17, 0x2d, 0xa8, 0x6e, 0x22, 0xbf, 0x6c, 0xfc, 0x2f, 0x5e, 0x42,
+ 0x58, 0x6a, 0x53, 0x7a, 0xce, 0x8c, 0xc1, 0x4c, 0x84, 0x14, 0xf0, 0xac,
+ 0x94, 0x5f, 0x2e, 0xd5, 0x9f, 0x9e, 0xbb, 0x91, 0x92, 0x26, 0x4e, 0xae,
+ 0x4e, 0x5c, 0x26, 0x40, 0x8e, 0x70, 0xeb, 0xdb, 0x5b, 0x2d, 0x92, 0x74,
+ 0xe2, 0xe8, 0x4f, 0xd7, 0xfa, 0x49, 0x5d, 0x89, 0xb0, 0x1a, 0xa5, 0xec,
+ 0xcc, 0x15, 0xbc, 0x22, 0x9a, 0x9d, 0x41, 0x78, 0xa0, 0x2c, 0x5d, 0x6f,
+ 0x3a, 0x0a, 0x6c, 0x5e, 0xd1, 0x97, 0x3b, 0x96, 0xae, 0x4d, 0x46, 0x62,
+ 0x8d, 0xbf, 0x03, 0x10, 0x03, 0x47, 0xad, 0xf8, 0x02, 0x70, 0x90, 0x66,
+ 0x9e, 0x52, 0xdb, 0xbc, 0x4f, 0xc2, 0x4c, 0xeb, 0xc0, 0x21, 0x7b, 0x0f,
+ 0x3f, 0xed, 0x74, 0x1f, 0x8b, 0x02, 0xfd, 0x4e, 0xff, 0xc0, 0xe3, 0x49,
+ 0x7f, 0x65, 0xe8, 0x2f, 0x1d, 0xab, 0x93, 0x8a, 0x57, 0x34, 0xf4, 0x14,
+ 0xaa, 0x69, 0x4b, 0xaf, 0xc0, 0x31, 0x80, 0xc8, 0x7a, 0x71, 0x2a, 0x39,
+ 0x01, 0x8b, 0x43, 0xf8, 0xdd, 0xc7, 0x49, 0x0f, 0x3c, 0xe9, 0x63, 0xb0,
+ 0xd6, 0x29, 0x78, 0x8e, 0x20, 0xd9, 0xd8, 0xda, 0xd6, 0x0b, 0x77, 0x5d,
+ 0x27, 0x44, 0x30, 0xf3, 0xc0, 0xaf, 0xc3, 0x8b, 0x0f, 0x34, 0x33, 0x06,
+ 0xb2, 0x38, 0x2b, 0x0b, 0xd6, 0xe1, 0x65, 0x09, 0x11, 0xb3, 0x9c, 0xb2,
+ 0xab, 0xcb, 0xbd, 0xa7, 0xf5, 0x8b, 0xf6, 0x9f, 0x77, 0x76, 0xff, 0x5a,
+ 0x2f, 0xea, 0xf4, 0x8a, 0x64, 0x16, 0x33, 0x6d, 0x71, 0x0f, 0xa2, 0x36,
+ 0x6b, 0x0d, 0x2c, 0x40, 0x34, 0x34, 0xc2, 0xf6, 0x95, 0xb4, 0x26, 0x81,
+ 0x9e, 0xc8, 0x0f, 0x98, 0x91, 0x16, 0x01, 0x2f, 0x17, 0x75, 0xcc, 0x64,
+ 0x02, 0x23, 0x79, 0x64, 0xb1, 0x67, 0x9d, 0xdd, 0xa7, 0xab, 0xf1, 0xcf,
+ 0x87, 0x1b, 0xc9, 0x33, 0x6a, 0x1b, 0x49, 0xb9, 0x54, 0xff, 0xb5, 0x43,
+ 0x13, 0xb8, 0xe7, 0x37, 0x74, 0x79, 0x71, 0x9b, 0x63, 0xe6, 0x65, 0xc0,
+ 0x68, 0x60, 0x53, 0x64, 0x4d, 0x77, 0x25, 0xe7, 0x5c, 0x5f, 0x67, 0xfc,
+ 0x4f, 0xc5, 0x6a, 0xf9, 0x21, 0x64, 0x3f, 0x12, 0x2f, 0x93, 0xab, 0x3f,
+ 0xc9, 0x1c, 0x68, 0xb8, 0xbe, 0x0d, 0x43, 0x8b, 0xe5, 0x6d, 0x19, 0xc4,
+ 0x0f, 0x02, 0x3f, 0x5a, 0x36, 0xf4, 0x88, 0x1c, 0x50, 0xdf, 0xe9, 0x91,
+ 0x03, 0x89, 0xab, 0x63, 0x22, 0x61, 0x6b, 0xd3, 0x6f, 0xdf, 0x1e, 0xef,
+ 0x74, 0x1f, 0xdf, 0x5d, 0xa3, 0x48, 0x99, 0x03, 0x4f, 0x72, 0x45, 0x81,
+ 0x53, 0xc8, 0x46, 0xd7, 0xd2, 0x13, 0x16, 0x64, 0x00, 0xb7, 0x6c, 0x84,
+ 0x6d, 0x78, 0xb1, 0xbd, 0x90, 0x66, 0x2b, 0x03, 0xe9, 0x9e, 0x6d, 0x09,
+ 0xb7, 0x1d, 0x7f, 0x25, 0x11, 0x0c, 0x6e, 0xb5, 0x2d, 0x6e, 0xb0, 0xd7,
+ 0xf4, 0x1e, 0xee, 0x87, 0xe7, 0x0c, 0x44, 0x3b, 0x51, 0xd9, 0xb6, 0xd0,
+ 0xa7, 0xfe, 0x62, 0xe3, 0x07, 0x0c, 0xe7, 0xf4, 0xfc, 0x82, 0x57, 0x5d,
+ 0x19, 0xd2, 0xed, 0xc8, 0x2e, 0xaf, 0xa7, 0xa9, 0xcf, 0xc0, 0x8c, 0x16,
+ 0xe1, 0x91, 0x35, 0x9f, 0x27, 0x64, 0x1a, 0xa5, 0x14, 0xc8, 0xe5, 0x2a,
+ 0x5b, 0xa5, 0x33, 0xb7, 0xa6, 0xae, 0xb0, 0xe8, 0xc2, 0x05, 0x6c, 0x5b,
+ 0xaf, 0x46, 0x69, 0x45, 0xe3, 0x4a, 0xe6, 0xc5, 0x99, 0x54, 0x36, 0xb7,
+ 0x06, 0xcc, 0xf2, 0x70, 0xc5, 0x66, 0x78, 0x1f, 0x66, 0xba, 0x9b, 0x1b,
+ 0xce, 0xe4, 0x74, 0x55, 0xc2, 0x3d, 0x4b, 0x0f, 0xf0, 0x6c, 0x60, 0x59,
+ 0xd8, 0x6b, 0x7d, 0x64, 0x64, 0xbc, 0x60, 0xc3, 0x6c, 0x4f, 0x02, 0xfe,
+ 0x53, 0xeb, 0xd2, 0xe6, 0x4e, 0xf3, 0x80, 0xa9, 0xb0, 0x8a, 0x7a, 0x85,
+ 0x01, 0x9b, 0x1b, 0x1f, 0x04, 0xf7, 0xb3, 0x7b, 0x6f, 0xb7, 0x15, 0x58,
+ 0x6b, 0xb1, 0x57, 0x20, 0xad, 0x91, 0x8a, 0x68, 0xa5, 0x7e, 0x80, 0x40,
+ 0x98, 0x2d, 0xec, 0x49, 0x57, 0x49, 0xff, 0x8c, 0x23, 0x9b, 0x7c, 0x79,
+ 0x16, 0xc5, 0x54, 0x74, 0xe7, 0x9a, 0xfb, 0x5e, 0x05, 0x8e, 0xdc, 0x63,
+ 0xb1, 0xa1, 0xbf, 0xdf, 0xd9, 0xeb, 0x37, 0xcc, 0xdb, 0xe5, 0x00, 0xc4,
+ 0xa6, 0xb6, 0x87, 0x0b, 0x05, 0x00, 0x02, 0x62, 0x9b, 0x4b, 0xf5, 0xed,
+ 0x95, 0x9c, 0xbf, 0xb9, 0xe1, 0x4e, 0x04, 0x44, 0x8a, 0x72, 0x39, 0x6f,
+ 0x96, 0xa1, 0xd4, 0x60, 0x07, 0xfb, 0x8f, 0xb6, 0x3a, 0x27, 0x3b, 0x40,
+ 0x4e, 0x4e, 0xce, 0x57, 0x70, 0x7b, 0x40, 0x2a, 0x64, 0x50, 0x93, 0xbb,
+ 0x33, 0xa8, 0xd7, 0x99, 0x18, 0xba, 0x40, 0x23, 0x48, 0x96, 0x50, 0xec,
+ 0x1e, 0x42, 0xb2, 0x07, 0x7f, 0xb3, 0x68, 0x1c, 0x95, 0x6b, 0xb3, 0x8e,
+ 0x8a, 0x96, 0x09, 0xc5, 0x1d, 0xb3, 0x74, 0xd5, 0xd5, 0x87, 0xcd, 0x8d,
+ 0x93, 0x0f, 0x87, 0x70, 0x6f, 0xc8, 0x9b, 0x12, 0x5b, 0xb2, 0x69, 0x0f,
+ 0xf4, 0xc4, 0x39, 0xc3, 0x25, 0x11, 0x91, 0x33, 0x50, 0x42, 0x15, 0xb3,
+ 0xfb, 0xbe, 0xac, 0x23, 0xd2, 0xad, 0x52, 0x2e, 0xef, 0x49, 0x3a, 0x40,
+ 0x98, 0x85, 0x25, 0xd8, 0x34, 0x20, 0xe0, 0x0e, 0x50, 0xd4, 0xb6, 0x8a,
+ 0xed, 0x40, 0x29, 0x63, 0x43, 0x04, 0x4e, 0xb9, 0x3d, 0x38, 0x71, 0xb0,
+ 0x46, 0xaf, 0x63, 0xbb, 0xfb, 0xa8, 0x3a, 0x76, 0x9f, 0xfb, 0xd0, 0x76,
+ 0xa3, 0xed, 0x7d, 0x4e, 0x09, 0x8a, 0x5f, 0x1f, 0x5f, 0xab, 0xef, 0x5e,
+ 0xbb, 0xe0, 0x50, 0x5d, 0xba, 0xdb, 0x73, 0x2a, 0x8b, 0x43, 0xf5, 0xfa,
+ 0xec, 0xfd, 0xd1, 0x3b, 0x75, 0x7a, 0x72, 0x76, 0x55, 0xd7, 0xf6, 0xb6,
+ 0x30, 0x15, 0x45, 0x87, 0x3c, 0x2a, 0xf3, 0xc7, 0x7b, 0x5d, 0x77, 0x8f,
+ 0x52, 0x65, 0x81, 0x3d, 0x27, 0x70, 0xc8, 0xec, 0x2f, 0x94, 0xb7, 0x03,
+ 0x1c, 0x12, 0x75, 0xef, 0xe6, 0x71, 0x06, 0xd5, 0xfc, 0x66, 0xd2, 0x7c,
+ 0xc1, 0xe3, 0x92, 0x2c, 0x99, 0x17, 0x19, 0xdb, 0x6a, 0xf3, 0x0a, 0x29,
+ 0xc5, 0x48, 0xaf, 0x9d, 0x38, 0x7f, 0x05, 0x6b, 0x58, 0x9c, 0x5f, 0x96,
+ 0x70, 0xc3, 0xae, 0x4b, 0x48, 0xea, 0xe3, 0xf9, 0x89, 0xaf, 0xd7, 0xc4,
+ 0x6e, 0x6d, 0x9a, 0x97, 0x4a, 0x23, 0xbb, 0x6f, 0xcc, 0x6a, 0xfb, 0x97,
+ 0x9d, 0xaf, 0x18, 0xf4, 0xee, 0xc1, 0xaa, 0x44, 0x3e, 0x39, 0x29, 0x7a,
+ 0xa3, 0xa5, 0xfa, 0x07, 0xea, 0x6d, 0x05, 0x8e, 0xa4, 0x90, 0x3b, 0x14,
+ 0xaf, 0x13, 0x94, 0x37, 0x61, 0x75, 0x88, 0x97, 0x58, 0x26, 0xf2, 0x95,
+ 0xc4, 0x12, 0x52, 0x6d, 0xd7, 0x01, 0x6f, 0x79, 0x5a, 0xf0, 0x1a, 0xc1,
+ 0x3b, 0x56, 0xa7, 0xae, 0xe4, 0xf8, 0x78, 0x0a, 0x19, 0xc6, 0x48, 0x33,
+ 0xd8, 0x36, 0x98, 0x94, 0x15, 0x65, 0x0b, 0x1e, 0x9a, 0x4a, 0x10, 0xa8,
+ 0xef, 0xdc, 0xea, 0x34, 0x05, 0x8a, 0x0e, 0x8c, 0xef, 0xe4, 0x12, 0xa4,
+ 0xe6, 0x51, 0x60, 0xdb, 0x87, 0xab, 0xb2, 0xc0, 0x37, 0xb9, 0xe0, 0xe9,
+ 0x04, 0xe2, 0x4c, 0x0f, 0x0b, 0x5e, 0xe9, 0xe9, 0xbd, 0xac, 0xb3, 0x1c,
+ 0xb7, 0xac, 0x78, 0xdd, 0x75, 0xda, 0xf4, 0x5a, 0x40, 0x7a, 0xe9, 0xc3,
+ 0x4c, 0x4c, 0x44, 0x02, 0xbb, 0x27, 0xfa, 0x58, 0x82, 0x8c, 0xae, 0xcf,
+ 0xa8, 0xa0, 0x2b, 0xfa, 0x96, 0x53, 0x50, 0xa0, 0xa9, 0xfa, 0x43, 0x7d,
+ 0x0e, 0xb9, 0x5c, 0x99, 0x96, 0x81, 0x4c, 0x0e, 0xd7, 0x99, 0x32, 0x8c,
+ 0x27, 0xf3, 0xae, 0xba, 0xc4, 0x56, 0xe6, 0xca, 0xe3, 0xb9, 0x3f, 0x01,
+ 0xe5, 0x1c, 0xac, 0x79, 0x72, 0xd7, 0xef, 0xa7, 0xe2, 0x85, 0x49, 0xf1,
+ 0x98, 0x17, 0x3c, 0xbd, 0xd7, 0xaa, 0x9a, 0x88, 0xbc, 0x56, 0xdb, 0x53,
+ 0x04, 0x7e, 0xd2, 0x19, 0x66, 0x66, 0x77, 0xdd, 0x71, 0x7b, 0xc6, 0x18,
+ 0x61, 0x57, 0xb1, 0x86, 0xfc, 0x53, 0x16, 0xb0, 0xb4, 0x43, 0xdf, 0xb2,
+ 0x92, 0xeb, 0xef, 0xee, 0x3e, 0x39, 0x88, 0x55, 0xb9, 0x1c, 0x78, 0xf2,
+ 0x48, 0x9b, 0xa5, 0x01, 0xe4, 0xc7, 0x90, 0xdf, 0xb1, 0x77, 0x7c, 0x0f,
+ 0xd9, 0x7f, 0x42, 0x52, 0x05, 0xa8, 0xde, 0xdc, 0x70, 0xd7, 0x44, 0x67,
+ 0x8b, 0xf9, 0xcc, 0xa4, 0x72, 0x0c, 0xe2, 0xb2, 0x95, 0x04, 0x62, 0x2c,
+ 0x61, 0x52, 0x56, 0x99, 0x62, 0x5a, 0x89, 0xf9, 0xca, 0xa6, 0x06, 0x6b,
+ 0x80, 0x84, 0x8d, 0x9c, 0x94, 0x0c, 0xf2, 0x34, 0xa2, 0xe3, 0x79, 0x5b,
+ 0xfd, 0x76, 0x65, 0xa9, 0x17, 0x26, 0x9e, 0x3c, 0x42, 0x6c, 0xaf, 0xb3,
+ 0x27, 0xb8, 0xcb, 0x17, 0xad, 0x87, 0xae, 0x83, 0xf7, 0xb5, 0xbe, 0x22,
+ 0x26, 0x35, 0x83, 0x85, 0x78, 0xbd, 0x38, 0xae, 0xf2, 0x7e, 0xab, 0xb6,
+ 0x33, 0x9f, 0x28, 0x6b, 0xcb, 0xdf, 0x69, 0xbb, 0x9b, 0xca, 0x30, 0x80,
+ 0x9c, 0xd9, 0xeb, 0x0d, 0x62, 0xc9, 0x44, 0xe7, 0x63, 0x97, 0x20, 0x4e,
+ 0x3f, 0xbe, 0x5a, 0x29, 0xf2, 0xb6, 0x81, 0x1b, 0x6b, 0x9f, 0xe1, 0xf1,
+ 0x7e, 0x54, 0xf0, 0x0f, 0x06, 0x00, 0x01, 0xb3, 0xca, 0x27, 0x75, 0x9b,
+ 0x75, 0xeb, 0x54, 0x1a, 0xaa, 0x33, 0xf9, 0x3b, 0xa8, 0x1a, 0x36, 0x64,
+ 0xbc, 0xbd, 0x8f, 0xea, 0x4e, 0x8c, 0x70, 0xe5, 0x92, 0xb1, 0x45, 0x45,
+ 0x4d, 0xec, 0x0d, 0x4b, 0x70, 0x48, 0x59, 0xda, 0x89, 0xae, 0x42, 0xee,
+ 0xda, 0x3e, 0x8c, 0x33, 0x62, 0x5b, 0x14, 0x00, 0x63, 0xf2, 0xb4, 0xdc,
+ 0xb6, 0x3b, 0x7c, 0x63, 0x06, 0xff, 0x73, 0xef, 0x1f, 0xb5, 0xc6, 0xbd,
+ 0x7b, 0x11, 0x45, 0x4a, 0xb2, 0xb5, 0x3d, 0xd3, 0x65, 0x3f, 0xb4, 0x6d,
+ 0x55, 0x7a, 0x05, 0xd3, 0x44, 0x54, 0x04, 0xdf, 0x26, 0x65, 0x1e, 0xe4,
+ 0xd1, 0x43, 0x89, 0xb4, 0x78, 0x5d, 0xc5, 0xba, 0xdd, 0xec, 0x3f, 0xbc,
+ 0x05, 0x27, 0xaf, 0xb2, 0x42, 0xe3, 0xb1, 0xa9, 0x92, 0xb6, 0xba, 0xd0,
+ 0x55, 0xcc, 0x5e, 0x3b, 0x9c, 0xb9, 0xed, 0xe2, 0x35, 0x2c, 0x03, 0xe2,
+ 0x48, 0xf8, 0x37, 0x32, 0xee, 0x98, 0x76, 0x06, 0x79, 0x23, 0xde, 0x4f,
+ 0x89, 0xdc, 0x22, 0xd9, 0x57, 0x4b, 0x20, 0x8c, 0xb5, 0xe7, 0x96, 0xda,
+ 0x16, 0x5e, 0x78, 0x48, 0xe1, 0x3b, 0x3b, 0xa5, 0xbd, 0xe7, 0x72, 0x23,
+ 0x17, 0x10, 0x10, 0xe1, 0x19, 0x07, 0xfe, 0xc6, 0x3f, 0x41, 0x08, 0x6d,
+ 0xf5, 0x89, 0xed, 0x1c, 0x95, 0xe5, 0x27, 0xb6, 0x22, 0xc4, 0x1c, 0xdf,
+ 0x39, 0xf9, 0xe1, 0xfd, 0xa9, 0x58, 0x88, 0xfd, 0x64, 0xef, 0xec, 0x88,
+ 0x0f, 0xad, 0xb4, 0x1d, 0xc1, 0xa8, 0x4d, 0xa3, 0xcb, 0x3f, 0xf8, 0x70,
+ 0x4d, 0x0d, 0xed, 0x3a, 0x72, 0xf6, 0xb0, 0x92, 0xc7, 0xe5, 0xfe, 0xb4,
+ 0x72, 0x1e, 0xb3, 0x04, 0x5a, 0x65, 0xe1, 0x16, 0x6b, 0xf1, 0x6a, 0x84,
+ 0xdb, 0xf6, 0x0d, 0xa0, 0x85, 0x14, 0xe2, 0xda, 0xde, 0xda, 0xb1, 0x76,
+ 0x5a, 0xff, 0x71, 0x90, 0x63, 0xb0, 0xab, 0xb6, 0xcf, 0xb6, 0x78, 0xc2,
+ 0x82, 0xdd, 0x47, 0xa5, 0xe3, 0x55, 0xd9, 0x3f, 0xcd, 0x03, 0x23, 0x9b,
+ 0x1b, 0xbc, 0x14, 0xe1, 0x8f, 0x7d, 0x01, 0xa4, 0x64, 0xe3, 0xa4, 0x27,
+ 0xf7, 0x79, 0x6a, 0x2c, 0xe1, 0x0b, 0x75, 0xf9, 0x51, 0xc3, 0xbf, 0x9d,
+ 0xc7, 0x8d, 0x64, 0x7f, 0xd5, 0x48, 0xfe, 0xaf, 0xbd, 0x7f, 0x5d, 0x6e,
+ 0xe4, 0x48, 0xf2, 0xc5, 0xc1, 0xef, 0x34, 0xe3, 0x3b, 0x64, 0x43, 0xdb,
+ 0x22, 0xa9, 0x06, 0xc0, 0xfb, 0xad, 0x28, 0x51, 0x0b, 0x82, 0xa0, 0xc4,
+ 0x9e, 0xba, 0x9d, 0x22, 0x25, 0x75, 0x1f, 0x99, 0x66, 0x2c, 0x09, 0x24,
+ 0xc9, 0x9c, 0x02, 0x90, 0x6c, 0x24, 0x50, 0x2c, 0xca, 0x64, 0xfb, 0x3e,
+ 0xfb, 0x28, 0xfb, 0x14, 0xfb, 0x65, 0xcd, 0xf6, 0x25, 0xce, 0x87, 0x0d,
+ 0xbf, 0x45, 0x78, 0x44, 0x46, 0x02, 0x60, 0xa9, 0x6a, 0xce, 0x9c, 0xb5,
+ 0x7f, 0x5b, 0xab, 0x08, 0x24, 0x32, 0x23, 0xe3, 0xe2, 0xe1, 0xe1, 0xd7,
+ 0x9f, 0x1b, 0x66, 0xfe, 0x34, 0x36, 0x92, 0x01, 0x1e, 0x15, 0x8f, 0x05,
+ 0xb4, 0xff, 0x5e, 0x79, 0xfa, 0xe1, 0xe4, 0x01, 0xe3, 0x2d, 0x48, 0x70,
+ 0x66, 0xf6, 0x47, 0x4f, 0xce, 0xab, 0x8a, 0x6e, 0x11, 0x68, 0x6f, 0x0b,
+ 0xbb, 0x00, 0x9f, 0xb6, 0xdb, 0x64, 0x3b, 0x85, 0x48, 0x0f, 0x3c, 0xc8,
+ 0xc1, 0xea, 0x05, 0xe2, 0x2b, 0xda, 0xab, 0xd7, 0x50, 0x34, 0xc6, 0x6f,
+ 0xd9, 0x47, 0xd8, 0x36, 0x60, 0x2b, 0xe1, 0x58, 0x04, 0xc3, 0xe8, 0x40,
+ 0x61, 0xa4, 0x1c, 0x14, 0xf4, 0xe9, 0x42, 0x02, 0x06, 0x3e, 0x0e, 0xcc,
+ 0x8a, 0x5b, 0x99, 0x43, 0xf9, 0x56, 0xbb, 0x1b, 0xa5, 0x86, 0xb2, 0x3f,
+ 0x38, 0xef, 0x2f, 0xa8, 0x05, 0xb0, 0xab, 0x93, 0xdb, 0x21, 0xd0, 0x13,
+ 0xd1, 0xbb, 0x84, 0xe5, 0x41, 0x66, 0x93, 0x78, 0x99, 0xe6, 0xb7, 0x5d,
+ 0xd1, 0xab, 0x64, 0x63, 0x91, 0xe7, 0x13, 0xf2, 0x63, 0x88, 0xbb, 0xab,
+ 0xcd, 0x55, 0x7b, 0xf6, 0xe3, 0xa4, 0x45, 0xda, 0x34, 0xfa, 0xa6, 0x39,
+ 0x7e, 0xc0, 0x52, 0x46, 0x1e, 0x27, 0xbe, 0xe1, 0x9e, 0x6c, 0xf2, 0x0f,
+ 0x18, 0xde, 0x83, 0xe9, 0x57, 0x4b, 0xb7, 0xeb, 0x8b, 0xc4, 0x36, 0x95,
+ 0xac, 0x30, 0x3b, 0x0c, 0x4f, 0x72, 0x8e, 0x05, 0x47, 0x89, 0xe2, 0x97,
+ 0x5f, 0x7e, 0x01, 0xc9, 0x45, 0x6c, 0xaf, 0x9d, 0x87, 0x49, 0x3e, 0x44,
+ 0x4f, 0x0d, 0x52, 0x09, 0xda, 0xa5, 0x90, 0x8f, 0xb2, 0x71, 0xd4, 0x12,
+ 0x20, 0x93, 0xb7, 0x36, 0xad, 0xaf, 0x67, 0x6d, 0x73, 0x86, 0x81, 0xcd,
+ 0xb7, 0xe8, 0x93, 0x88, 0x0e, 0xe9, 0x46, 0xce, 0x74, 0xe3, 0x6c, 0x05,
+ 0x1f, 0x3b, 0x5b, 0x70, 0x1f, 0x66, 0x13, 0x42, 0xfa, 0xe0, 0x09, 0xe5,
+ 0xe6, 0xb1, 0xe2, 0x63, 0x2e, 0xe0, 0xd9, 0x4f, 0xc9, 0x86, 0x90, 0x56,
+ 0x48, 0x27, 0x8e, 0x79, 0x17, 0xe4, 0x63, 0x18, 0x7d, 0xbc, 0x40, 0x63,
+ 0x2d, 0x0c, 0x0a, 0x13, 0x9f, 0x48, 0x6e, 0x1a, 0x66, 0x77, 0x39, 0x05,
+ 0x44, 0x45, 0x67, 0xea, 0xa0, 0xb5, 0xbd, 0xdd, 0xda, 0xde, 0xf1, 0xb7,
+ 0x01, 0x0a, 0x91, 0x33, 0x8c, 0x60, 0x22, 0xc3, 0x32, 0x8a, 0xb3, 0x24,
+ 0x75, 0xa1, 0x8f, 0x01, 0x8d, 0x01, 0xe6, 0x5d, 0xaf, 0x7f, 0x7a, 0x75,
+ 0xd6, 0x7b, 0xd7, 0x3b, 0x67, 0x57, 0x09, 0x0d, 0x68, 0x04, 0xea, 0x35,
+ 0xa5, 0x02, 0x65, 0x39, 0x31, 0xba, 0x22, 0x39, 0xfb, 0xe9, 0xe5, 0xcb,
+ 0xde, 0xf5, 0x15, 0x50, 0x30, 0x78, 0x15, 0xf8, 0xb9, 0xb6, 0x93, 0x75,
+ 0x89, 0x85, 0xbc, 0x06, 0xf6, 0x6a, 0x38, 0x07, 0xfe, 0x4d, 0xd6, 0xc1,
+ 0x23, 0x00, 0xbc, 0xc4, 0xc8, 0x4d, 0x5d, 0xa1, 0x8b, 0x49, 0xfe, 0xc1,
+ 0x08, 0x10, 0x2d, 0x91, 0x67, 0xcd, 0xac, 0x26, 0x6c, 0x9b, 0xe8, 0xa3,
+ 0x04, 0x8c, 0xac, 0x01, 0x6d, 0xe9, 0x4e, 0x59, 0x58, 0xc3, 0x99, 0x5b,
+ 0xeb, 0x9e, 0x77, 0xae, 0x3b, 0xf6, 0x9a, 0x99, 0x29, 0x43, 0x9b, 0x23,
+ 0x38, 0xa2, 0xca, 0x42, 0xcc, 0x18, 0x78, 0xa8, 0x3b, 0x1e, 0xff, 0x22,
+ 0x39, 0xa7, 0xe9, 0xc7, 0xf0, 0x35, 0x0c, 0xa4, 0xd4, 0x47, 0x16, 0xdd,
+ 0x4f, 0xfa, 0xc4, 0xaf, 0xff, 0x9e, 0xde, 0xf4, 0x7f, 0x03, 0x75, 0x06,
+ 0x3d, 0x51, 0x25, 0x0a, 0x5f, 0x13, 0x08, 0x1d, 0x29, 0xef, 0x8b, 0x99,
+ 0x61, 0x00, 0xa0, 0x08, 0xff, 0x27, 0x6c, 0xfb, 0x5f, 0xb7, 0x5a, 0xc7,
+ 0xbf, 0xc1, 0x26, 0x36, 0x0a, 0x8f, 0x91, 0x2b, 0x8d, 0x74, 0xf7, 0xb2,
+ 0x90, 0x80, 0x24, 0x30, 0x98, 0xa2, 0xa5, 0xc8, 0xa6, 0x4c, 0x4d, 0xc1,
+ 0xeb, 0x0a, 0x67, 0xec, 0x0b, 0x4e, 0x3f, 0xfb, 0x3e, 0x59, 0x87, 0xe3,
+ 0xfb, 0x5f, 0x33, 0x52, 0xb7, 0xcc, 0xdc, 0xbc, 0x19, 0x83, 0x37, 0x83,
+ 0x14, 0x55, 0x58, 0x96, 0xd4, 0x28, 0xc4, 0xe8, 0x16, 0x47, 0xd3, 0x26,
+ 0xe4, 0xcf, 0xb6, 0x71, 0x38, 0x68, 0xb5, 0xb4, 0xa9, 0x9e, 0x64, 0x89,
+ 0x63, 0x15, 0x1c, 0x66, 0xcd, 0x74, 0xb9, 0x67, 0x4d, 0xb7, 0xb7, 0x69,
+ 0x3e, 0x04, 0x77, 0x1c, 0x77, 0x1e, 0xa4, 0x42, 0xb2, 0x95, 0x4b, 0xd0,
+ 0xdc, 0x80, 0x75, 0xaf, 0xf2, 0x84, 0x55, 0x29, 0x58, 0x47, 0x0c, 0x24,
+ 0x65, 0x29, 0xdc, 0x2c, 0x97, 0xe9, 0xed, 0x04, 0xf2, 0xef, 0xce, 0xf1,
+ 0x06, 0xf1, 0xed, 0x18, 0xfd, 0xa3, 0x40, 0x57, 0x9f, 0xf3, 0x1c, 0xde,
+ 0x80, 0x1c, 0x68, 0x3a, 0x08, 0x7d, 0xb8, 0x44, 0x45, 0x8f, 0xf2, 0xd1,
+ 0xd8, 0x74, 0x47, 0x1e, 0xe7, 0x11, 0x9a, 0xa7, 0xad, 0x76, 0xfc, 0x2e,
+ 0xc3, 0xa0, 0x53, 0x69, 0x02, 0x47, 0x20, 0x1b, 0x12, 0xce, 0xb4, 0x64,
+ 0xd6, 0x7a, 0x6d, 0xfe, 0xe7, 0x86, 0x4e, 0xfa, 0xc9, 0x07, 0xf0, 0x65,
+ 0xbc, 0x34, 0xef, 0xe9, 0x80, 0xe9, 0x42, 0x76, 0xb1, 0xe1, 0xe6, 0xc5,
+ 0xe3, 0xf8, 0x85, 0x25, 0xb3, 0x8a, 0x8e, 0xac, 0x55, 0xfc, 0x17, 0xac,
+ 0xe9, 0xf7, 0x41, 0x1d, 0x98, 0x8a, 0x35, 0x07, 0x6d, 0x85, 0x29, 0xf6,
+ 0x03, 0xb3, 0x1c, 0x1b, 0xd6, 0x2c, 0xf2, 0xe2, 0xc5, 0x77, 0x49, 0xff,
+ 0xa1, 0x41, 0xd1, 0x06, 0xc9, 0x5d, 0x51, 0x0c, 0xe2, 0xec, 0x90, 0x36,
+ 0xe3, 0x76, 0x64, 0x33, 0x5a, 0xf3, 0x1a, 0x69, 0x02, 0x68, 0xf5, 0xbb,
+ 0xe7, 0x90, 0x5c, 0x1c, 0xbd, 0x12, 0xd2, 0x38, 0x5c, 0xcd, 0x7a, 0x09,
+ 0xdc, 0x41, 0x58, 0xff, 0xce, 0xad, 0xf9, 0xef, 0xbc, 0xc8, 0x3f, 0x26,
+ 0x9b, 0x36, 0x68, 0x58, 0x0b, 0x62, 0x63, 0xde, 0xb0, 0x5a, 0x8c, 0x83,
+ 0x1e, 0x5a, 0x2d, 0x1d, 0xce, 0x9c, 0x4a, 0x4f, 0x9a, 0x51, 0xb3, 0x00,
+ 0x68, 0x20, 0x86, 0x95, 0xa1, 0xfa, 0x38, 0x28, 0x5e, 0xb0, 0xce, 0x33,
+ 0x7a, 0x30, 0xa3, 0xe2, 0x90, 0x4e, 0x34, 0x4b, 0x15, 0x60, 0xb6, 0x23,
+ 0x73, 0x38, 0x78, 0x70, 0xfb, 0xfe, 0xda, 0x94, 0xd0, 0xdb, 0x31, 0x84,
+ 0xfe, 0x41, 0xdf, 0xf1, 0x06, 0x4a, 0x07, 0x2a, 0xeb, 0x54, 0xf8, 0x03,
+ 0x30, 0x89, 0xee, 0xda, 0x43, 0x13, 0xde, 0xca, 0xf2, 0xc7, 0x8f, 0x22,
+ 0x13, 0x73, 0x0f, 0xeb, 0x9f, 0xde, 0xb2, 0xb6, 0x4d, 0xd8, 0xb5, 0x60,
+ 0x37, 0x45, 0x5d, 0x13, 0x79, 0x35, 0x7e, 0x44, 0xbd, 0xf9, 0x6a, 0x68,
+ 0xf4, 0x2b, 0x43, 0xcb, 0x5a, 0xfa, 0x86, 0xce, 0x91, 0xb9, 0xac, 0xbe,
+ 0x73, 0x3b, 0x47, 0x81, 0xe9, 0xf4, 0xfc, 0xda, 0xb0, 0xce, 0x4b, 0x09,
+ 0x7c, 0xb6, 0x47, 0xd1, 0x2b, 0xc3, 0x87, 0xd2, 0x6c, 0xe8, 0x59, 0x63,
+ 0x94, 0xf5, 0xcb, 0xc6, 0x06, 0xa0, 0xe7, 0xd9, 0x4c, 0xf2, 0xe6, 0xa6,
+ 0x69, 0xc5, 0x6a, 0xc8, 0x36, 0xf4, 0x02, 0x16, 0x1e, 0x02, 0x15, 0x70,
+ 0x6d, 0xc9, 0xc4, 0x8d, 0x5b, 0x8d, 0xec, 0x3f, 0x46, 0x34, 0x76, 0xeb,
+ 0x8b, 0x2a, 0x18, 0x6c, 0x54, 0xb6, 0x85, 0x8b, 0x16, 0x01, 0x2c, 0x0d,
+ 0x2c, 0x85, 0xb0, 0x91, 0xd9, 0x78, 0x3b, 0x67, 0x78, 0x9e, 0xb1, 0xd6,
+ 0xf0, 0x08, 0xe8, 0xdd, 0x63, 0x96, 0xbe, 0x37, 0x74, 0x92, 0xfb, 0x83,
+ 0xf4, 0xf4, 0x16, 0xe2, 0xb0, 0x44, 0x75, 0x86, 0xc1, 0xb3, 0x6f, 0x19,
+ 0x9d, 0x19, 0x48, 0x87, 0x5d, 0x19, 0x2f, 0xfc, 0xb4, 0xf9, 0x4d, 0xf2,
+ 0xcd, 0x26, 0xde, 0x00, 0xa3, 0x86, 0x21, 0xa8, 0x1c, 0x61, 0xcc, 0x86,
+ 0xbf, 0xc5, 0xfd, 0xb4, 0xbd, 0x75, 0xb0, 0x77, 0x60, 0x08, 0xfa, 0xc7,
+ 0x27, 0x73, 0xf4, 0x99, 0x8d, 0xcc, 0x8a, 0x8a, 0x3d, 0x59, 0x40, 0x94,
+ 0xeb, 0x0e, 0x58, 0xd6, 0x7e, 0x55, 0xa2, 0xc8, 0x4b, 0x52, 0x73, 0x0e,
+ 0x6a, 0x65, 0x55, 0x42, 0x2e, 0xb3, 0x6c, 0x8c, 0xd2, 0x9d, 0x7f, 0x24,
+ 0x41, 0xff, 0x30, 0x7f, 0xf5, 0x3e, 0x1b, 0x39, 0x81, 0xbb, 0x85, 0x02,
+ 0xb7, 0xd9, 0x31, 0xf9, 0x84, 0x52, 0xad, 0xd1, 0xcf, 0xa0, 0x2e, 0x36,
+ 0x81, 0xd1, 0xa3, 0x9e, 0x05, 0x6a, 0x30, 0x2e, 0x9f, 0x36, 0xa3, 0x01,
+ 0x8b, 0x29, 0x1e, 0x68, 0x5f, 0x35, 0xf9, 0x20, 0x59, 0xfb, 0x7e, 0x8d,
+ 0x88, 0x25, 0xc7, 0x88, 0x25, 0x9b, 0xfd, 0x4d, 0x9c, 0x1d, 0x23, 0x9a,
+ 0xc8, 0x17, 0x4b, 0x71, 0x8f, 0xc0, 0x3e, 0x8d, 0x88, 0x8b, 0x36, 0x60,
+ 0xb2, 0x5b, 0xb3, 0x12, 0x00, 0x49, 0x9d, 0xd8, 0xc6, 0xcd, 0x93, 0x33,
+ 0x54, 0xd4, 0xaf, 0xea, 0xf6, 0x81, 0x10, 0x2d, 0x9c, 0x87, 0xef, 0xcd,
+ 0x8e, 0x7e, 0x1c, 0xf3, 0x86, 0x30, 0x23, 0xc8, 0x39, 0xdd, 0xf6, 0xfc,
+ 0x4a, 0xa5, 0xd9, 0x97, 0x27, 0xda, 0x42, 0x4d, 0x0b, 0x7e, 0xf6, 0xfa,
+ 0x42, 0x2b, 0x0e, 0x9e, 0x32, 0x5a, 0xfb, 0xee, 0xef, 0xbf, 0x97, 0x77,
+ 0x5b, 0x4b, 0x7b, 0x1f, 0xc4, 0xf5, 0xac, 0x6f, 0x54, 0xb5, 0x5b, 0xc3,
+ 0xcc, 0xcc, 0x06, 0xc5, 0xcc, 0x65, 0x97, 0x30, 0x8c, 0xb9, 0xbf, 0x60,
+ 0xa5, 0x31, 0x33, 0x0c, 0xc9, 0xc3, 0xa4, 0x15, 0x4d, 0xd9, 0x53, 0x83,
+ 0xae, 0x6e, 0x2b, 0xee, 0x26, 0xb7, 0x86, 0xff, 0xaa, 0x13, 0x62, 0xce,
+ 0x24, 0x6c, 0x6d, 0xfa, 0xfc, 0x5c, 0x0c, 0x84, 0x00, 0x82, 0x60, 0x7a,
+ 0x05, 0x7e, 0x9a, 0xa6, 0xe3, 0x54, 0x24, 0xd1, 0x15, 0x93, 0xbb, 0x74,
+ 0xcc, 0xba, 0x32, 0x78, 0xdc, 0xac, 0x61, 0xf0, 0x5d, 0x46, 0xea, 0x16,
+ 0x75, 0x40, 0x74, 0x60, 0xb2, 0x4c, 0x7f, 0x1c, 0x0d, 0x01, 0xcb, 0x03,
+ 0x6d, 0xaf, 0x86, 0x9c, 0x1d, 0xa7, 0x15, 0x87, 0x24, 0x10, 0x1a, 0x9e,
+ 0x9e, 0xe2, 0x79, 0x40, 0x65, 0x69, 0x8c, 0x07, 0xf1, 0x63, 0x86, 0xf1,
+ 0xc1, 0x2c, 0xc0, 0x3d, 0xe0, 0x76, 0x18, 0xe6, 0x98, 0x06, 0x6d, 0xd4,
+ 0x10, 0x52, 0x4c, 0x60, 0xeb, 0x7d, 0x00, 0x1c, 0x86, 0x76, 0x72, 0x8e,
+ 0x3e, 0x54, 0x2b, 0x68, 0x02, 0x13, 0x80, 0xc3, 0xfe, 0xce, 0x74, 0xda,
+ 0x0a, 0x45, 0x61, 0x38, 0x05, 0xed, 0x39, 0x33, 0xa5, 0xfd, 0xfb, 0x26,
+ 0x18, 0xd5, 0xcd, 0x3c, 0xe2, 0x17, 0xb4, 0x48, 0x13, 0x37, 0x2f, 0x86,
+ 0xc5, 0xdd, 0x53, 0x1b, 0x13, 0xcc, 0x71, 0x9b, 0xed, 0xb4, 0x77, 0x90,
+ 0x0f, 0xbd, 0x15, 0x62, 0x23, 0x4f, 0x6c, 0xe7, 0xe1, 0xa1, 0x24, 0x83,
+ 0x00, 0x12, 0x4b, 0x5b, 0xd0, 0x11, 0x2c, 0x7f, 0x33, 0x2b, 0xf8, 0xf6,
+ 0x92, 0x53, 0xd2, 0x83, 0x4d, 0x87, 0x3e, 0x1f, 0x4f, 0x02, 0x02, 0x70,
+ 0x81, 0x51, 0x8e, 0x87, 0x13, 0xa4, 0x83, 0x21, 0xef, 0xba, 0x02, 0x99,
+ 0x6b, 0x04, 0xfe, 0x66, 0x75, 0x33, 0x1e, 0xef, 0x9c, 0x01, 0x4c, 0x1e,
+ 0x0b, 0x4a, 0x19, 0xa0, 0xe9, 0xc0, 0x0e, 0x5b, 0xa6, 0x78, 0x9b, 0xac,
+ 0x19, 0x09, 0x8c, 0x7e, 0x5f, 0x43, 0xf2, 0xd5, 0x0f, 0xb2, 0x66, 0x9c,
+ 0xfa, 0x6c, 0x14, 0x53, 0x44, 0x8c, 0x60, 0x0b, 0xc0, 0x13, 0xe5, 0x0c,
+ 0x64, 0xdb, 0x27, 0xf4, 0x6b, 0xb8, 0x30, 0x94, 0x97, 0xc5, 0x1d, 0x06,
+ 0x75, 0x5f, 0xa1, 0x0b, 0xd0, 0xac, 0x9b, 0xcd, 0x94, 0x37, 0x4c, 0x99,
+ 0x4d, 0xbf, 0xb0, 0x9f, 0x38, 0x95, 0x41, 0xc5, 0xb1, 0x80, 0xe8, 0x49,
+ 0x92, 0x3c, 0xb1, 0x89, 0x56, 0x3e, 0x6e, 0xa5, 0x2d, 0xd3, 0x45, 0x0c,
+ 0x48, 0x30, 0xa7, 0xe5, 0x68, 0x1e, 0x09, 0xcb, 0x5e, 0xc2, 0x99, 0x02,
+ 0x63, 0x1a, 0xa9, 0xdf, 0x7a, 0xc9, 0xd7, 0x71, 0xae, 0x0d, 0xb7, 0xff,
+ 0x7e, 0xa3, 0xb6, 0xa1, 0xad, 0xe3, 0x79, 0x42, 0x46, 0xd3, 0xdb, 0xaa,
+ 0x1c, 0x04, 0x62, 0x48, 0x60, 0x37, 0x59, 0x77, 0x5c, 0x7e, 0xf9, 0xc6,
+ 0x5b, 0xb3, 0x31, 0x88, 0x8f, 0x60, 0x39, 0x7c, 0x42, 0x3b, 0x8b, 0x48,
+ 0x71, 0x12, 0x5d, 0xdc, 0x84, 0x00, 0x01, 0x08, 0xd8, 0x9d, 0x02, 0xf9,
+ 0x8d, 0x20, 0x06, 0xc2, 0xe8, 0x78, 0x4f, 0xa2, 0x53, 0x61, 0xe7, 0xf0,
+ 0x28, 0x02, 0x4e, 0x5e, 0xf7, 0x52, 0x7b, 0x2e, 0x93, 0xcf, 0x6a, 0x94,
+ 0xfe, 0x27, 0x58, 0x9f, 0x8b, 0x51, 0x71, 0x97, 0xc9, 0x06, 0x46, 0x2d,
+ 0x63, 0x89, 0x16, 0xcc, 0x7a, 0x8e, 0x93, 0x06, 0xc7, 0xf7, 0xab, 0x34,
+ 0x7d, 0x14, 0x77, 0xf2, 0x0f, 0xa4, 0xe3, 0x20, 0xd5, 0xa3, 0x16, 0x53,
+ 0xdf, 0xa2, 0x0d, 0x43, 0x04, 0x6d, 0x01, 0x44, 0x77, 0xb2, 0x9d, 0xbd,
+ 0x07, 0x2b, 0xb7, 0x69, 0xeb, 0x6f, 0x96, 0x35, 0xc4, 0x9b, 0xd8, 0x3a,
+ 0x0e, 0xbc, 0x4b, 0x40, 0xa6, 0xc4, 0x70, 0xf0, 0x34, 0xb7, 0x3b, 0xc9,
+ 0xa8, 0xc4, 0x05, 0xbb, 0x13, 0x98, 0x6f, 0x00, 0x1f, 0x5a, 0x5d, 0x31,
+ 0x74, 0xd6, 0xae, 0x6d, 0xda, 0xd7, 0xc9, 0x6f, 0x49, 0x50, 0xc3, 0xac,
+ 0x07, 0xd0, 0x1c, 0x50, 0x11, 0x41, 0x16, 0x53, 0xdb, 0xc0, 0xf6, 0x71,
+ 0x35, 0xb0, 0xa5, 0xfa, 0x3c, 0x6d, 0x39, 0xcc, 0xb0, 0xaf, 0x6f, 0x69,
+ 0xd7, 0x37, 0x10, 0x02, 0x62, 0xc5, 0x6c, 0x8a, 0x9b, 0x5e, 0x18, 0x18,
+ 0xe9, 0x13, 0xe6, 0xde, 0xad, 0x83, 0x26, 0x04, 0xa8, 0xe1, 0x89, 0x64,
+ 0x4e, 0xcd, 0x32, 0x7b, 0x9f, 0x65, 0xc0, 0x2a, 0x54, 0xe3, 0x9b, 0x36,
+ 0xa0, 0x74, 0x33, 0x0c, 0x35, 0xdd, 0x74, 0xd8, 0x07, 0x10, 0xb7, 0x00,
+ 0x7f, 0x21, 0x88, 0x0f, 0x43, 0x5c, 0xcd, 0x74, 0xb6, 0x90, 0x8d, 0x35,
+ 0x04, 0x24, 0xe1, 0x54, 0x24, 0x32, 0x92, 0x38, 0xf1, 0x12, 0x86, 0xdf,
+ 0xd6, 0x27, 0xfc, 0x19, 0xa2, 0xbd, 0xb9, 0x81, 0xb7, 0xa2, 0x1d, 0xea,
+ 0x1f, 0x10, 0x81, 0x29, 0x49, 0x7d, 0x18, 0x53, 0x3f, 0x4c, 0x4b, 0x1c,
+ 0x09, 0x88, 0x2d, 0x86, 0x8d, 0x51, 0x7c, 0x05, 0x1a, 0xdb, 0x00, 0xc9,
+ 0x03, 0x98, 0x2f, 0xa8, 0xa9, 0x03, 0x88, 0x61, 0x1e, 0x4c, 0x31, 0x11,
+ 0xd7, 0xb0, 0x2b, 0x4c, 0xe2, 0x77, 0x09, 0x24, 0xdf, 0x6e, 0xf2, 0x7d,
+ 0x94, 0xfa, 0xc0, 0xdc, 0x4a, 0xe7, 0x0f, 0x52, 0xa6, 0xc1, 0x4d, 0x66,
+ 0x64, 0x06, 0xa0, 0x0c, 0x08, 0x09, 0x32, 0xc2, 0xfb, 0x0c, 0x58, 0x2b,
+ 0x26, 0x58, 0xa4, 0x23, 0x71, 0xbd, 0xb1, 0xf4, 0x40, 0xa0, 0x28, 0xc8,
+ 0xe2, 0x21, 0x6c, 0x1f, 0x5c, 0x1b, 0x20, 0x61, 0xb0, 0x2a, 0x6c, 0x6e,
+ 0xba, 0xcd, 0x41, 0x9f, 0x9d, 0x58, 0x2f, 0x0b, 0x65, 0xfe, 0x8d, 0x24,
+ 0x9b, 0xb1, 0x49, 0xf8, 0x3f, 0xf5, 0x99, 0x55, 0xab, 0x2b, 0x36, 0x25,
+ 0xd2, 0x4b, 0xe3, 0xb8, 0xbc, 0x7a, 0x83, 0x20, 0x53, 0x9b, 0xa7, 0xed,
+ 0xe4, 0xec, 0x29, 0xb1, 0x51, 0x15, 0x18, 0x2c, 0xea, 0x8d, 0x1a, 0x45,
+ 0x47, 0x30, 0x04, 0x15, 0x70, 0x40, 0x19, 0xb5, 0x18, 0x3d, 0xf5, 0xf6,
+ 0x67, 0x17, 0xfb, 0x5f, 0x7d, 0x0a, 0x29, 0x6a, 0x86, 0xf1, 0x2e, 0x12,
+ 0xd9, 0x02, 0x3c, 0xa9, 0x7e, 0xde, 0x49, 0xc2, 0x69, 0x9c, 0xba, 0xfd,
+ 0x29, 0x33, 0x6e, 0x0e, 0x0c, 0xce, 0xcc, 0x2a, 0x28, 0xf4, 0x9b, 0xed,
+ 0x2a, 0x1c, 0xb6, 0x06, 0x89, 0x60, 0x12, 0xc2, 0x06, 0x4b, 0xdc, 0x4e,
+ 0xde, 0xba, 0x2f, 0x30, 0xb5, 0xaa, 0x2b, 0xf2, 0x56, 0x58, 0x36, 0x7a,
+ 0xad, 0xd5, 0xdc, 0x1a, 0xa7, 0x4e, 0x89, 0x53, 0xef, 0xb6, 0xda, 0x05,
+ 0x75, 0x01, 0x17, 0xa0, 0xd2, 0x77, 0x78, 0x72, 0x80, 0xb9, 0x13, 0xb6,
+ 0x0d, 0xf3, 0x06, 0xcc, 0x91, 0x70, 0x0d, 0x59, 0xaf, 0xe5, 0x82, 0xc6,
+ 0xc8, 0xeb, 0xd8, 0x38, 0xa5, 0xbf, 0xae, 0x05, 0x73, 0xca, 0x31, 0xe1,
+ 0xa3, 0xd9, 0x02, 0x69, 0x5b, 0xc7, 0x16, 0xb3, 0xee, 0x2f, 0xcb, 0x00,
+ 0xa7, 0x1d, 0x4f, 0xfc, 0x30, 0x7d, 0x02, 0x07, 0x30, 0x3a, 0xd5, 0xe8,
+ 0x10, 0x35, 0xe2, 0xa5, 0x9c, 0xa2, 0x44, 0x81, 0x86, 0xdc, 0x3e, 0xe4,
+ 0xd4, 0xa6, 0x3d, 0x14, 0xd1, 0xf9, 0x66, 0x8e, 0x06, 0xf4, 0x3d, 0x49,
+ 0x34, 0x54, 0x29, 0x19, 0x77, 0x7e, 0xe3, 0x74, 0xa6, 0x73, 0xeb, 0x89,
+ 0x6b, 0xdc, 0x52, 0xc8, 0xb7, 0xac, 0x06, 0xe2, 0xb6, 0xe7, 0x6d, 0x06,
+ 0x1b, 0xa1, 0x81, 0xfa, 0xe1, 0x77, 0x0d, 0x4f, 0xd2, 0x69, 0x9c, 0x76,
+ 0x12, 0x48, 0xd9, 0x7e, 0x44, 0x4a, 0x32, 0xdc, 0x60, 0x98, 0x31, 0xdd,
+ 0x60, 0xc0, 0x24, 0xb6, 0x75, 0xca, 0xdd, 0xa6, 0x27, 0x68, 0x9a, 0x4e,
+ 0x61, 0xb9, 0x31, 0x31, 0x91, 0x93, 0x67, 0x42, 0x72, 0x26, 0xd7, 0x3c,
+ 0x8c, 0x14, 0xfd, 0x35, 0x65, 0x89, 0xda, 0xb6, 0x19, 0x4e, 0xee, 0x6c,
+ 0x1c, 0xb8, 0x4e, 0x6a, 0x00, 0xdc, 0xf1, 0xd3, 0x24, 0x1c, 0x82, 0xd9,
+ 0xae, 0xd2, 0xfb, 0x8e, 0xdb, 0xb9, 0x8d, 0xd3, 0x4b, 0x30, 0x67, 0x83,
+ 0xf9, 0xd7, 0xc8, 0x31, 0xd9, 0x80, 0xe3, 0x48, 0xc6, 0x89, 0xd7, 0x5f,
+ 0x4c, 0xd5, 0x2a, 0xd0, 0xe1, 0x04, 0x89, 0x9f, 0x10, 0xf9, 0x59, 0x8c,
+ 0x91, 0x7b, 0x0c, 0xd1, 0xff, 0x23, 0x29, 0xa8, 0x34, 0x78, 0xb0, 0x30,
+ 0xd0, 0xb6, 0x41, 0x37, 0x04, 0x0e, 0x55, 0x31, 0x0b, 0x1e, 0xbc, 0xee,
+ 0xeb, 0x75, 0x35, 0xdb, 0xcf, 0x32, 0x2a, 0x8a, 0x7e, 0x61, 0x73, 0xd4,
+ 0xc0, 0x63, 0x59, 0xd5, 0x6e, 0x8e, 0x71, 0x84, 0xc8, 0x3f, 0x21, 0x10,
+ 0x0c, 0x0c, 0xf2, 0x60, 0xc4, 0x93, 0xc9, 0x25, 0x32, 0x67, 0xcf, 0x62,
+ 0xa6, 0x71, 0xb9, 0xec, 0xad, 0x32, 0xe1, 0x4e, 0xb9, 0x92, 0x7e, 0x0b,
+ 0x75, 0x98, 0xe3, 0x60, 0xc7, 0x1e, 0x07, 0xe4, 0x6c, 0x6e, 0x41, 0xda,
+ 0x75, 0xe9, 0x4e, 0x85, 0x37, 0x78, 0x15, 0xdf, 0xf3, 0x03, 0xfc, 0xa2,
+ 0x4f, 0x06, 0xe8, 0x31, 0xb8, 0x5d, 0x06, 0x46, 0xdc, 0x19, 0x16, 0x0f,
+ 0xa4, 0xa2, 0xf1, 0x48, 0xbc, 0xbc, 0x8f, 0x64, 0x5d, 0x3c, 0xd9, 0x46,
+ 0xb2, 0x7f, 0x3f, 0x06, 0x8d, 0x2c, 0x25, 0xb6, 0x0d, 0x7c, 0x6d, 0x75,
+ 0xa5, 0x67, 0xfd, 0xb3, 0xef, 0x08, 0x40, 0xe5, 0xac, 0x30, 0xfb, 0x7a,
+ 0x83, 0x1d, 0x52, 0x86, 0xcb, 0x0c, 0xd0, 0x6d, 0x05, 0x81, 0x34, 0xe5,
+ 0x43, 0xde, 0x77, 0xf6, 0xb6, 0xda, 0xcc, 0x99, 0xd5, 0x95, 0xf5, 0x5f,
+ 0x76, 0xbb, 0x18, 0x6b, 0x05, 0x07, 0x2f, 0x66, 0x30, 0x3f, 0x52, 0xc2,
+ 0x0e, 0xcd, 0xfd, 0x93, 0xf3, 0xa2, 0x21, 0x5f, 0x0f, 0x72, 0xed, 0x49,
+ 0xb9, 0xc1, 0x57, 0x42, 0xc2, 0x6a, 0x86, 0x6a, 0x87, 0xd1, 0x94, 0xf2,
+ 0x07, 0xeb, 0x4a, 0xe4, 0x81, 0x5e, 0x51, 0xd4, 0x02, 0x69, 0xc4, 0xe0,
+ 0xcc, 0xe7, 0x11, 0x03, 0x82, 0x04, 0xa8, 0x5c, 0xf1, 0x11, 0x7b, 0xd3,
+ 0xb3, 0x61, 0xb4, 0x40, 0xa3, 0x0f, 0xb2, 0xfe, 0xe5, 0xb2, 0xe4, 0xcc,
+ 0x08, 0x28, 0x03, 0x8d, 0x20, 0xb7, 0x24, 0x8c, 0x11, 0x7e, 0x52, 0x53,
+ 0xbc, 0xba, 0x42, 0x6f, 0x34, 0x74, 0x07, 0x1e, 0xbd, 0x31, 0x87, 0x30,
+ 0x49, 0x90, 0x76, 0xdb, 0x4b, 0x7a, 0xe0, 0x84, 0x79, 0xe9, 0xcc, 0x2f,
+ 0x3f, 0xac, 0x95, 0x92, 0x57, 0xc4, 0x72, 0x94, 0xbc, 0x58, 0xe5, 0x2e,
+ 0x67, 0x9c, 0x01, 0x8f, 0x29, 0xf9, 0xa5, 0xb5, 0xd3, 0x18, 0x1e, 0xf1,
+ 0x82, 0xef, 0x2a, 0x44, 0x08, 0x41, 0xb1, 0x84, 0x49, 0xa3, 0xbc, 0x07,
+ 0xe5, 0xf6, 0x86, 0x02, 0xd1, 0xc1, 0xf1, 0x63, 0x1e, 0x34, 0x8c, 0x65,
+ 0x30, 0x84, 0x30, 0x2e, 0x8c, 0x81, 0x02, 0x3b, 0x2d, 0xf6, 0x83, 0xcc,
+ 0x09, 0xd9, 0x14, 0xdf, 0xfa, 0xed, 0xa6, 0x08, 0x37, 0xd5, 0xd6, 0xc0,
+ 0x18, 0x00, 0x59, 0x6e, 0x29, 0xa6, 0x43, 0xa3, 0x5a, 0x9b, 0x51, 0xce,
+ 0xb5, 0x22, 0xef, 0x72, 0x61, 0x33, 0x98, 0x4d, 0x45, 0x16, 0x3e, 0x49,
+ 0xfc, 0x87, 0x75, 0xa9, 0x79, 0xce, 0xd0, 0x8e, 0x7d, 0xcc, 0x48, 0xee,
+ 0xe8, 0xb7, 0x79, 0x9c, 0x80, 0x9c, 0x5f, 0x23, 0x60, 0xfc, 0x23, 0x76,
+ 0x58, 0x57, 0x9a, 0x85, 0x89, 0xe5, 0x10, 0x61, 0xd3, 0x7f, 0x31, 0x9f,
+ 0x18, 0x91, 0x37, 0x25, 0x25, 0x2b, 0x1f, 0x8b, 0x8c, 0x42, 0x7e, 0xd3,
+ 0xf7, 0x60, 0x7e, 0x91, 0xcd, 0x0c, 0xa8, 0x5e, 0x33, 0x08, 0x0a, 0x03,
+ 0x73, 0xe4, 0x08, 0xd2, 0xad, 0x72, 0xc8, 0xd2, 0x31, 0x73, 0x0b, 0x01,
+ 0x14, 0x73, 0x26, 0xc0, 0x31, 0x65, 0x36, 0xb1, 0x9b, 0x96, 0xef, 0x67,
+ 0xa3, 0x74, 0xdc, 0x42, 0x97, 0xcd, 0x30, 0x63, 0x4d, 0x24, 0x2d, 0x8b,
+ 0x31, 0x6a, 0xe2, 0x60, 0x47, 0x9b, 0xd4, 0x34, 0x78, 0xcd, 0xa4, 0xc8,
+ 0xf4, 0xe1, 0x5a, 0x24, 0x2f, 0x97, 0x21, 0x34, 0xd6, 0x65, 0xe6, 0x3c,
+ 0xcf, 0xcf, 0x72, 0xc6, 0xa9, 0x9d, 0x68, 0xce, 0xb1, 0x22, 0xbf, 0xdb,
+ 0x18, 0x0c, 0x37, 0x4b, 0x0e, 0x2a, 0x58, 0x28, 0xca, 0xac, 0xaf, 0x7b,
+ 0x3f, 0x04, 0x78, 0x8c, 0x61, 0xc9, 0x78, 0xb2, 0x19, 0xf3, 0x2e, 0x47,
+ 0x0e, 0x83, 0x53, 0x0b, 0x51, 0x00, 0xa0, 0xa6, 0x4d, 0x39, 0xb6, 0x55,
+ 0x37, 0xb3, 0x69, 0xe9, 0x9e, 0x53, 0xfc, 0x3d, 0xc6, 0x0f, 0x36, 0x90,
+ 0xbb, 0x8c, 0xa2, 0x6e, 0x29, 0x77, 0xaa, 0x2c, 0xfa, 0x24, 0x2b, 0x97,
+ 0x36, 0xf7, 0x67, 0x5d, 0x62, 0x77, 0x61, 0xa0, 0x46, 0x40, 0xdc, 0xbc,
+ 0xec, 0x75, 0x57, 0x57, 0xd0, 0x1a, 0xc8, 0x41, 0x72, 0x36, 0x92, 0xdf,
+ 0xee, 0x12, 0xce, 0x81, 0x39, 0xa0, 0x3b, 0x54, 0xea, 0x1a, 0x05, 0x14,
+ 0xf3, 0xb1, 0x83, 0x21, 0x9f, 0x94, 0xda, 0x7f, 0xb0, 0x7b, 0xec, 0xdf,
+ 0x4a, 0x81, 0x3c, 0x20, 0xcb, 0x34, 0xe5, 0xc5, 0xc9, 0xee, 0x36, 0x37,
+ 0xd8, 0x87, 0x4c, 0xbf, 0xc9, 0x93, 0xba, 0x69, 0xa3, 0x69, 0xe5, 0x14,
+ 0x06, 0xd9, 0x0c, 0x8e, 0x1c, 0xc8, 0x98, 0x2a, 0xcb, 0x94, 0x5c, 0x9a,
+ 0xc8, 0xae, 0x71, 0x84, 0x38, 0xa5, 0x3f, 0x73, 0x34, 0xfc, 0xd7, 0x1a,
+ 0x11, 0xf6, 0x84, 0x22, 0x38, 0xad, 0x08, 0x1c, 0x91, 0xd9, 0x09, 0xa3,
+ 0x01, 0xf7, 0x53, 0x3e, 0x0d, 0xa0, 0x14, 0xbc, 0xf4, 0x7a, 0x22, 0x41,
+ 0xff, 0xcc, 0x05, 0xfc, 0x27, 0x44, 0x78, 0x34, 0xe3, 0xf9, 0x5a, 0xc3,
+ 0x90, 0x9e, 0xb4, 0x01, 0xe0, 0xe7, 0xeb, 0x10, 0x62, 0xf4, 0xc4, 0xee,
+ 0x52, 0x38, 0x13, 0x2b, 0x67, 0xa3, 0x32, 0x14, 0xb9, 0xa3, 0xf1, 0xda,
+ 0x5d, 0xd4, 0xa7, 0xe2, 0x35, 0x47, 0x7c, 0xf1, 0x4f, 0x56, 0x2c, 0x12,
+ 0x31, 0x20, 0x10, 0x8d, 0x54, 0xea, 0x38, 0xbb, 0xe2, 0x31, 0xc8, 0x1c,
+ 0x1c, 0x7e, 0x55, 0xe4, 0x00, 0x3a, 0x0e, 0x48, 0x30, 0x08, 0x9e, 0xba,
+ 0xc5, 0xf0, 0x48, 0x38, 0x53, 0xd0, 0x55, 0x9a, 0x0a, 0x90, 0x24, 0xa0,
+ 0x52, 0xce, 0xf2, 0xe1, 0x80, 0x53, 0x71, 0x40, 0xa8, 0xd4, 0xd1, 0x58,
+ 0x04, 0x61, 0x21, 0x9d, 0x13, 0x74, 0x8d, 0xd4, 0xc5, 0x4e, 0x85, 0x92,
+ 0xc9, 0x8b, 0xe4, 0xdb, 0x3b, 0xa1, 0xfa, 0x3b, 0xda, 0x47, 0xc3, 0xf4,
+ 0x26, 0x1b, 0x1a, 0xb1, 0xf9, 0x09, 0x72, 0x1f, 0xe1, 0x23, 0x4c, 0x9f,
+ 0x11, 0x86, 0xa2, 0xf2, 0xa7, 0xb9, 0x4d, 0x84, 0xb7, 0x57, 0xe6, 0xe3,
+ 0x69, 0xd7, 0x6a, 0x39, 0x81, 0xbc, 0xe8, 0xbd, 0x95, 0x0d, 0xed, 0x0f,
+ 0x30, 0xaf, 0x53, 0xce, 0x94, 0x37, 0x2b, 0x47, 0x68, 0x89, 0x60, 0x31,
+ 0x46, 0x61, 0x0a, 0x63, 0x6d, 0x2c, 0xae, 0x8c, 0x12, 0xcb, 0xec, 0xe2,
+ 0xe2, 0xe7, 0x3b, 0xd9, 0xbf, 0x7e, 0xff, 0x8d, 0xcc, 0xb4, 0xd4, 0x00,
+ 0xcc, 0x7d, 0x76, 0x04, 0xf0, 0xf9, 0x79, 0x43, 0xb0, 0xe2, 0x1f, 0x32,
+ 0xf5, 0x4a, 0xa7, 0x4f, 0x28, 0x48, 0xe7, 0x31, 0x27, 0x50, 0x4f, 0xca,
+ 0x5d, 0xcb, 0x39, 0xc2, 0xb0, 0x4d, 0x74, 0x3d, 0x28, 0x30, 0xc3, 0x48,
+ 0xf2, 0x14, 0x0c, 0x95, 0xfc, 0x85, 0x62, 0x45, 0x72, 0x38, 0x88, 0xd2,
+ 0x29, 0x93, 0x06, 0xe8, 0x14, 0x46, 0x04, 0x19, 0x8a, 0xc4, 0x02, 0xd0,
+ 0x03, 0x18, 0x00, 0xb2, 0x06, 0xaa, 0x39, 0xd8, 0xe6, 0xc0, 0x39, 0x2d,
+ 0xd1, 0x8b, 0x6b, 0xed, 0xa4, 0xf5, 0xea, 0xea, 0x55, 0x62, 0xb6, 0xc7,
+ 0xf3, 0xe6, 0x0d, 0x9f, 0x5e, 0x66, 0xe2, 0xf0, 0x46, 0x99, 0x39, 0x0c,
+ 0x84, 0x04, 0x75, 0x43, 0xf7, 0x90, 0xc2, 0x19, 0x31, 0xad, 0x20, 0x0a,
+ 0x9c, 0x71, 0x02, 0x5e, 0x2b, 0x74, 0xfe, 0x12, 0x7d, 0x8f, 0x79, 0x0f,
+ 0x80, 0xcf, 0xc5, 0x2e, 0x81, 0xd3, 0x5f, 0xd2, 0xa7, 0x84, 0xa2, 0xae,
+ 0xf9, 0x48, 0x23, 0xc9, 0x81, 0xc7, 0x4b, 0x8a, 0xd3, 0x08, 0xf3, 0xbc,
+ 0xd0, 0x61, 0x4c, 0xe6, 0x17, 0x64, 0x35, 0xcf, 0x19, 0xfe, 0x2d, 0xc6,
+ 0x75, 0x2e, 0x3d, 0x09, 0x78, 0xbb, 0x4c, 0x82, 0x8a, 0x09, 0x35, 0x53,
+ 0x21, 0x61, 0xa4, 0x24, 0x4b, 0xa4, 0x4a, 0xff, 0x8f, 0xa8, 0xcf, 0x56,
+ 0x8d, 0x8b, 0xa9, 0x63, 0x68, 0x2e, 0x41, 0x1d, 0xa0, 0x3a, 0xfe, 0x88,
+ 0x36, 0xb0, 0xba, 0xd2, 0xb9, 0x95, 0x04, 0xaa, 0x19, 0x9c, 0x31, 0x14,
+ 0x8b, 0xac, 0x46, 0xd6, 0xf4, 0x13, 0x23, 0x71, 0xda, 0x40, 0x6c, 0xcc,
+ 0xc7, 0xb3, 0x4c, 0x03, 0xcf, 0x98, 0xbb, 0x58, 0x31, 0xc1, 0xb8, 0x39,
+ 0xc8, 0xc4, 0x47, 0x16, 0x2c, 0xb1, 0xc6, 0x12, 0xa0, 0x63, 0x67, 0x1e,
+ 0xbb, 0x54, 0xce, 0xcc, 0x6d, 0xfc, 0x53, 0xb4, 0x7b, 0x97, 0x86, 0x38,
+ 0x30, 0xf6, 0x1d, 0x5a, 0x65, 0x09, 0xd0, 0x45, 0xd3, 0xa1, 0x3f, 0x1f,
+ 0x9f, 0x8e, 0x75, 0x13, 0x9d, 0x10, 0xb3, 0xb1, 0x45, 0x84, 0xe2, 0xfe,
+ 0xe1, 0x62, 0x6b, 0xb5, 0x3d, 0x59, 0xc7, 0x43, 0x3a, 0xe7, 0xc4, 0xc8,
+ 0x3b, 0x50, 0xfa, 0xfc, 0x7c, 0x1a, 0x6b, 0xd8, 0x47, 0x89, 0xdd, 0xa1,
+ 0x3d, 0x44, 0xba, 0x9c, 0xbc, 0x19, 0x93, 0xbf, 0xc4, 0x4d, 0x21, 0x31,
+ 0xfa, 0x29, 0xe2, 0x7c, 0x34, 0x41, 0xa5, 0x43, 0x88, 0x97, 0x30, 0xe1,
+ 0x54, 0xe2, 0xb3, 0xdc, 0xec, 0x52, 0x08, 0xa3, 0x9e, 0xe4, 0xf5, 0xbc,
+ 0x9d, 0xb5, 0x9b, 0x56, 0xcd, 0xf3, 0xee, 0x86, 0x43, 0x13, 0xac, 0x6e,
+ 0x81, 0x39, 0x84, 0xd9, 0xbc, 0x3b, 0xb0, 0x29, 0x32, 0x3d, 0x30, 0x5b,
+ 0x54, 0xac, 0x08, 0x91, 0xd5, 0xb0, 0x01, 0x63, 0xdc, 0xaf, 0xc7, 0xf4,
+ 0x69, 0xe3, 0x99, 0x3b, 0x26, 0xc5, 0xe0, 0x9a, 0x09, 0x4b, 0xbc, 0xcb,
+ 0x6c, 0x1a, 0x48, 0xe7, 0x06, 0x90, 0x25, 0xc2, 0xa7, 0x66, 0xcd, 0xdf,
+ 0x6b, 0xc5, 0x63, 0xc2, 0xc2, 0x01, 0xcc, 0x74, 0x72, 0xf0, 0x1a, 0xcc,
+ 0xd3, 0xfa, 0x20, 0x93, 0xe4, 0x14, 0xb6, 0xa4, 0x18, 0x1d, 0x3f, 0xc5,
+ 0x42, 0x01, 0x16, 0x1b, 0x4c, 0x12, 0xc8, 0x36, 0xa2, 0xac, 0xd9, 0x8c,
+ 0xfd, 0x16, 0xa6, 0x7d, 0x50, 0x80, 0xdc, 0x14, 0xaa, 0xd9, 0x33, 0x0c,
+ 0xf2, 0x4f, 0x31, 0x6e, 0x4e, 0xa3, 0x96, 0x81, 0x49, 0x38, 0x27, 0x7d,
+ 0x47, 0x1b, 0x2a, 0x15, 0x00, 0xda, 0x33, 0xe7, 0x0f, 0x03, 0xb7, 0xc1,
+ 0x29, 0xe9, 0x8c, 0x43, 0xcb, 0x4c, 0xe2, 0x07, 0x6b, 0xf2, 0xf9, 0xb9,
+ 0xda, 0x00, 0x70, 0x62, 0xcc, 0x5c, 0x63, 0xe6, 0x63, 0xb3, 0x45, 0x48,
+ 0xde, 0xab, 0xd8, 0xca, 0xb0, 0x0f, 0x0d, 0xea, 0x8a, 0xe2, 0x39, 0xbe,
+ 0xe2, 0x93, 0xfc, 0x2c, 0xbc, 0xbd, 0xb4, 0x01, 0xe7, 0x08, 0x89, 0xa6,
+ 0xad, 0x5a, 0xc0, 0xa9, 0x69, 0xf7, 0x9e, 0xd0, 0x81, 0x07, 0x93, 0x8a,
+ 0x5e, 0x12, 0xb5, 0xbc, 0x80, 0x18, 0xed, 0xc2, 0xfc, 0x00, 0x62, 0xa7,
+ 0xc2, 0x10, 0x5d, 0x38, 0x3b, 0x77, 0x8b, 0x42, 0xdb, 0xfd, 0x23, 0x58,
+ 0x19, 0xf5, 0x9e, 0x37, 0xe7, 0x2a, 0xde, 0x1b, 0xd5, 0x85, 0xe7, 0x4d,
+ 0xfd, 0xe3, 0xad, 0x9d, 0xfb, 0x5f, 0x6a, 0x1b, 0x8a, 0x2f, 0x01, 0xb2,
+ 0x97, 0xe8, 0x12, 0x40, 0x97, 0x38, 0x62, 0x57, 0x77, 0x6f, 0x99, 0xd5,
+ 0x40, 0x9f, 0x62, 0xfd, 0x90, 0x68, 0x51, 0x2a, 0x2f, 0xa4, 0xa3, 0x4b,
+ 0x1f, 0x78, 0x9f, 0x3e, 0x9f, 0xe8, 0x83, 0x5d, 0x4e, 0x5c, 0x34, 0x37,
+ 0xca, 0xe4, 0xd1, 0x97, 0xd3, 0xf5, 0x37, 0xb7, 0x98, 0x71, 0x36, 0xbe,
+ 0x2b, 0x61, 0x77, 0x61, 0xbc, 0xc8, 0x8b, 0x8d, 0xe4, 0xfa, 0xb1, 0x90,
+ 0xcb, 0x66, 0x80, 0x7c, 0xdd, 0x10, 0x0e, 0xa5, 0xa3, 0x8d, 0x48, 0x1f,
+ 0xc5, 0x2d, 0x7b, 0x23, 0xca, 0x52, 0x1f, 0x42, 0x80, 0x9d, 0x9f, 0x8f,
+ 0xf4, 0xb4, 0x91, 0x11, 0x30, 0x72, 0x08, 0x69, 0x93, 0x20, 0x52, 0x90,
+ 0x3a, 0x20, 0xca, 0x4c, 0xc0, 0xfe, 0x50, 0x5b, 0x64, 0x5d, 0x8d, 0x02,
+ 0x37, 0x12, 0x8a, 0xb6, 0xec, 0x07, 0x2d, 0x61, 0x94, 0xf0, 0x03, 0xc8,
+ 0x17, 0x68, 0xcd, 0x1d, 0x90, 0xd2, 0x03, 0x79, 0x99, 0x7f, 0x1b, 0xe4,
+ 0xa9, 0xd9, 0xfc, 0x53, 0x06, 0x32, 0x29, 0x37, 0xd8, 0x2b, 0x8d, 0x90,
+ 0x60, 0xf9, 0x2d, 0xed, 0x04, 0xe4, 0x40, 0xc8, 0x96, 0xc8, 0xef, 0xa9,
+ 0xfb, 0x80, 0x72, 0x3d, 0x26, 0x72, 0xf1, 0x90, 0x43, 0xb8, 0xb3, 0xcf,
+ 0x8a, 0x8d, 0x75, 0xb4, 0x0f, 0x00, 0x3d, 0x47, 0xfb, 0x8c, 0xcf, 0xd3,
+ 0x99, 0x22, 0xee, 0x80, 0xdb, 0x9d, 0x6e, 0x87, 0x71, 0xa0, 0xb0, 0x44,
+ 0x20, 0xe3, 0xd1, 0xae, 0xa6, 0x85, 0xa1, 0xcc, 0xc1, 0xed, 0x5f, 0x10,
+ 0x54, 0x18, 0xe2, 0xb8, 0x38, 0xd0, 0xb1, 0xd7, 0x05, 0x98, 0x5c, 0xd1,
+ 0x43, 0x4b, 0x10, 0x0a, 0x39, 0x66, 0x26, 0x12, 0x9d, 0xb6, 0x13, 0xbd,
+ 0xf4, 0x28, 0xd4, 0xa0, 0xb0, 0xc8, 0xdc, 0x9b, 0x63, 0x33, 0x0d, 0x29,
+ 0x74, 0xf8, 0x26, 0x38, 0x01, 0xcc, 0xb4, 0xa2, 0x28, 0xac, 0xd2, 0xa1,
+ 0x75, 0x8e, 0x17, 0xb1, 0x74, 0x43, 0x86, 0x05, 0xb4, 0xc9, 0x07, 0x9e,
+ 0x55, 0x94, 0x25, 0xf9, 0x16, 0x98, 0x0e, 0x23, 0x19, 0xb8, 0x67, 0xa9,
+ 0x3b, 0xda, 0x7c, 0xed, 0x87, 0x84, 0x41, 0x47, 0x6c, 0x04, 0x61, 0x22,
+ 0x3d, 0xc9, 0xa7, 0x5e, 0x6e, 0x03, 0xf8, 0x58, 0x32, 0x34, 0xda, 0xb2,
+ 0xbc, 0x67, 0x87, 0x73, 0x9b, 0x96, 0xf7, 0xda, 0x7e, 0x6c, 0x55, 0x3d,
+ 0x95, 0x22, 0x8d, 0x15, 0x2c, 0xac, 0x83, 0x89, 0x5f, 0x45, 0xcc, 0x79,
+ 0xf3, 0xb9, 0x7b, 0x92, 0x74, 0x7f, 0x15, 0xf7, 0xb6, 0xcc, 0xfe, 0xa4,
+ 0x07, 0xac, 0x40, 0x6b, 0x9a, 0xe8, 0xea, 0x26, 0x1a, 0xa7, 0x5f, 0x12,
+ 0x84, 0xef, 0xe8, 0x10, 0xc9, 0xf2, 0x90, 0xc9, 0x12, 0xbc, 0x34, 0xa0,
+ 0x65, 0xb9, 0x3c, 0x70, 0xa7, 0xd6, 0x5a, 0x02, 0x43, 0xa7, 0x32, 0x5a,
+ 0xd8, 0xc4, 0xe4, 0xc4, 0x69, 0xeb, 0xe0, 0x24, 0x1a, 0x02, 0x8a, 0x19,
+ 0x1e, 0xdd, 0x10, 0x9f, 0xc2, 0x0b, 0x0e, 0xf7, 0x50, 0xf9, 0x90, 0xb2,
+ 0xce, 0x6a, 0xf8, 0xdc, 0x69, 0x0e, 0x41, 0x23, 0x97, 0x99, 0x69, 0x7e,
+ 0x46, 0x4f, 0x75, 0xd8, 0xcc, 0x7f, 0xcb, 0xd9, 0x06, 0x14, 0x01, 0xc1,
+ 0x6d, 0x98, 0x04, 0xa8, 0x9d, 0x32, 0xf3, 0x04, 0x09, 0x01, 0x46, 0x47,
+ 0x4e, 0x11, 0xee, 0x5b, 0xcc, 0x4d, 0x5e, 0x80, 0x0a, 0xa2, 0xa0, 0x83,
+ 0x78, 0x65, 0x6b, 0xb9, 0x2d, 0x8e, 0x01, 0x28, 0x28, 0xec, 0xb3, 0xba,
+ 0x61, 0xb0, 0x56, 0x74, 0x9f, 0x2a, 0x26, 0x25, 0xe6, 0xda, 0x0c, 0xf1,
+ 0x82, 0xe0, 0xe9, 0xaf, 0x19, 0x44, 0xe8, 0x64, 0xf1, 0x6a, 0x6e, 0x92,
+ 0xfd, 0x23, 0x34, 0x18, 0xc1, 0x87, 0x6d, 0x2e, 0x1d, 0x93, 0x7c, 0x7d,
+ 0x5e, 0xf4, 0x8d, 0x40, 0x43, 0x35, 0x08, 0x3c, 0xaf, 0xbb, 0x1d, 0x88,
+ 0x33, 0x24, 0x9d, 0x3b, 0x67, 0xb7, 0x33, 0x23, 0xc5, 0xfc, 0x76, 0x03,
+ 0xdf, 0x6d, 0x27, 0xcf, 0x35, 0x4e, 0x0d, 0xc3, 0x43, 0x31, 0x9f, 0x7c,
+ 0xec, 0xe4, 0xd6, 0x76, 0xde, 0x3a, 0x87, 0xd7, 0x6a, 0xbd, 0x75, 0xc8,
+ 0xf4, 0x00, 0x06, 0xf0, 0xd9, 0x52, 0x45, 0x13, 0x63, 0xda, 0x3d, 0xe3,
+ 0x53, 0xd5, 0x4a, 0xd5, 0xd1, 0xd2, 0x85, 0xb7, 0x7e, 0x78, 0x3e, 0x80,
+ 0x87, 0x62, 0x30, 0x60, 0x0c, 0x8b, 0x9b, 0x6c, 0x69, 0xf1, 0x92, 0xba,
+ 0x3d, 0xca, 0x32, 0x20, 0x83, 0x6c, 0x82, 0x3e, 0x69, 0x9b, 0xc6, 0xea,
+ 0xc4, 0x97, 0xea, 0x12, 0x3e, 0x9c, 0xf6, 0x52, 0xb3, 0xe0, 0x5e, 0x47,
+ 0x10, 0x0e, 0x17, 0x0e, 0xe8, 0xd4, 0x2a, 0x3e, 0x18, 0x1e, 0x95, 0x3c,
+ 0xdc, 0x3f, 0x95, 0x81, 0x37, 0x35, 0x79, 0xcb, 0xd7, 0x86, 0x4f, 0x4d,
+ 0x22, 0x50, 0xdb, 0x0c, 0xa3, 0x1a, 0xe3, 0xf1, 0x6e, 0x28, 0xed, 0x53,
+ 0x7d, 0xed, 0xa0, 0x84, 0xdb, 0x74, 0x3a, 0x98, 0xa3, 0xd8, 0xb3, 0x58,
+ 0x71, 0x03, 0xc3, 0x16, 0xd5, 0xa4, 0x98, 0xbd, 0x43, 0x2e, 0x4b, 0x69,
+ 0x14, 0xa5, 0x76, 0x5b, 0x16, 0x26, 0x9f, 0xd0, 0x36, 0xe3, 0x82, 0x03,
+ 0x9e, 0xce, 0x07, 0x0b, 0x65, 0x07, 0x82, 0x41, 0x2d, 0x78, 0xf8, 0xa4,
+ 0x52, 0x5f, 0x66, 0x52, 0x00, 0x3e, 0x24, 0x7d, 0x46, 0x91, 0xaa, 0xd2,
+ 0x29, 0xf3, 0x34, 0x12, 0xa0, 0x6d, 0x85, 0x46, 0xa0, 0xc6, 0x25, 0xe1,
+ 0x63, 0x10, 0xe3, 0xa4, 0xdf, 0x8d, 0xae, 0x5a, 0x3d, 0x73, 0x3a, 0xc4,
+ 0xb2, 0xa9, 0x6a, 0xc5, 0xd8, 0xf0, 0x3a, 0xa5, 0x8e, 0x4f, 0x34, 0x28,
+ 0x14, 0xc8, 0x54, 0x4a, 0x3d, 0xce, 0x5d, 0x54, 0x05, 0xfc, 0x6a, 0x44,
+ 0x67, 0xeb, 0xf7, 0x27, 0x5b, 0x1a, 0xd6, 0x5c, 0x70, 0xa7, 0xa9, 0x9b,
+ 0x80, 0x27, 0x4c, 0x51, 0xce, 0xfb, 0xf9, 0x14, 0xe4, 0x06, 0x2c, 0xb1,
+ 0x82, 0xf6, 0x56, 0x4d, 0x1e, 0x55, 0xe2, 0x28, 0x59, 0x0d, 0xcf, 0x48,
+ 0x17, 0xc4, 0x72, 0x2f, 0x4d, 0x4f, 0x71, 0x44, 0x9d, 0xd9, 0x3f, 0xa9,
+ 0x1f, 0x6f, 0x5b, 0xb2, 0x5c, 0x0a, 0xb8, 0xd3, 0xb3, 0x39, 0xab, 0x1d,
+ 0xe4, 0x58, 0x05, 0xaa, 0x0f, 0x17, 0x6e, 0x5b, 0x2d, 0xc5, 0x3a, 0xd4,
+ 0x9e, 0xd6, 0x5a, 0xc8, 0x05, 0xb7, 0x6d, 0x88, 0x80, 0xc1, 0xe4, 0x35,
+ 0xff, 0x60, 0xf6, 0x51, 0xe1, 0x01, 0xa7, 0x04, 0x8e, 0xed, 0xe8, 0xff,
+ 0xf6, 0x45, 0x65, 0xbb, 0x55, 0xdc, 0x81, 0xd7, 0xe9, 0xfb, 0x6c, 0x4c,
+ 0x99, 0xf3, 0x8f, 0xf7, 0x05, 0x44, 0xdd, 0xe5, 0x4e, 0x20, 0x62, 0x13,
+ 0x88, 0x08, 0x64, 0x78, 0x12, 0xc2, 0xe6, 0x19, 0x4f, 0x89, 0xcc, 0x5e,
+ 0x5f, 0x5b, 0xa6, 0xe9, 0x08, 0xed, 0xdb, 0xcd, 0xf1, 0xf4, 0xb4, 0xd6,
+ 0xb5, 0x76, 0x29, 0x5c, 0x42, 0x9c, 0x15, 0xf3, 0x94, 0x1d, 0xeb, 0x35,
+ 0x8d, 0x70, 0xb2, 0xba, 0x17, 0x20, 0x3b, 0x61, 0x83, 0x65, 0x65, 0x53,
+ 0x50, 0x4c, 0x0c, 0x76, 0x97, 0xc3, 0x63, 0xaa, 0xfb, 0x5d, 0x42, 0x6b,
+ 0x72, 0x05, 0x98, 0x0d, 0xa5, 0x73, 0xc0, 0xa6, 0x35, 0x44, 0xa3, 0x05,
+ 0x10, 0x2a, 0x7f, 0x03, 0x51, 0x23, 0xa4, 0x56, 0xc5, 0xbc, 0x9d, 0x12,
+ 0xbc, 0x90, 0x7b, 0xd7, 0x3a, 0xb0, 0x30, 0x2c, 0x99, 0x08, 0x46, 0xe6,
+ 0x1a, 0xa5, 0x60, 0x41, 0x43, 0x0c, 0xcf, 0x2a, 0x45, 0x6f, 0x66, 0xe9,
+ 0xf0, 0x41, 0x6f, 0x9d, 0x00, 0x53, 0xf1, 0xbe, 0x54, 0xcb, 0x05, 0xdf,
+ 0xbe, 0x9d, 0xc0, 0x3f, 0x6a, 0x5d, 0xcd, 0xb3, 0x66, 0x73, 0x99, 0x69,
+ 0xc2, 0xbf, 0xb8, 0xa6, 0xde, 0xba, 0x33, 0x17, 0x30, 0x0c, 0x93, 0x3e,
+ 0xd8, 0x3b, 0x78, 0xc8, 0xe6, 0x96, 0x57, 0x79, 0xd9, 0x6f, 0x9c, 0xc2,
+ 0xbf, 0xf8, 0xe3, 0x37, 0xdf, 0x6e, 0xc2, 0x4b, 0x10, 0x52, 0xd2, 0x74,
+ 0x8c, 0x42, 0xe4, 0xb0, 0x58, 0x14, 0x6e, 0x8d, 0x57, 0x40, 0x73, 0xe2,
+ 0xe5, 0x58, 0x82, 0xc2, 0x3c, 0x4d, 0x61, 0xc4, 0x46, 0x11, 0x23, 0x93,
+ 0xd4, 0x3a, 0xbe, 0x2f, 0xa7, 0x12, 0x2d, 0x55, 0x62, 0x4e, 0x25, 0x58,
+ 0x9f, 0x8a, 0x98, 0x36, 0x1d, 0x0e, 0xad, 0x0c, 0x16, 0x49, 0x53, 0x9d,
+ 0x91, 0x28, 0xbe, 0x49, 0x5e, 0xb7, 0xcf, 0xda, 0x82, 0xa0, 0x47, 0xa0,
+ 0x8a, 0x90, 0xa7, 0x86, 0x2e, 0xda, 0xbf, 0x77, 0x37, 0x10, 0x43, 0xc2,
+ 0x77, 0x04, 0xe9, 0x50, 0xe9, 0xf4, 0xf1, 0x3d, 0xb8, 0xde, 0xd9, 0x10,
+ 0x3c, 0x80, 0xac, 0x27, 0xc4, 0xd9, 0x4f, 0xcc, 0xef, 0x19, 0xe7, 0x10,
+ 0x0c, 0x85, 0x51, 0xbb, 0x3b, 0x5e, 0x20, 0xba, 0xef, 0x37, 0x65, 0xfa,
+ 0x54, 0x7e, 0xc3, 0x12, 0x03, 0xc5, 0x08, 0xe7, 0xbf, 0xcb, 0x24, 0x0a,
+ 0x73, 0xc4, 0xd9, 0xe9, 0xa7, 0x2e, 0xc7, 0x7f, 0xa4, 0xa7, 0x9a, 0x55,
+ 0x33, 0x97, 0x0a, 0xcf, 0x66, 0xb2, 0x1b, 0x8d, 0x67, 0x85, 0xdd, 0x00,
+ 0x98, 0x9f, 0x4a, 0x3f, 0xa0, 0xa7, 0x94, 0xed, 0x05, 0x1b, 0xe1, 0x3d,
+ 0xf5, 0x77, 0x72, 0x9f, 0x41, 0xd4, 0x48, 0x9f, 0xc2, 0x01, 0xed, 0xbd,
+ 0x14, 0x97, 0x66, 0x3d, 0x92, 0x70, 0xea, 0x40, 0x4c, 0x2f, 0xe6, 0x46,
+ 0x5d, 0xae, 0x8d, 0x12, 0x8e, 0xa1, 0x44, 0x78, 0x83, 0x4b, 0x4c, 0xec,
+ 0x02, 0x9f, 0x35, 0x1b, 0x64, 0x31, 0x64, 0x99, 0x27, 0xd9, 0xa8, 0xa1,
+ 0x28, 0x4f, 0xda, 0x50, 0x74, 0x82, 0x11, 0x20, 0xeb, 0xc8, 0x6d, 0x06,
+ 0xd5, 0xe1, 0xee, 0x50, 0xfd, 0x2e, 0x00, 0x7f, 0x8a, 0xdd, 0x27, 0xdf,
+ 0x90, 0xc8, 0x27, 0xe4, 0x10, 0xb2, 0x62, 0x38, 0x51, 0x85, 0x09, 0xbf,
+ 0x33, 0x9f, 0x93, 0x9e, 0x90, 0xc1, 0x35, 0xe5, 0xdd, 0x96, 0x14, 0xa4,
+ 0x0e, 0x2c, 0x60, 0xec, 0xc1, 0x5f, 0x86, 0x61, 0x48, 0x74, 0x36, 0xe3,
+ 0xc7, 0x66, 0x52, 0x38, 0xcc, 0x7c, 0xfb, 0x0c, 0xe4, 0x7c, 0x09, 0x92,
+ 0x9e, 0x35, 0x29, 0x65, 0x29, 0xf8, 0xa1, 0x98, 0x97, 0x54, 0xc3, 0xe9,
+ 0x48, 0x7d, 0x6d, 0x9c, 0xf2, 0x07, 0x25, 0x65, 0xa0, 0x27, 0xf0, 0x49,
+ 0x24, 0x0d, 0x7a, 0x85, 0x17, 0xa3, 0xe5, 0xe3, 0x03, 0x53, 0x11, 0x8f,
+ 0xcf, 0x85, 0x0f, 0x8c, 0x8a, 0xc7, 0xb6, 0x28, 0x1e, 0x17, 0xe8, 0xbc,
+ 0x81, 0x73, 0x5d, 0x77, 0x06, 0x2c, 0xb2, 0x35, 0xfc, 0xd8, 0xa8, 0x03,
+ 0xa6, 0x37, 0xe6, 0xdf, 0xc9, 0x14, 0x80, 0x90, 0xb4, 0x40, 0x59, 0x22,
+ 0x08, 0x04, 0x2b, 0xd5, 0xa8, 0xba, 0xab, 0x18, 0x30, 0x3b, 0x93, 0xd1,
+ 0x56, 0x33, 0x6c, 0x95, 0xc1, 0x95, 0x34, 0x63, 0xcf, 0x4b, 0xa5, 0xa8,
+ 0x4b, 0x9b, 0xd6, 0x8c, 0xe3, 0xe6, 0x4e, 0x54, 0xa4, 0x57, 0x18, 0xdf,
+ 0x0c, 0xfb, 0xe7, 0x09, 0xa1, 0x4b, 0xc1, 0x3f, 0x80, 0xe4, 0x26, 0x03,
+ 0x03, 0x66, 0x47, 0xd9, 0x02, 0x54, 0x20, 0x00, 0x07, 0xc2, 0x79, 0x14,
+ 0x02, 0xed, 0xe4, 0x89, 0x1f, 0x72, 0x60, 0x64, 0x78, 0x4a, 0xc1, 0x58,
+ 0xe6, 0x04, 0x2e, 0x84, 0x24, 0x0a, 0x76, 0xb2, 0x31, 0x6c, 0xdd, 0xa1,
+ 0x15, 0x17, 0xde, 0xe2, 0xa5, 0xcd, 0x2e, 0x5e, 0x3b, 0xed, 0x30, 0x60,
+ 0x76, 0x99, 0xfd, 0x6b, 0x86, 0x7a, 0x1f, 0xfb, 0xea, 0x38, 0x01, 0x10,
+ 0x5f, 0x0a, 0x4a, 0x1f, 0x50, 0xa8, 0xb5, 0x7e, 0x7c, 0x6b, 0xb4, 0xdb,
+ 0xee, 0xb7, 0x9b, 0xe6, 0xdf, 0x50, 0xee, 0x6a, 0x52, 0x91, 0x3f, 0x8c,
+ 0xb9, 0x00, 0x86, 0xa9, 0xa7, 0x1e, 0x1f, 0x7b, 0x8b, 0x8f, 0x59, 0xaa,
+ 0x75, 0x65, 0x14, 0x66, 0x98, 0x34, 0x9f, 0xfa, 0x8d, 0xc7, 0x26, 0xdf,
+ 0xb5, 0xc2, 0x69, 0xfd, 0x41, 0x41, 0x49, 0xbd, 0xf4, 0x01, 0x8d, 0xdb,
+ 0x52, 0x21, 0xf3, 0x5a, 0x6d, 0xfb, 0xfd, 0xe4, 0x23, 0x9d, 0x9d, 0xbc,
+ 0x1c, 0x6a, 0x45, 0xbb, 0x96, 0x26, 0x57, 0xd4, 0x30, 0x6e, 0xa4, 0xcb,
+ 0x5d, 0x43, 0x6c, 0x77, 0x37, 0x14, 0xac, 0x68, 0xca, 0xcf, 0xe1, 0x72,
+ 0x04, 0x8f, 0xf1, 0xbb, 0x23, 0xfa, 0x6a, 0x18, 0xc2, 0x00, 0x82, 0x73,
+ 0x99, 0x69, 0x95, 0xb3, 0xab, 0x42, 0x6e, 0xeb, 0x05, 0x47, 0x10, 0x0b,
+ 0x85, 0x06, 0x00, 0x14, 0x01, 0x4c, 0xd4, 0x5a, 0xa2, 0x79, 0x72, 0x67,
+ 0x1d, 0x75, 0x13, 0x1e, 0x10, 0xa6, 0x44, 0xa6, 0x01, 0x47, 0x22, 0xd1,
+ 0xe0, 0xdd, 0xb9, 0x11, 0xc0, 0xc4, 0xb5, 0x8c, 0x32, 0xa4, 0x0c, 0xb0,
+ 0x12, 0xa1, 0xa3, 0x43, 0x63, 0x28, 0xfa, 0x78, 0x4e, 0xc0, 0xa8, 0x7b,
+ 0x13, 0x0f, 0xa6, 0xeb, 0x5e, 0xdd, 0xb1, 0x33, 0xcc, 0x97, 0xac, 0x98,
+ 0x4b, 0x5a, 0x74, 0x3a, 0x2d, 0x46, 0x79, 0x1f, 0xf5, 0x3a, 0x24, 0x74,
+ 0x44, 0x90, 0xb0, 0x62, 0x22, 0xed, 0x48, 0xdf, 0x16, 0x1c, 0xc6, 0x7c,
+ 0xe3, 0x55, 0xc0, 0xee, 0xff, 0x92, 0x18, 0xea, 0x07, 0xc8, 0x23, 0x0f,
+ 0x84, 0x47, 0x02, 0xf6, 0x33, 0x30, 0x49, 0x73, 0xe6, 0x45, 0xbb, 0x83,
+ 0x85, 0xd9, 0x4c, 0x9f, 0x36, 0x1c, 0x20, 0x7a, 0xf2, 0x12, 0x61, 0x54,
+ 0x95, 0xb1, 0x96, 0x30, 0x80, 0x6f, 0x8c, 0xe2, 0x05, 0xb5, 0x24, 0xd3,
+ 0x3b, 0x34, 0x84, 0x43, 0xc2, 0x48, 0x33, 0xa1, 0x7c, 0x85, 0x4c, 0xea,
+ 0xed, 0xa0, 0x20, 0x80, 0x8f, 0x2f, 0x6d, 0x84, 0x9e, 0x5f, 0xd9, 0x23,
+ 0x3a, 0xc6, 0x5d, 0xb4, 0x42, 0xef, 0x8a, 0x15, 0x5a, 0x52, 0x28, 0xed,
+ 0x10, 0xfa, 0x2a, 0x2d, 0xd3, 0x61, 0xbd, 0xe8, 0xc8, 0x2a, 0x5a, 0xa1,
+ 0xda, 0xca, 0x20, 0x9f, 0x65, 0x21, 0x8e, 0x71, 0x21, 0x8e, 0x6d, 0x19,
+ 0x09, 0x33, 0x6b, 0x1c, 0xae, 0x24, 0x61, 0xab, 0x65, 0xa6, 0x02, 0xc0,
+ 0xa8, 0x30, 0x4e, 0x45, 0x41, 0x04, 0x0d, 0x50, 0x2c, 0x5a, 0xe6, 0x00,
+ 0x1b, 0x80, 0x9a, 0x68, 0xb4, 0x18, 0x30, 0x4a, 0x4a, 0x31, 0x0e, 0x46,
+ 0x8f, 0x9f, 0xe6, 0xa3, 0x2c, 0xc0, 0xfa, 0x87, 0x48, 0x57, 0x89, 0xc0,
+ 0x6b, 0x27, 0xaf, 0xb3, 0x47, 0xbd, 0xaa, 0x5c, 0xae, 0x07, 0xeb, 0x7e,
+ 0x8a, 0xf3, 0xda, 0xeb, 0x11, 0x04, 0xf1, 0x82, 0x8d, 0x8e, 0xcc, 0x6d,
+ 0xe0, 0x48, 0x31, 0x0d, 0x30, 0x7a, 0x3d, 0xa6, 0xb7, 0x32, 0xe7, 0x9f,
+ 0x82, 0x9e, 0x1b, 0x86, 0xb8, 0xa0, 0x2e, 0xcc, 0x90, 0x3c, 0x0c, 0x33,
+ 0xc4, 0x9b, 0x94, 0x19, 0xe8, 0x84, 0x90, 0xa1, 0xec, 0xf6, 0x81, 0x23,
+ 0x43, 0x0b, 0xe2, 0xb0, 0x35, 0x1b, 0xc8, 0x9f, 0xac, 0x8a, 0x47, 0xab,
+ 0x4b, 0x05, 0x56, 0x66, 0x64, 0xd0, 0x63, 0x03, 0x85, 0x9f, 0xa6, 0xad,
+ 0xb9, 0x08, 0xfd, 0xce, 0x7a, 0xb8, 0xb5, 0x55, 0x71, 0x16, 0xd1, 0xea,
+ 0xca, 0x41, 0xfb, 0x08, 0x9b, 0xd1, 0x7b, 0x83, 0xe9, 0x45, 0xed, 0xd4,
+ 0xe4, 0xbf, 0x74, 0xa3, 0x9e, 0xef, 0x6c, 0xab, 0x3e, 0x26, 0xbb, 0xed,
+ 0x83, 0xba, 0x2e, 0xee, 0x7a, 0x3b, 0xb7, 0x89, 0xa1, 0x05, 0x46, 0x01,
+ 0x2a, 0x66, 0x90, 0x18, 0x10, 0x71, 0x27, 0x3b, 0xe5, 0x0e, 0xa6, 0x68,
+ 0x77, 0x27, 0xae, 0xda, 0x59, 0xa6, 0x98, 0xbc, 0x83, 0x35, 0xf2, 0x35,
+ 0xbc, 0x3b, 0x8c, 0x31, 0x7e, 0xe8, 0x3f, 0xee, 0x7c, 0xd7, 0xd8, 0x6b,
+ 0xc0, 0x87, 0xbd, 0xef, 0x1a, 0xdb, 0x87, 0xed, 0x7d, 0xfc, 0xbc, 0x6f,
+ 0x3e, 0x6f, 0x37, 0x42, 0x6d, 0x90, 0x96, 0x92, 0x35, 0x41, 0x5a, 0x51,
+ 0xab, 0x05, 0x7e, 0xf5, 0xf1, 0x38, 0xf9, 0x23, 0xf9, 0xea, 0x63, 0x07,
+ 0xff, 0x3d, 0x37, 0xff, 0xfe, 0xfa, 0xd5, 0xc7, 0x9d, 0xad, 0x96, 0xf9,
+ 0x7c, 0x78, 0x71, 0xf1, 0x1b, 0x7d, 0xef, 0x19, 0x26, 0x65, 0xae, 0x5c,
+ 0x5c, 0x5c, 0x9c, 0xf3, 0x95, 0xed, 0x2d, 0xba, 0xb4, 0xbd, 0x65, 0x2e,
+ 0x5e, 0xfc, 0x66, 0x95, 0x3d, 0x43, 0x08, 0xa7, 0x40, 0x6e, 0x15, 0x24,
+ 0x54, 0x48, 0xfa, 0x04, 0x23, 0xb3, 0x28, 0x22, 0xa5, 0xd9, 0x3c, 0xc5,
+ 0x1d, 0x58, 0x7d, 0xa1, 0xda, 0x26, 0xa4, 0x7a, 0x9b, 0x76, 0x7a, 0xc4,
+ 0xc5, 0xa0, 0xc9, 0x36, 0xd4, 0x31, 0x1f, 0xf9, 0xfa, 0xa3, 0x1d, 0xff,
+ 0xa9, 0xa7, 0x4b, 0x52, 0x64, 0xb6, 0xe4, 0x6c, 0x50, 0xb2, 0x30, 0xc3,
+ 0x5a, 0x38, 0xaa, 0xc7, 0xde, 0x20, 0x60, 0x24, 0x27, 0x8f, 0x02, 0x38,
+ 0xe1, 0x03, 0x66, 0xf8, 0x8e, 0x4b, 0x3a, 0xdb, 0x3e, 0x40, 0xdc, 0x24,
+ 0x81, 0x3e, 0x32, 0x4a, 0x51, 0x61, 0x01, 0x28, 0x3b, 0x46, 0xcc, 0xf5,
+ 0xb7, 0x58, 0xa2, 0x77, 0x18, 0x22, 0x64, 0x5f, 0x5f, 0xb4, 0x8e, 0xb0,
+ 0xff, 0xf0, 0x69, 0xfb, 0x00, 0x2a, 0x56, 0x51, 0x37, 0x90, 0xdf, 0x20,
+ 0xc7, 0x3b, 0xa1, 0x78, 0x07, 0xe9, 0x2c, 0xe3, 0xa6, 0x62, 0xf6, 0x35,
+ 0x69, 0x38, 0xb9, 0x33, 0x67, 0x00, 0x04, 0x11, 0xc9, 0x3b, 0x33, 0xcc,
+ 0x4a, 0x86, 0xf0, 0x1d, 0x40, 0x3c, 0x02, 0x7f, 0x5a, 0x6e, 0x41, 0xa4,
+ 0xdc, 0x3b, 0x70, 0x54, 0x0f, 0xc3, 0x14, 0x8c, 0x5e, 0x13, 0x9b, 0xb9,
+ 0x0a, 0x35, 0x85, 0x53, 0x9c, 0x7f, 0xc5, 0xda, 0xb8, 0x62, 0x0d, 0xcc,
+ 0x8e, 0x3c, 0xaf, 0xac, 0x5f, 0x54, 0xb2, 0xf3, 0xe1, 0xf4, 0x9d, 0x39,
+ 0x48, 0x26, 0x83, 0x61, 0x56, 0xda, 0x30, 0x7f, 0xb1, 0xc9, 0xb8, 0x09,
+ 0x46, 0xa4, 0xa7, 0x0a, 0x83, 0x21, 0x49, 0xde, 0x3f, 0x8d, 0xdd, 0xef,
+ 0x90, 0xa7, 0xce, 0xcc, 0x4f, 0xcb, 0x67, 0xec, 0x3e, 0x80, 0xf4, 0xfe,
+ 0x11, 0x24, 0xe8, 0x40, 0x2a, 0xa5, 0xd1, 0xc1, 0xf8, 0x7b, 0x02, 0xe1,
+ 0x7a, 0x1f, 0xd2, 0x21, 0xcb, 0x7c, 0x60, 0xdc, 0xfd, 0xa9, 0x7b, 0xd5,
+ 0xda, 0xa3, 0x85, 0xc5, 0x14, 0xf5, 0x36, 0xd2, 0xc8, 0x29, 0x29, 0x7e,
+ 0xf1, 0xf8, 0x51, 0xb0, 0x61, 0x1a, 0x89, 0xb8, 0x7c, 0x1a, 0xab, 0xed,
+ 0x86, 0xd7, 0x92, 0xab, 0x27, 0x8c, 0xbe, 0x37, 0x83, 0xeb, 0x5a, 0x94,
+ 0x5d, 0x3f, 0x9c, 0x34, 0x77, 0x95, 0xa9, 0x25, 0xb0, 0x8f, 0xaa, 0x78,
+ 0x3f, 0x8d, 0x6e, 0x8a, 0x21, 0xe7, 0xdd, 0x50, 0x75, 0xb0, 0xc0, 0x13,
+ 0xaa, 0xb2, 0x80, 0x14, 0x87, 0xbd, 0x6a, 0x9c, 0x5e, 0x91, 0x71, 0x63,
+ 0x5d, 0x81, 0x9d, 0x6c, 0x48, 0x22, 0x2c, 0xce, 0xba, 0x36, 0x5d, 0x10,
+ 0xc4, 0xc2, 0x3a, 0x6c, 0xcf, 0x0d, 0x8d, 0xb8, 0xe1, 0xe4, 0x82, 0x84,
+ 0xc4, 0x82, 0x52, 0xc9, 0x05, 0x25, 0x2a, 0xa5, 0x46, 0x7a, 0xb0, 0xf1,
+ 0xef, 0x8e, 0x09, 0xe1, 0x5b, 0xe3, 0x3c, 0xe8, 0x17, 0xec, 0xd0, 0x15,
+ 0xbc, 0xf1, 0xcf, 0xf3, 0x9f, 0x2b, 0xcb, 0x7c, 0xae, 0x14, 0xe7, 0xc1,
+ 0x81, 0x20, 0xd7, 0x39, 0xb6, 0xbc, 0xc7, 0xf0, 0xa1, 0x8d, 0xbf, 0x45,
+ 0x2c, 0x47, 0x35, 0x3b, 0xbf, 0xeb, 0xcb, 0x48, 0x98, 0xe8, 0xe8, 0x4e,
+ 0x33, 0x5d, 0x4b, 0xc8, 0x1c, 0x3f, 0xc3, 0x6c, 0x4a, 0xb3, 0x35, 0x00,
+ 0xd0, 0x1d, 0x9a, 0x17, 0xdc, 0x43, 0x3e, 0x7a, 0x89, 0x7f, 0xe4, 0x7c,
+ 0x56, 0xfd, 0x79, 0x17, 0x4b, 0x95, 0xed, 0x4a, 0xa5, 0x32, 0xa8, 0xeb,
+ 0x85, 0x7d, 0xf2, 0x56, 0x1c, 0x44, 0xdd, 0xe1, 0xc3, 0x7d, 0x7a, 0x83,
+ 0x68, 0x55, 0xc0, 0x1e, 0x9e, 0x86, 0xc3, 0xf4, 0xc6, 0x7c, 0x46, 0x27,
+ 0x9a, 0xdb, 0x46, 0x88, 0x12, 0x09, 0xf1, 0x13, 0x82, 0x61, 0xa1, 0xc6,
+ 0xa1, 0xb4, 0xda, 0x8b, 0xd9, 0x70, 0x18, 0xe0, 0x3e, 0xfa, 0x7b, 0x59,
+ 0x89, 0x24, 0xa2, 0xaa, 0xe2, 0x44, 0x52, 0x98, 0xac, 0x35, 0xca, 0xfa,
+ 0x62, 0x11, 0xcc, 0x7c, 0x17, 0xee, 0xf2, 0xec, 0xe6, 0x55, 0xcd, 0x05,
+ 0x62, 0x3f, 0x44, 0xd8, 0x07, 0x50, 0x27, 0x27, 0xe7, 0xc3, 0x37, 0x95,
+ 0xb4, 0x06, 0x91, 0x8a, 0x60, 0x9b, 0x46, 0xef, 0xc7, 0x98, 0x20, 0x38,
+ 0x73, 0x72, 0x0a, 0xd1, 0x1c, 0xc1, 0x6a, 0x8d, 0x19, 0xde, 0x08, 0xf1,
+ 0x17, 0xa0, 0x80, 0xc2, 0x8c, 0xb1, 0xca, 0xd5, 0x5e, 0x10, 0xf7, 0x7f,
+ 0x3e, 0x9e, 0x21, 0x4b, 0xc5, 0x64, 0x9a, 0xca, 0xda, 0x13, 0x30, 0xa4,
+ 0xf9, 0x40, 0x41, 0xf2, 0x7d, 0xb3, 0xbf, 0xd0, 0xc5, 0x31, 0x44, 0x67,
+ 0x05, 0x46, 0x4a, 0x42, 0x96, 0xcb, 0xb4, 0x78, 0x28, 0x55, 0xfa, 0x00,
+ 0x26, 0x10, 0x45, 0x10, 0x38, 0xb5, 0xa7, 0x2b, 0x79, 0xcd, 0xe1, 0x2e,
+ 0x3c, 0x0e, 0x97, 0xc1, 0x44, 0xa1, 0x10, 0x22, 0x32, 0x7d, 0x0b, 0x8c,
+ 0xeb, 0x14, 0xcb, 0x42, 0xe3, 0x27, 0x2b, 0x2a, 0x21, 0xe7, 0x03, 0x8e,
+ 0xca, 0xf7, 0xd3, 0xa1, 0xf0, 0x88, 0xd6, 0x31, 0x0a, 0x4e, 0xa1, 0x47,
+ 0xd7, 0xd7, 0xd7, 0xfe, 0xb1, 0xf6, 0xc7, 0xda, 0xc7, 0xb5, 0x8d, 0x64,
+ 0x7d, 0xed, 0x95, 0xf9, 0x34, 0xc2, 0x4f, 0x2f, 0xcd, 0xa7, 0xe1, 0xda,
+ 0xc6, 0x06, 0x37, 0xdb, 0x94, 0x68, 0x67, 0x4e, 0x38, 0xa2, 0x84, 0x7b,
+ 0x12, 0x31, 0x15, 0x16, 0x3a, 0xca, 0xad, 0x38, 0x6c, 0xf4, 0xc8, 0xfb,
+ 0x82, 0x72, 0x9d, 0x35, 0x5e, 0xca, 0x17, 0x3d, 0x7c, 0x89, 0xcd, 0x72,
+ 0x7c, 0x04, 0x9b, 0xe5, 0xf8, 0x48, 0xcb, 0xef, 0xaf, 0x05, 0x91, 0xc6,
+ 0xe6, 0x89, 0x04, 0xe5, 0x27, 0x3d, 0x21, 0x0d, 0x9a, 0xc5, 0xd8, 0x23,
+ 0xac, 0xd7, 0x56, 0xc2, 0x31, 0x2b, 0x71, 0x81, 0x82, 0x52, 0x4b, 0xa1,
+ 0x49, 0xac, 0x3c, 0x53, 0x7c, 0xd2, 0xd0, 0xa3, 0x27, 0x74, 0x3c, 0x99,
+ 0xd6, 0x0c, 0x7d, 0x34, 0x13, 0xaa, 0xcd, 0x6a, 0x13, 0x76, 0x18, 0x9d,
+ 0x8c, 0x82, 0x6d, 0xe9, 0x41, 0xee, 0x15, 0x35, 0xcb, 0x40, 0x2d, 0xb7,
+ 0x12, 0x02, 0x85, 0xec, 0xfb, 0x61, 0x36, 0x01, 0x4f, 0x5b, 0x89, 0x06,
+ 0x90, 0x98, 0x48, 0x61, 0xd6, 0xcb, 0xc9, 0x14, 0xd4, 0x2a, 0x55, 0xeb,
+ 0xf4, 0x31, 0x5f, 0xc3, 0x12, 0x52, 0x0f, 0x10, 0xb7, 0xac, 0x4f, 0x97,
+ 0xd7, 0x23, 0xdc, 0x50, 0x8d, 0x53, 0xfe, 0xc0, 0x27, 0x0d, 0x36, 0x83,
+ 0x17, 0xa8, 0x42, 0xac, 0xa1, 0xb3, 0x51, 0xfe, 0x51, 0xc2, 0x30, 0xe0,
+ 0x57, 0x8f, 0x1d, 0x7a, 0x67, 0x46, 0xec, 0xa0, 0x20, 0x6a, 0xc7, 0x9a,
+ 0xbe, 0xd0, 0x68, 0x19, 0xf7, 0x47, 0xc0, 0x5d, 0x9e, 0x14, 0x2a, 0x17,
+ 0x6a, 0xfc, 0x11, 0x2f, 0x71, 0xbf, 0x36, 0x4e, 0xe9, 0x2f, 0x75, 0xfd,
+ 0x0f, 0x6f, 0x78, 0x88, 0x9c, 0xd6, 0x38, 0xc5, 0x3f, 0xf8, 0xfb, 0xea,
+ 0xca, 0x1f, 0xc9, 0x5a, 0x7b, 0xcd, 0xdc, 0xb6, 0xd6, 0xc2, 0x7f, 0xff,
+ 0x03, 0xff, 0x7d, 0xb1, 0x16, 0x3c, 0xd8, 0xc5, 0x82, 0x3e, 0x66, 0xad,
+ 0x59, 0xc1, 0xd1, 0x5f, 0xd5, 0x8b, 0x9c, 0x63, 0x83, 0xeb, 0x4f, 0x4d,
+ 0x6c, 0x25, 0x2a, 0xba, 0xad, 0x7a, 0x4a, 0x85, 0x03, 0xf6, 0x06, 0xab,
+ 0x0f, 0xbe, 0xc5, 0x23, 0xb5, 0x9d, 0x37, 0x3b, 0xda, 0x5b, 0x54, 0x3b,
+ 0x8f, 0x6e, 0x02, 0xcd, 0x13, 0x1b, 0xdf, 0x2c, 0xee, 0x4d, 0xe9, 0x75,
+ 0xa7, 0xac, 0x99, 0x78, 0xea, 0x37, 0x75, 0x18, 0xe9, 0x25, 0x2e, 0xb0,
+ 0x78, 0x13, 0x14, 0x3c, 0xb3, 0xb0, 0x33, 0x42, 0x98, 0xd2, 0x1d, 0xa1,
+ 0xcf, 0xf8, 0x04, 0xd5, 0x0d, 0xf9, 0x6f, 0x4b, 0xbd, 0xa5, 0x0c, 0x5f,
+ 0x53, 0x3b, 0xf0, 0xf8, 0x76, 0x59, 0x66, 0xf8, 0xb1, 0x27, 0x37, 0x16,
+ 0xf8, 0xbf, 0x04, 0x98, 0x55, 0x52, 0xf4, 0x61, 0x1f, 0x22, 0xff, 0x1f,
+ 0x08, 0xdb, 0x97, 0x70, 0x72, 0x66, 0x4c, 0xc0, 0x0d, 0x5c, 0x75, 0x14,
+ 0x30, 0xbe, 0xa1, 0xbc, 0xc9, 0x65, 0x13, 0x1d, 0x8a, 0x0d, 0x15, 0x46,
+ 0x4c, 0xa7, 0xdc, 0x4c, 0x5b, 0x10, 0x56, 0x4b, 0x97, 0x89, 0x84, 0x47,
+ 0x00, 0xf2, 0xf3, 0x27, 0x69, 0x99, 0xad, 0xa9, 0x68, 0xae, 0xf1, 0xc1,
+ 0x2c, 0xc1, 0xd1, 0xe6, 0xcd, 0x82, 0xc2, 0x91, 0x85, 0x1a, 0x6e, 0xf6,
+ 0x0b, 0x0d, 0x9b, 0x2c, 0xe6, 0x84, 0x18, 0x45, 0x80, 0x78, 0x0e, 0x70,
+ 0xca, 0x6b, 0x46, 0x60, 0x6a, 0x8d, 0x40, 0xc0, 0x9f, 0xa4, 0x01, 0x0f,
+ 0xc4, 0x55, 0x15, 0xe7, 0x58, 0x5d, 0xf1, 0x57, 0x03, 0x13, 0x84, 0x79,
+ 0x74, 0x66, 0x65, 0xf4, 0x57, 0x6a, 0x0a, 0x10, 0x58, 0x6d, 0x19, 0x83,
+ 0xe4, 0x59, 0xcf, 0x82, 0x9f, 0x87, 0xa2, 0x9b, 0xc8, 0xca, 0x0a, 0x67,
+ 0x38, 0x56, 0x12, 0x01, 0xc8, 0x3f, 0x41, 0x93, 0xe1, 0xd0, 0x84, 0x85,
+ 0x2c, 0x52, 0x56, 0x20, 0xce, 0x1a, 0xbd, 0xf9, 0x64, 0x5a, 0xf5, 0xa6,
+ 0xd5, 0x92, 0xeb, 0x5a, 0x63, 0x2d, 0x59, 0xff, 0xf5, 0xdf, 0xff, 0x8a,
+ 0x20, 0x5a, 0x8d, 0xdf, 0x02, 0xbe, 0xf6, 0xb6, 0x67, 0xcb, 0x6d, 0x35,
+ 0x4e, 0xd5, 0x17, 0xcb, 0x1c, 0xf5, 0xcd, 0xea, 0x56, 0xff, 0xc6, 0x8d,
+ 0x6f, 0x12, 0x78, 0x8d, 0x25, 0x5e, 0xf8, 0xf3, 0xc7, 0xd7, 0x84, 0x46,
+ 0xda, 0x58, 0x6b, 0xb8, 0xf7, 0xaf, 0x3d, 0xeb, 0xfd, 0x21, 0x4f, 0x9d,
+ 0xf7, 0x7e, 0xf3, 0x9a, 0xf9, 0x5b, 0xdb, 0x91, 0x0e, 0x4f, 0x97, 0xa3,
+ 0xa0, 0x70, 0xae, 0xa0, 0x4c, 0x53, 0x7c, 0xba, 0xe6, 0xf4, 0x60, 0x75,
+ 0x65, 0xd1, 0x14, 0xd8, 0x66, 0xd7, 0x9e, 0xd5, 0xec, 0xc2, 0x91, 0x05,
+ 0x74, 0x29, 0x4a, 0x93, 0x4f, 0x9e, 0x8e, 0x4d, 0x42, 0x37, 0x7f, 0xfd,
+ 0xf7, 0xc6, 0x6f, 0xb8, 0x66, 0x1b, 0x09, 0x77, 0x72, 0x1d, 0x3a, 0xf9,
+ 0xeb, 0xbf, 0xaf, 0xfd, 0x86, 0x53, 0xb9, 0x91, 0xcc, 0x7f, 0xe5, 0xdb,
+ 0xd9, 0x4d, 0x3e, 0x08, 0xdf, 0xa8, 0x2f, 0x06, 0x93, 0xea, 0x2d, 0x39,
+ 0xdc, 0x46, 0xbc, 0xd9, 0x7e, 0x24, 0xe7, 0x3f, 0x74, 0x08, 0x68, 0x0e,
+ 0xe7, 0x6b, 0xa9, 0x47, 0x92, 0x16, 0xf6, 0x76, 0x89, 0xe5, 0x57, 0x4d,
+ 0xe8, 0xee, 0x56, 0xec, 0x5a, 0xac, 0x5c, 0x9e, 0x8b, 0x79, 0x8b, 0x66,
+ 0xe7, 0xd7, 0xb4, 0xf5, 0x7b, 0xa7, 0xf5, 0x3f, 0x11, 0x82, 0x55, 0x2e,
+ 0xb5, 0xd6, 0xd6, 0x37, 0xfe, 0xd6, 0x6c, 0x6f, 0xbe, 0xf8, 0xee, 0xfb,
+ 0x93, 0xbf, 0x7c, 0xf3, 0xd5, 0xff, 0xfd, 0xff, 0xf6, 0x1f, 0x7f, 0xfd,
+ 0x6d, 0x1e, 0xfb, 0x8e, 0xd6, 0x2a, 0xfd, 0x5c, 0x72, 0xef, 0xe1, 0x0e,
+ 0xc8, 0xbd, 0x87, 0x3b, 0xa2, 0x24, 0x0e, 0xc9, 0x6d, 0x4e, 0x26, 0x95,
+ 0xa5, 0x19, 0xb1, 0x8e, 0x97, 0xc0, 0xf2, 0x4f, 0x25, 0x1b, 0x57, 0xbc,
+ 0x9a, 0x55, 0xb6, 0xc2, 0x8a, 0x68, 0xa0, 0x5c, 0x87, 0x0a, 0x21, 0x0d,
+ 0xef, 0x86, 0x99, 0x8d, 0xc3, 0x62, 0x95, 0x03, 0xe8, 0x9e, 0xf5, 0x0a,
+ 0xb1, 0x70, 0x30, 0x0a, 0x1d, 0xe3, 0x1c, 0x37, 0xd5, 0x8d, 0x7f, 0xe9,
+ 0xbd, 0xbe, 0xbe, 0x84, 0x2a, 0x30, 0x4f, 0xc3, 0x69, 0xd2, 0x80, 0x2b,
+ 0x46, 0x39, 0xa0, 0x87, 0x37, 0x9a, 0x12, 0xc4, 0x80, 0x4e, 0xfb, 0xe1,
+ 0x53, 0x92, 0x0e, 0x00, 0x71, 0x8b, 0xfc, 0x74, 0x1f, 0x8a, 0x7c, 0xc0,
+ 0x49, 0xb7, 0x0f, 0x13, 0x34, 0xc9, 0x48, 0x9d, 0x40, 0x02, 0x99, 0x56,
+ 0x15, 0xf1, 0x90, 0xb7, 0xf3, 0x10, 0x1e, 0x01, 0x06, 0x99, 0xc2, 0xed,
+ 0xd2, 0x30, 0xce, 0x68, 0x75, 0x85, 0xf2, 0x36, 0x2b, 0x85, 0x57, 0xab,
+ 0x56, 0x22, 0x04, 0x4f, 0x8b, 0x19, 0x63, 0xcf, 0x25, 0x7f, 0xeb, 0x15,
+ 0xe3, 0xd2, 0x04, 0xfe, 0x3a, 0xed, 0x52, 0x43, 0x87, 0xdd, 0xe9, 0xb5,
+ 0xf5, 0xc2, 0xa1, 0x93, 0x5b, 0x6b, 0xf9, 0x5e, 0x7a, 0x5b, 0x1c, 0x94,
+ 0x27, 0xc0, 0xd3, 0x49, 0x7c, 0x38, 0x1d, 0x95, 0x04, 0xd7, 0x4e, 0xaa,
+ 0xc9, 0x1a, 0x88, 0xa0, 0x43, 0xc0, 0x7a, 0x90, 0xdf, 0x4b, 0x80, 0x3a,
+ 0xa4, 0x78, 0xbf, 0x52, 0xb0, 0x3a, 0xa7, 0xc9, 0x34, 0x7d, 0xcf, 0xa1,
+ 0x5f, 0x02, 0xad, 0xb4, 0xc8, 0x6d, 0xef, 0xb9, 0x06, 0xab, 0x5d, 0xf7,
+ 0xdc, 0xf1, 0xd1, 0x7b, 0x9d, 0xe7, 0x1e, 0xea, 0x0a, 0x99, 0x7b, 0xc3,
+ 0x02, 0x44, 0x8b, 0xde, 0xc0, 0x01, 0x98, 0x15, 0xb0, 0xed, 0xb9, 0x2f,
+ 0xeb, 0x13, 0x1a, 0xb3, 0x87, 0x50, 0xb4, 0xec, 0xa3, 0x14, 0xf9, 0x08,
+ 0xe1, 0x18, 0xa3, 0x20, 0x44, 0x28, 0xd6, 0xbf, 0xfe, 0x80, 0xcd, 0x84,
+ 0x46, 0xbb, 0xd0, 0x88, 0xd3, 0x6a, 0xf1, 0xac, 0xbc, 0x56, 0x36, 0xa3,
+ 0xb1, 0x9c, 0x80, 0xf6, 0xe6, 0x22, 0xa0, 0xcc, 0x3a, 0x0a, 0x76, 0xa0,
+ 0x04, 0x66, 0xce, 0xed, 0xef, 0x43, 0x8e, 0x91, 0x5c, 0xb1, 0x40, 0x4c,
+ 0xef, 0xb9, 0x2f, 0xe8, 0x06, 0x3d, 0x42, 0xef, 0xdb, 0x91, 0x78, 0xdf,
+ 0xbc, 0xc3, 0xdf, 0x3c, 0x04, 0xe5, 0xfa, 0x18, 0x60, 0xcc, 0x1b, 0x94,
+ 0xe1, 0x5c, 0x4d, 0x8f, 0xc9, 0xc1, 0x16, 0xa2, 0x9b, 0xd1, 0xe1, 0x5b,
+ 0xbd, 0x9b, 0xb1, 0x14, 0xc7, 0x4f, 0x1e, 0x60, 0xb4, 0x04, 0x0b, 0x88,
+ 0x6b, 0xae, 0x80, 0xba, 0x26, 0x1f, 0xb2, 0x61, 0x88, 0x11, 0x25, 0xbc,
+ 0x03, 0xaa, 0x7c, 0x61, 0x38, 0x42, 0x13, 0x40, 0xe0, 0x4a, 0x44, 0xeb,
+ 0xf1, 0x6e, 0x63, 0xe2, 0x84, 0x77, 0x51, 0xc0, 0x02, 0xde, 0xe3, 0xa2,
+ 0x14, 0x38, 0x1d, 0xd5, 0xd9, 0xdd, 0x22, 0xa1, 0xcf, 0x31, 0x6f, 0x38,
+ 0x6e, 0xf2, 0xd0, 0x19, 0x8e, 0xac, 0xa6, 0x01, 0x05, 0xc5, 0xb8, 0x46,
+ 0x25, 0x8f, 0x06, 0xde, 0x3c, 0x62, 0x64, 0x33, 0x0c, 0x9c, 0xcc, 0xa7,
+ 0x33, 0xa9, 0xf0, 0x1e, 0x38, 0xcf, 0x15, 0xb7, 0x38, 0x0d, 0x07, 0x1d,
+ 0x0b, 0xcb, 0x06, 0x1f, 0x8a, 0x11, 0x68, 0xa0, 0x4e, 0xc3, 0x58, 0xe7,
+ 0xdb, 0xae, 0xa3, 0x98, 0xb3, 0xa1, 0x9c, 0xcb, 0xb7, 0x30, 0x0b, 0x70,
+ 0x36, 0xdc, 0x00, 0xac, 0x2b, 0xd4, 0x28, 0x04, 0xd6, 0xbe, 0x81, 0x16,
+ 0x7d, 0x0a, 0x6c, 0x92, 0x08, 0x91, 0x7c, 0x22, 0xa7, 0x03, 0x03, 0x7d,
+ 0x55, 0xb0, 0x71, 0x31, 0xa2, 0x0b, 0x75, 0x12, 0x2c, 0x21, 0x80, 0x01,
+ 0x05, 0x7a, 0x6b, 0x40, 0x80, 0x11, 0x87, 0xd0, 0xa4, 0x8b, 0xb7, 0xa5,
+ 0x87, 0x35, 0xb6, 0x68, 0x57, 0x40, 0x27, 0xed, 0xb6, 0xd0, 0x4f, 0x82,
+ 0xf1, 0x2d, 0xf2, 0xae, 0x85, 0x7b, 0xba, 0x1d, 0x6c, 0xa7, 0xcf, 0x9a,
+ 0xf7, 0xb5, 0x8d, 0xc6, 0xb0, 0x6d, 0x65, 0x0c, 0x7b, 0x22, 0xbb, 0x1e,
+ 0x3a, 0x2c, 0xc9, 0xe3, 0xaf, 0x82, 0x53, 0x2b, 0xdd, 0x87, 0x75, 0xc0,
+ 0x7c, 0xa4, 0xc6, 0xa9, 0x2c, 0x09, 0x53, 0xfe, 0x07, 0x12, 0x19, 0x5c,
+ 0xd4, 0x14, 0x89, 0x05, 0x61, 0x45, 0x03, 0xb5, 0xf1, 0x4e, 0x00, 0xd2,
+ 0x78, 0x61, 0x18, 0x35, 0x5b, 0x9f, 0x31, 0x09, 0xc3, 0xd5, 0xb0, 0x72,
+ 0xe5, 0x13, 0x62, 0x2f, 0x48, 0xb0, 0x5e, 0x01, 0x24, 0xdb, 0x41, 0x8c,
+ 0xc7, 0x6c, 0xda, 0xa6, 0xbc, 0x8d, 0xcb, 0x5b, 0x87, 0xc0, 0x00, 0x38,
+ 0x13, 0x10, 0xf5, 0x32, 0x2c, 0x33, 0x2c, 0x90, 0xd1, 0x74, 0xb9, 0xaa,
+ 0x49, 0x2c, 0x81, 0x01, 0x41, 0x5d, 0x0d, 0x2b, 0xa5, 0xbf, 0x03, 0x3d,
+ 0x50, 0x2a, 0x70, 0xc0, 0x50, 0x7a, 0xf5, 0xc7, 0x05, 0x96, 0x3e, 0xd3,
+ 0x66, 0xf2, 0xe8, 0x81, 0x83, 0x46, 0x5b, 0x67, 0xe4, 0x2d, 0x7d, 0x2b,
+ 0x2f, 0x6e, 0x22, 0xf8, 0x2f, 0xb0, 0xf5, 0x52, 0xa4, 0x51, 0xe5, 0x4e,
+ 0x27, 0x65, 0xb9, 0xa0, 0xff, 0x09, 0x96, 0xe5, 0xa2, 0xd2, 0x2f, 0x14,
+ 0x0d, 0x8f, 0x35, 0x61, 0xc2, 0xbd, 0x78, 0xba, 0xe1, 0x5c, 0x6b, 0x1c,
+ 0xa9, 0x03, 0xc0, 0x5d, 0xa5, 0x75, 0xbb, 0x46, 0x6c, 0xd0, 0xf8, 0xce,
+ 0xbb, 0xca, 0x3b, 0x99, 0xb5, 0x52, 0x1a, 0x70, 0x6c, 0xf3, 0x41, 0xbe,
+ 0x59, 0x2c, 0x59, 0xcd, 0xed, 0x25, 0x80, 0xff, 0xa1, 0x89, 0x97, 0xe9,
+ 0x5e, 0xe6, 0xc5, 0xb4, 0x05, 0x23, 0xf3, 0x9d, 0x70, 0x86, 0x1e, 0x02,
+ 0x45, 0x42, 0x04, 0xa5, 0x4d, 0x17, 0x8f, 0x8c, 0xea, 0xb7, 0xdf, 0xbe,
+ 0x8e, 0x34, 0x9d, 0x8f, 0xc5, 0xd6, 0xd1, 0xc4, 0xd6, 0x38, 0xb5, 0x8c,
+ 0x1b, 0x50, 0x3c, 0x56, 0x26, 0x8c, 0xb1, 0x77, 0x97, 0x60, 0x09, 0xab,
+ 0x2b, 0x11, 0x9e, 0x20, 0xfc, 0xf5, 0xb2, 0x12, 0xb5, 0xa6, 0x12, 0x2b,
+ 0x7c, 0x74, 0x03, 0xb6, 0x06, 0x71, 0x97, 0x74, 0x65, 0xdd, 0x52, 0x82,
+ 0xd5, 0x21, 0xf1, 0x5d, 0x1b, 0x88, 0x78, 0x12, 0x40, 0x40, 0x73, 0x96,
+ 0x20, 0x8e, 0xa2, 0x13, 0x19, 0xf1, 0x12, 0x78, 0xa8, 0xc7, 0xbb, 0x34,
+ 0x6c, 0xff, 0xc2, 0x57, 0xf3, 0xb1, 0xa7, 0x5d, 0xf8, 0xd8, 0x58, 0x8b,
+ 0x1b, 0x6b, 0xf5, 0xa1, 0xd6, 0xb5, 0x8b, 0x90, 0x9c, 0x34, 0x97, 0x58,
+ 0x0e, 0x85, 0x26, 0x54, 0x90, 0x9a, 0x52, 0xad, 0x3d, 0x84, 0x75, 0x21,
+ 0x69, 0x94, 0x98, 0x25, 0xc4, 0x9a, 0x09, 0x96, 0x46, 0x29, 0x66, 0x90,
+ 0x00, 0x88, 0x6d, 0x11, 0xe6, 0x04, 0x50, 0x46, 0x01, 0x4a, 0xc5, 0xc3,
+ 0x3d, 0xfa, 0x4d, 0xe9, 0xe6, 0x16, 0xde, 0xa1, 0x4f, 0xb5, 0xb5, 0xe8,
+ 0x36, 0x49, 0xa3, 0xdb, 0xd6, 0x34, 0x58, 0xb3, 0x35, 0xe8, 0x50, 0x85,
+ 0x3e, 0x54, 0xdf, 0x60, 0x14, 0xef, 0x68, 0x73, 0x70, 0xa1, 0x6e, 0x1a,
+ 0xea, 0x4d, 0x48, 0xbe, 0x68, 0x10, 0x37, 0x24, 0xc1, 0x3d, 0x24, 0x38,
+ 0xa8, 0x48, 0x0f, 0xba, 0xdd, 0x6a, 0xc5, 0xca, 0x74, 0xf1, 0xdb, 0x37,
+ 0x46, 0xe5, 0x5e, 0xf7, 0x2f, 0xac, 0xd1, 0x2a, 0x81, 0x55, 0x41, 0x5d,
+ 0xde, 0x98, 0xa7, 0x0b, 0xd7, 0xfb, 0xd9, 0xfd, 0xdc, 0xba, 0xae, 0x15,
+ 0x9d, 0xeb, 0xc3, 0x1c, 0xe5, 0x40, 0x17, 0x79, 0x48, 0xce, 0x77, 0x92,
+ 0x6d, 0xba, 0x9e, 0xf0, 0x7d, 0xea, 0x09, 0x1c, 0x86, 0x6a, 0xb9, 0x5e,
+ 0x12, 0x50, 0xb9, 0x15, 0xdb, 0x44, 0x96, 0x2b, 0xe2, 0x3c, 0xbe, 0x0e,
+ 0x68, 0xf4, 0x04, 0x25, 0x18, 0xc9, 0x8c, 0x93, 0x23, 0xc6, 0xbe, 0x2e,
+ 0x9a, 0x06, 0x12, 0x4a, 0xe8, 0x20, 0x7a, 0x22, 0x5a, 0x7b, 0xc9, 0xf5,
+ 0x97, 0x5d, 0x82, 0xa4, 0x04, 0x05, 0x00, 0x17, 0xe7, 0x53, 0xad, 0x98,
+ 0x7a, 0xc5, 0xd6, 0x15, 0x16, 0xc8, 0xa7, 0x40, 0xad, 0x9e, 0x54, 0x61,
+ 0x2c, 0x47, 0x10, 0x16, 0xa2, 0x81, 0x9a, 0x9a, 0x04, 0xc8, 0x02, 0x41,
+ 0x30, 0x9c, 0x5d, 0x8f, 0x36, 0xcd, 0x10, 0x85, 0x17, 0x61, 0x44, 0xcd,
+ 0x8e, 0xcc, 0x3e, 0x48, 0x09, 0xc5, 0x8f, 0x53, 0x86, 0xf6, 0x65, 0x34,
+ 0x83, 0xda, 0x93, 0x01, 0xc3, 0xc3, 0x6b, 0x8f, 0x86, 0x3a, 0xb6, 0xdd,
+ 0x6a, 0x85, 0x2c, 0x7b, 0x9d, 0xb7, 0x18, 0xb9, 0x6c, 0x37, 0x14, 0x36,
+ 0x0b, 0xd6, 0xb9, 0x94, 0xd5, 0xb0, 0x3d, 0xaa, 0x06, 0xc3, 0x2f, 0x0e,
+ 0x1f, 0xfb, 0x84, 0x20, 0xc8, 0x83, 0x5d, 0x8c, 0x1f, 0xdb, 0x65, 0x91,
+ 0xec, 0xad, 0x14, 0x39, 0x81, 0xb0, 0x9f, 0x40, 0x2f, 0xb5, 0x6b, 0x6c,
+ 0x21, 0xd3, 0x07, 0x91, 0x5e, 0x5b, 0xc5, 0x61, 0x11, 0x2f, 0xa8, 0xee,
+ 0x24, 0xcd, 0x05, 0x64, 0xd3, 0x08, 0x13, 0x10, 0xd9, 0xd8, 0x59, 0xf1,
+ 0xd0, 0x38, 0xd3, 0x6a, 0xad, 0x25, 0xeb, 0xeb, 0x73, 0x02, 0xfe, 0x0c,
+ 0x77, 0x58, 0x6b, 0x81, 0x55, 0xd1, 0x70, 0xcb, 0xd6, 0x5a, 0x60, 0x7c,
+ 0x8f, 0xdf, 0xbb, 0x01, 0xd6, 0x63, 0x23, 0xb2, 0xad, 0xcd, 0xf7, 0x7d,
+ 0x40, 0x7e, 0xa5, 0x2e, 0x56, 0xc4, 0x73, 0x20, 0xa9, 0x3c, 0xd9, 0x1d,
+ 0x99, 0x8f, 0xbe, 0x36, 0xd7, 0x8b, 0x13, 0x4f, 0xe5, 0x23, 0x18, 0x39,
+ 0xf3, 0x23, 0x8e, 0x9c, 0xab, 0x49, 0xc0, 0x77, 0xc4, 0xd5, 0x4e, 0xe0,
+ 0x89, 0xfe, 0x89, 0x99, 0x41, 0xd3, 0x84, 0x72, 0x4b, 0x7f, 0x56, 0xc5,
+ 0x76, 0x07, 0xc3, 0x06, 0x77, 0x24, 0x6c, 0x10, 0x3c, 0x0c, 0x2c, 0x43,
+ 0xa8, 0xad, 0xed, 0x0e, 0x68, 0x3e, 0xd4, 0x64, 0x8c, 0x09, 0x03, 0xdf,
+ 0x40, 0x3c, 0x05, 0x93, 0x7b, 0x4b, 0x8c, 0x62, 0xc8, 0x0f, 0x20, 0x74,
+ 0x5f, 0xf0, 0xe3, 0x64, 0x92, 0x72, 0x29, 0x2b, 0x32, 0x86, 0x4c, 0x13,
+ 0xd6, 0x9c, 0x9c, 0x7d, 0xab, 0x6d, 0xe7, 0x4d, 0x8f, 0x97, 0x17, 0x39,
+ 0x39, 0xfb, 0x5b, 0x33, 0x39, 0x43, 0xad, 0xe6, 0x8c, 0xde, 0x45, 0x73,
+ 0x13, 0x67, 0xdb, 0xa0, 0x22, 0x09, 0x99, 0xbd, 0x75, 0x06, 0x84, 0x4b,
+ 0xcf, 0x80, 0x50, 0xcf, 0xbf, 0xcd, 0xe3, 0x92, 0xa8, 0x10, 0xb5, 0x3e,
+ 0x08, 0x27, 0x7f, 0x3b, 0xcf, 0x36, 0x61, 0x9a, 0x5e, 0x7f, 0x7b, 0x59,
+ 0x6e, 0xf0, 0xd4, 0xb9, 0x7c, 0x73, 0x25, 0x08, 0xe8, 0xa7, 0x88, 0x6d,
+ 0xf9, 0xa0, 0xa3, 0xd1, 0xb0, 0xcb, 0xd8, 0x5e, 0x5a, 0x3c, 0x48, 0x6d,
+ 0x78, 0xbe, 0x74, 0x16, 0xe7, 0xcb, 0x70, 0x43, 0x7d, 0x1f, 0x98, 0xc6,
+ 0x2f, 0xaf, 0xd3, 0xc9, 0x5d, 0x66, 0xf6, 0xa1, 0x7c, 0x9a, 0xe7, 0x50,
+ 0x9c, 0xbf, 0xbb, 0xf0, 0xa0, 0x9e, 0xfb, 0xfb, 0xd7, 0x0f, 0x79, 0xff,
+ 0x64, 0x5e, 0xf4, 0xee, 0x37, 0x66, 0x6f, 0x7e, 0x4f, 0xb7, 0x2d, 0x30,
+ 0xae, 0xdb, 0x7e, 0xdb, 0x91, 0x4a, 0xf7, 0x97, 0xf2, 0x17, 0x9b, 0x9e,
+ 0x42, 0x58, 0x0a, 0x38, 0xaf, 0x25, 0x30, 0x25, 0xf9, 0x63, 0x75, 0xc5,
+ 0xc6, 0xa6, 0xc0, 0x0f, 0x14, 0x9d, 0x32, 0x8f, 0x43, 0x60, 0x3d, 0xef,
+ 0xcf, 0x7f, 0x2e, 0xd2, 0x09, 0x28, 0xba, 0x22, 0xe0, 0x73, 0x61, 0x26,
+ 0x17, 0x95, 0x9a, 0x88, 0xa1, 0x87, 0x81, 0x9a, 0xf5, 0xf6, 0x92, 0x33,
+ 0xb2, 0x6d, 0x40, 0xd2, 0x14, 0x27, 0x24, 0xf0, 0x6b, 0xc4, 0xd7, 0x7b,
+ 0xc3, 0xa2, 0x4e, 0xb2, 0x23, 0xf3, 0xa9, 0x8a, 0xe3, 0x05, 0x20, 0xb6,
+ 0x28, 0xd5, 0x13, 0x98, 0xa7, 0xa5, 0x42, 0x8a, 0x26, 0x9e, 0x20, 0x50,
+ 0x19, 0xe3, 0x4d, 0xd2, 0x8b, 0x29, 0xba, 0xc4, 0x3b, 0x35, 0x0d, 0xbb,
+ 0x0a, 0x45, 0xd4, 0x25, 0xe2, 0x8c, 0x08, 0x90, 0x1d, 0x50, 0xb8, 0x3e,
+ 0x43, 0x88, 0x90, 0x51, 0x7f, 0xaa, 0x08, 0x99, 0x20, 0x84, 0x54, 0x56,
+ 0x4a, 0x4a, 0xc3, 0x34, 0x4e, 0xa5, 0xca, 0xb8, 0x46, 0xcb, 0x93, 0xd8,
+ 0x58, 0x02, 0x0d, 0xbb, 0x51, 0x3e, 0x6b, 0x46, 0xa2, 0xd5, 0x42, 0x96,
+ 0x79, 0xb7, 0x59, 0x1f, 0x9a, 0x97, 0xb2, 0x36, 0x9d, 0xe0, 0xb3, 0xa0,
+ 0x6e, 0x7c, 0x9e, 0xf3, 0xbe, 0xc6, 0x2c, 0x5b, 0x39, 0xfe, 0x6b, 0xc4,
+ 0x6a, 0xa0, 0x67, 0xd4, 0xb8, 0x94, 0x38, 0x80, 0x2a, 0xdd, 0x55, 0xb6,
+ 0x98, 0x3d, 0x3b, 0x85, 0x55, 0x04, 0x6c, 0xfd, 0xa8, 0x15, 0xb3, 0xb5,
+ 0x8a, 0xe8, 0x78, 0x32, 0x22, 0xb8, 0xa1, 0xbc, 0x65, 0x65, 0xed, 0x40,
+ 0x79, 0xb4, 0x77, 0x9c, 0x38, 0x73, 0x8d, 0x50, 0x3f, 0x59, 0x01, 0x38,
+ 0xd4, 0x1b, 0x6d, 0x4c, 0x28, 0x48, 0xea, 0xc0, 0x2b, 0x05, 0xd9, 0xa4,
+ 0x02, 0xde, 0x1c, 0x08, 0xe7, 0x4d, 0xa6, 0xa7, 0xd3, 0xda, 0x0b, 0xa1,
+ 0xbc, 0x99, 0xd7, 0x63, 0x2e, 0x0a, 0x32, 0x37, 0xea, 0x0e, 0x0f, 0xc7,
+ 0x5f, 0xf1, 0xb9, 0x5f, 0x2b, 0x96, 0x16, 0xce, 0xe7, 0x9b, 0xdf, 0x42,
+ 0x54, 0x9d, 0x7d, 0xf1, 0x8c, 0x93, 0xa7, 0x76, 0xd9, 0xb4, 0x2c, 0x77,
+ 0x7e, 0x25, 0x4b, 0x8d, 0xa2, 0x1c, 0x7e, 0xad, 0x61, 0xc4, 0xe6, 0x47,
+ 0xd0, 0xff, 0xc1, 0x16, 0x81, 0x1f, 0xaa, 0x39, 0xdc, 0x5d, 0x52, 0x0e,
+ 0xbb, 0xa4, 0x12, 0x56, 0xc2, 0x58, 0xba, 0xe7, 0xbd, 0xf1, 0x00, 0x7e,
+ 0x36, 0x7f, 0x96, 0x08, 0x70, 0xb2, 0xef, 0x73, 0x9d, 0xa3, 0xd7, 0x06,
+ 0x72, 0x26, 0xcf, 0xf2, 0xda, 0xa2, 0xd6, 0x3c, 0xc5, 0x35, 0xd0, 0x5a,
+ 0xff, 0xd4, 0xe1, 0x68, 0x0e, 0x1f, 0xd1, 0x6a, 0xe7, 0x1f, 0x90, 0xc9,
+ 0xa2, 0x2e, 0xe2, 0xfc, 0xd8, 0x2e, 0xe2, 0x34, 0xb9, 0xc1, 0xf2, 0x3b,
+ 0xe6, 0x9f, 0x6b, 0xbf, 0x88, 0x2d, 0xdb, 0xb7, 0xc3, 0x10, 0xda, 0x58,
+ 0xe8, 0xdf, 0xad, 0x2c, 0x88, 0xb3, 0x52, 0x81, 0x39, 0xb0, 0xba, 0x15,
+ 0x9a, 0x54, 0xcc, 0x0c, 0xeb, 0x1a, 0x85, 0x56, 0x7a, 0x0a, 0xd1, 0xb3,
+ 0x16, 0xfe, 0xd2, 0xed, 0xd6, 0x1a, 0x6b, 0x3d, 0x6f, 0x62, 0x8b, 0xeb,
+ 0x8b, 0x15, 0x9e, 0xa8, 0xe0, 0xe5, 0x86, 0xb2, 0xeb, 0x25, 0x75, 0x66,
+ 0xbd, 0x98, 0x0d, 0x33, 0x6e, 0xed, 0x8c, 0xd8, 0x45, 0xdb, 0x49, 0xb0,
+ 0xa7, 0xb9, 0xd2, 0x26, 0x24, 0xd7, 0x3a, 0x9b, 0x51, 0xa8, 0x47, 0x04,
+ 0x93, 0x9a, 0x8f, 0x99, 0x93, 0x54, 0xb6, 0x3e, 0xa4, 0xda, 0x83, 0xab,
+ 0xfb, 0x74, 0x89, 0x1e, 0x9a, 0xdb, 0x37, 0xeb, 0xee, 0xe7, 0x63, 0x53,
+ 0xaf, 0xc4, 0xa7, 0xb8, 0x72, 0xa9, 0xd4, 0xde, 0xd2, 0xd6, 0x89, 0x50,
+ 0x4f, 0xe2, 0x1d, 0xe6, 0x0d, 0xec, 0x47, 0xa3, 0x1e, 0x14, 0x4d, 0x28,
+ 0xab, 0x31, 0x1c, 0xfc, 0xc5, 0x1f, 0x03, 0x11, 0x6a, 0xb2, 0x40, 0x11,
+ 0x40, 0x1c, 0x88, 0xd6, 0x60, 0x3a, 0xf0, 0x64, 0x65, 0x73, 0x0d, 0xe9,
+ 0x48, 0xc0, 0x27, 0x92, 0x6b, 0xb0, 0x7a, 0x9c, 0xbb, 0x03, 0x79, 0x01,
+ 0x70, 0x12, 0x1c, 0xdd, 0x1e, 0x70, 0x92, 0x7b, 0x32, 0x28, 0x37, 0x54,
+ 0x17, 0x86, 0xff, 0x59, 0x8e, 0xf2, 0xed, 0x2d, 0x4a, 0x64, 0xdf, 0x12,
+ 0x2d, 0x8e, 0x02, 0x7a, 0x55, 0x86, 0x9b, 0x3a, 0x43, 0xbc, 0x72, 0x2b,
+ 0x03, 0x3d, 0x54, 0x32, 0x43, 0x11, 0x8d, 0x49, 0x1e, 0x1d, 0x39, 0xe3,
+ 0x1c, 0x2c, 0x3a, 0x81, 0xb4, 0x10, 0xf6, 0x21, 0x1c, 0x86, 0xda, 0x3a,
+ 0x01, 0xc8, 0x61, 0x4c, 0xc0, 0xcd, 0x00, 0x3a, 0x3c, 0xa7, 0xd4, 0x6e,
+ 0xae, 0xb7, 0xaa, 0x67, 0xa6, 0xf9, 0x29, 0x68, 0x23, 0x64, 0xf9, 0x89,
+ 0x11, 0x59, 0x1c, 0xe0, 0x49, 0x91, 0xd8, 0xb7, 0xf6, 0x9c, 0xfc, 0xde,
+ 0xcc, 0xa5, 0x8c, 0xec, 0xbb, 0xc6, 0x76, 0x7b, 0xab, 0xf1, 0xbd, 0x39,
+ 0x42, 0xe2, 0x24, 0xf7, 0xad, 0xa3, 0xb7, 0xe4, 0xb7, 0xdf, 0x9c, 0x46,
+ 0x7e, 0xca, 0x22, 0x27, 0xd4, 0x52, 0x30, 0x32, 0x63, 0xf4, 0x3d, 0x0b,
+ 0x5b, 0xf4, 0x1a, 0xbc, 0x56, 0xd3, 0xcd, 0x45, 0x1c, 0xbc, 0x0d, 0x6c,
+ 0xfa, 0x19, 0xee, 0x5a, 0x57, 0x1d, 0xc1, 0x0a, 0xe7, 0x8c, 0x45, 0x84,
+ 0x6e, 0x55, 0x14, 0x33, 0x6d, 0x7c, 0x49, 0x08, 0x72, 0x5f, 0x81, 0xc2,
+ 0xe6, 0x48, 0x16, 0x81, 0xb3, 0x26, 0x75, 0x54, 0xa1, 0x2b, 0x71, 0xf9,
+ 0x3d, 0x1b, 0x16, 0xb9, 0xb0, 0x7b, 0x0e, 0xdb, 0x56, 0x4c, 0xfc, 0xe8,
+ 0x3d, 0xc5, 0x3a, 0x89, 0x0b, 0xbb, 0x83, 0x05, 0x56, 0xf2, 0xd2, 0x56,
+ 0x25, 0x77, 0xa0, 0x07, 0x58, 0x24, 0x86, 0xab, 0x9d, 0x60, 0x2a, 0x0d,
+ 0x76, 0x0d, 0xd2, 0x3b, 0x28, 0x41, 0x6c, 0x41, 0xcc, 0x3f, 0x4f, 0x6e,
+ 0xc9, 0xb6, 0x54, 0x73, 0xcc, 0x8c, 0x17, 0x8d, 0xc4, 0x68, 0x18, 0x37,
+ 0x08, 0x6e, 0x8c, 0x59, 0x6c, 0xd8, 0x17, 0x3b, 0x2a, 0x99, 0x71, 0x36,
+ 0x8d, 0xe4, 0x53, 0x32, 0xa2, 0x16, 0x1c, 0xb7, 0x44, 0xae, 0xf5, 0x40,
+ 0xd3, 0x40, 0xb9, 0x11, 0xab, 0x9b, 0x8d, 0x01, 0x96, 0x87, 0xdc, 0x1b,
+ 0x88, 0x46, 0x4f, 0xcf, 0x0c, 0x9a, 0x52, 0xeb, 0x10, 0x7e, 0xa0, 0x3a,
+ 0x31, 0x33, 0xb3, 0x5d, 0xb9, 0xeb, 0x88, 0x48, 0xdc, 0xbf, 0xcf, 0x46,
+ 0x59, 0x3b, 0xb9, 0x82, 0x70, 0xa2, 0xd5, 0x95, 0x50, 0x95, 0xb1, 0x72,
+ 0xfb, 0x0c, 0xc2, 0x72, 0x8a, 0x19, 0x62, 0x22, 0xe4, 0xa5, 0xab, 0x10,
+ 0x86, 0x28, 0x98, 0x84, 0x33, 0x3c, 0xa0, 0xb0, 0x7c, 0x41, 0x19, 0x66,
+ 0x2b, 0x2f, 0x81, 0x28, 0xa1, 0x45, 0x95, 0x72, 0x61, 0xe1, 0x64, 0x9a,
+ 0x4d, 0x0b, 0x04, 0xbc, 0xb4, 0x4b, 0xc7, 0x67, 0x06, 0x9d, 0x53, 0x4c,
+ 0x8e, 0x08, 0x7e, 0xd9, 0x87, 0x7c, 0x32, 0x0b, 0x99, 0x62, 0x64, 0xdb,
+ 0xb7, 0x3e, 0xa0, 0x27, 0xa5, 0x0a, 0x3a, 0x62, 0x13, 0x84, 0x52, 0xd3,
+ 0x60, 0x06, 0x2b, 0xe9, 0xf8, 0xa7, 0xa0, 0x37, 0x21, 0x0f, 0x73, 0x33,
+ 0x88, 0x77, 0x0f, 0x0a, 0x1c, 0x25, 0x23, 0x78, 0xfb, 0x15, 0x66, 0x6e,
+ 0x21, 0xad, 0x46, 0xa1, 0xc0, 0x4b, 0x21, 0x8e, 0xb1, 0xd8, 0x94, 0x35,
+ 0xf0, 0x91, 0xae, 0xa6, 0x00, 0x19, 0x79, 0x5c, 0x12, 0xab, 0xa6, 0x16,
+ 0x16, 0x05, 0x11, 0x14, 0xae, 0xfe, 0x46, 0x4d, 0xdd, 0x5b, 0xc2, 0xff,
+ 0x9e, 0x96, 0x91, 0x5a, 0x5d, 0x65, 0x7d, 0xb1, 0xae, 0x1a, 0x74, 0x90,
+ 0x25, 0x82, 0x69, 0x3c, 0xb3, 0x74, 0xc1, 0xb9, 0x7d, 0xb1, 0x8a, 0x5f,
+ 0x95, 0x11, 0xb1, 0x1b, 0xc8, 0x81, 0xa1, 0x4f, 0x5d, 0x66, 0x34, 0x80,
+ 0x1a, 0x72, 0xc2, 0xb3, 0x57, 0xff, 0xad, 0x1a, 0xad, 0x45, 0x3c, 0x58,
+ 0x82, 0xb5, 0x04, 0x14, 0x1a, 0x81, 0xe8, 0xc3, 0x09, 0xa7, 0x93, 0x48,
+ 0x71, 0x6b, 0x61, 0x17, 0x00, 0xa2, 0x07, 0x99, 0x63, 0xb6, 0xb4, 0x89,
+ 0xc3, 0x1a, 0x8c, 0xb8, 0x26, 0x00, 0x84, 0x3c, 0x08, 0x84, 0xc1, 0xc3,
+ 0x06, 0xce, 0x2f, 0xab, 0xf6, 0xa8, 0x09, 0x80, 0xa2, 0xc3, 0xe0, 0x26,
+ 0xe3, 0x3a, 0x16, 0x79, 0x6d, 0x08, 0x49, 0xfd, 0x3b, 0x29, 0x5b, 0x96,
+ 0xfc, 0x27, 0x37, 0x98, 0x4f, 0x43, 0x47, 0x1e, 0x16, 0xce, 0x5c, 0x08,
+ 0xca, 0xe4, 0xc1, 0xba, 0x8c, 0xc3, 0x68, 0x96, 0x20, 0xad, 0x11, 0x04,
+ 0x0d, 0x00, 0x68, 0xac, 0x31, 0xf8, 0x21, 0xc0, 0x55, 0x5d, 0x4a, 0xe3,
+ 0x41, 0x2c, 0xa5, 0xf1, 0xb8, 0x92, 0xd1, 0x28, 0x78, 0x59, 0xac, 0x0d,
+ 0x08, 0x6c, 0x56, 0x54, 0x33, 0xd3, 0xe1, 0x4e, 0xf0, 0x01, 0x65, 0xf9,
+ 0xef, 0x3d, 0x51, 0x3f, 0xc4, 0xce, 0x0a, 0xec, 0x81, 0x4c, 0xc3, 0x28,
+ 0x3d, 0x9d, 0xaa, 0x2f, 0x55, 0x1d, 0x2f, 0x6c, 0x68, 0xe3, 0xfb, 0xf9,
+ 0x4a, 0x8d, 0xed, 0x1b, 0x0f, 0xc4, 0x76, 0xd1, 0x8e, 0xe4, 0xeb, 0x87,
+ 0xbc, 0xf0, 0x4d, 0x8b, 0x5c, 0x47, 0xe6, 0xd2, 0x1c, 0x4b, 0x8d, 0x53,
+ 0xf5, 0x25, 0xa2, 0x53, 0xf6, 0x38, 0x4d, 0x98, 0xde, 0xa1, 0xbf, 0x45,
+ 0x26, 0xe1, 0xea, 0x9c, 0x6e, 0xa3, 0xbf, 0xee, 0x06, 0xd7, 0x9c, 0xb5,
+ 0x97, 0x2e, 0x65, 0xca, 0xd4, 0xfd, 0xd4, 0x62, 0x24, 0x0f, 0xd5, 0xeb,
+ 0x79, 0x74, 0xe1, 0x5c, 0xbe, 0xc7, 0x1a, 0x33, 0x50, 0x5f, 0x85, 0xec,
+ 0xfd, 0xcb, 0x8c, 0xe9, 0x5f, 0x62, 0xc0, 0x85, 0x50, 0xe7, 0xc8, 0x34,
+ 0xbd, 0x9e, 0x8d, 0xec, 0x2c, 0x99, 0xcf, 0xd4, 0x1e, 0xdc, 0xfb, 0x47,
+ 0x12, 0x86, 0x53, 0xcf, 0x79, 0x02, 0x43, 0xd2, 0x37, 0x30, 0xbb, 0xfe,
+ 0xb3, 0x85, 0x14, 0x21, 0x88, 0xc7, 0xb6, 0x80, 0x78, 0x50, 0xba, 0xfd,
+ 0xfc, 0x19, 0x85, 0x01, 0x4b, 0x86, 0xc2, 0xbf, 0x16, 0x4d, 0xda, 0xf7,
+ 0xc9, 0xda, 0x77, 0xfe, 0xf8, 0xdc, 0x4f, 0x4b, 0x2d, 0x1c, 0xce, 0x83,
+ 0xbf, 0x58, 0x38, 0x1d, 0xce, 0x2c, 0xe0, 0x62, 0xb9, 0xff, 0xa3, 0xfd,
+ 0xe2, 0x37, 0xca, 0xfc, 0x5a, 0x94, 0x17, 0x44, 0x3b, 0x84, 0x9b, 0xa5,
+ 0x8d, 0x12, 0xb7, 0xa7, 0x88, 0x1f, 0xcd, 0x3a, 0xd0, 0xaa, 0x39, 0x68,
+ 0xe0, 0x10, 0x00, 0x4f, 0x40, 0x24, 0xc1, 0xc2, 0x8e, 0x75, 0xf9, 0x64,
+ 0xe6, 0xf0, 0x58, 0x90, 0x93, 0x8b, 0xf5, 0xa5, 0x5a, 0x9d, 0xab, 0x71,
+ 0xea, 0x59, 0x5a, 0x17, 0x1e, 0x74, 0xa7, 0x0a, 0x18, 0x6f, 0x22, 0x90,
+ 0x08, 0xe6, 0x0c, 0xab, 0x51, 0x40, 0x89, 0xeb, 0x48, 0xd8, 0x61, 0x3c,
+ 0x06, 0x35, 0x11, 0x40, 0x6e, 0x2a, 0x2c, 0x69, 0xdd, 0x60, 0x24, 0x0b,
+ 0xbb, 0xfa, 0xb3, 0x0e, 0x03, 0xff, 0x1a, 0x2d, 0xc6, 0x72, 0x9f, 0x39,
+ 0xd9, 0x6c, 0x6d, 0xbe, 0xb4, 0x72, 0x88, 0x48, 0xc8, 0x3a, 0x7a, 0xb1,
+ 0x68, 0x8c, 0xe7, 0xd7, 0xe7, 0x52, 0xf3, 0x31, 0xb9, 0xf6, 0xc0, 0x4c,
+ 0x2b, 0x07, 0x0f, 0x24, 0xf2, 0xe0, 0x20, 0x51, 0xf4, 0x18, 0xbb, 0xd4,
+ 0x22, 0x2a, 0x85, 0x9d, 0xac, 0xa7, 0x24, 0xe8, 0x9a, 0x2b, 0xef, 0x73,
+ 0x0a, 0xf6, 0x89, 0x84, 0x1c, 0x7f, 0x24, 0x3c, 0x36, 0xfb, 0x70, 0x08,
+ 0xaf, 0xba, 0xa1, 0x6d, 0x99, 0x36, 0x92, 0x51, 0x01, 0xa9, 0x62, 0x80,
+ 0x18, 0x16, 0x59, 0x57, 0x21, 0x3b, 0x91, 0x1b, 0x1d, 0xf4, 0x24, 0x89,
+ 0x5c, 0x36, 0x4e, 0x8e, 0xba, 0x4b, 0x31, 0x91, 0xd0, 0x8e, 0x11, 0xe2,
+ 0x20, 0x1e, 0x86, 0xc6, 0x0f, 0x45, 0xc3, 0x7d, 0xc5, 0xc3, 0x8b, 0x36,
+ 0xa7, 0xc0, 0x19, 0x6c, 0xa0, 0xc4, 0x88, 0xef, 0xb1, 0xcd, 0x69, 0x6e,
+ 0x2f, 0x11, 0xa8, 0xaa, 0x08, 0xc1, 0x16, 0x00, 0x08, 0x3b, 0x8e, 0xf0,
+ 0xa5, 0xb4, 0x38, 0xd5, 0x1f, 0x03, 0x28, 0xa7, 0xc8, 0x71, 0x4f, 0x54,
+ 0x66, 0x63, 0xc0, 0xe7, 0x48, 0x68, 0xea, 0x79, 0xb7, 0x3e, 0x46, 0x90,
+ 0xa4, 0x16, 0x9c, 0x44, 0x89, 0xd5, 0xb7, 0x16, 0xb7, 0xa1, 0x61, 0x7d,
+ 0xb9, 0x13, 0xb8, 0xb4, 0x1e, 0xa9, 0x2f, 0x8e, 0x0f, 0x35, 0xf2, 0x34,
+ 0x3d, 0x6d, 0xeb, 0xde, 0x47, 0x1f, 0x57, 0xb3, 0x8d, 0x30, 0x3a, 0xa5,
+ 0x1f, 0xd5, 0x2d, 0x41, 0x49, 0x4c, 0x23, 0x24, 0x6d, 0x21, 0x50, 0x2b,
+ 0x01, 0x91, 0x92, 0x33, 0x8c, 0x5d, 0x09, 0x95, 0x3e, 0xbc, 0xed, 0x21,
+ 0xce, 0xa9, 0xe7, 0x96, 0xf0, 0xeb, 0x08, 0x7b, 0x68, 0xb8, 0x12, 0x3c,
+ 0x17, 0x42, 0xb2, 0x82, 0x74, 0x18, 0x29, 0x6d, 0x52, 0x82, 0x55, 0xc4,
+ 0x68, 0x38, 0x6d, 0xb4, 0x5b, 0x7c, 0x41, 0x94, 0x84, 0xed, 0x3d, 0x3c,
+ 0x98, 0xf6, 0xf8, 0x60, 0x62, 0x5c, 0x69, 0x65, 0x9c, 0x51, 0xf5, 0x73,
+ 0x9a, 0x91, 0x58, 0x54, 0xb4, 0x5f, 0x31, 0x3a, 0x70, 0x8b, 0x44, 0x75,
+ 0x05, 0x51, 0xa0, 0xf0, 0x55, 0xa7, 0x83, 0xf9, 0xd0, 0xaa, 0xc2, 0x69,
+ 0x85, 0xff, 0xfc, 0x69, 0xa9, 0x51, 0xcb, 0x71, 0x11, 0x89, 0xc4, 0x93,
+ 0xec, 0x02, 0x33, 0xfa, 0xf9, 0x9b, 0xee, 0xf5, 0x3f, 0xdf, 0xf6, 0x6a,
+ 0x0e, 0xd4, 0x64, 0x8e, 0x4b, 0x36, 0x4c, 0x9b, 0x8c, 0x3e, 0xd3, 0x63,
+ 0xbe, 0x76, 0x79, 0x4e, 0x59, 0xce, 0xf4, 0x99, 0x5c, 0x98, 0xdf, 0xd7,
+ 0x1c, 0xe2, 0xa6, 0xe1, 0xb5, 0x5f, 0xd7, 0x7c, 0xe3, 0x7b, 0xf5, 0xc8,
+ 0x70, 0x72, 0x2a, 0x1f, 0x90, 0x76, 0xd8, 0x2e, 0x95, 0xdb, 0xdc, 0x72,
+ 0x95, 0x3d, 0x34, 0x4e, 0xf9, 0x83, 0x4b, 0xc3, 0xfb, 0xad, 0x4e, 0x80,
+ 0x30, 0x9d, 0x5a, 0x93, 0x30, 0x93, 0x6f, 0x3f, 0xf4, 0xe9, 0x8e, 0x0f,
+ 0x7d, 0x84, 0x3a, 0xc4, 0x43, 0x73, 0xf3, 0xf4, 0xdb, 0xc7, 0x5b, 0xbe,
+ 0x6e, 0x06, 0x74, 0x85, 0xbc, 0xaf, 0xa1, 0x53, 0x1d, 0x36, 0x4f, 0x3f,
+ 0xaf, 0x38, 0xb5, 0x75, 0x4c, 0x36, 0xc5, 0x63, 0x4f, 0xa0, 0xaa, 0x13,
+ 0x43, 0x64, 0xcc, 0x41, 0x1a, 0x19, 0xac, 0xba, 0x9d, 0x85, 0xa8, 0x5c,
+ 0xb2, 0x44, 0x9a, 0xe5, 0x1c, 0x21, 0xc4, 0xce, 0xc9, 0xdb, 0x5e, 0xeb,
+ 0x26, 0x9b, 0x3e, 0x66, 0xd9, 0x18, 0xbb, 0x52, 0xea, 0x8e, 0xfc, 0xef,
+ 0x9d, 0x19, 0x4d, 0x42, 0x3c, 0x23, 0x9a, 0x92, 0xa2, 0x93, 0xc2, 0xe7,
+ 0x86, 0x77, 0x88, 0x04, 0x84, 0xe7, 0xb4, 0x88, 0xce, 0x74, 0x0a, 0x67,
+ 0x03, 0x29, 0x1b, 0xea, 0x4b, 0x6c, 0x06, 0x29, 0xad, 0x4e, 0xd4, 0x17,
+ 0xf9, 0x1c, 0x95, 0xf8, 0xc4, 0x97, 0x4d, 0x37, 0xeb, 0x6f, 0x0b, 0x44,
+ 0xc7, 0xb0, 0x7f, 0x71, 0xc9, 0xb3, 0x4a, 0xeb, 0x6f, 0x7b, 0xf9, 0x98,
+ 0x72, 0xb9, 0xf0, 0x95, 0x9a, 0xe2, 0xcd, 0x07, 0xfc, 0xf9, 0x92, 0x85,
+ 0x07, 0x26, 0xff, 0xcd, 0x65, 0xe4, 0xd0, 0x2f, 0x11, 0x34, 0x75, 0x84,
+ 0x39, 0x8d, 0x47, 0x3b, 0xd5, 0xa0, 0x29, 0x32, 0x9e, 0xda, 0x10, 0x44,
+ 0x8a, 0xf1, 0x61, 0x5b, 0x9b, 0x97, 0xc5, 0xe7, 0x09, 0x36, 0x22, 0x68,
+ 0xa5, 0xc9, 0xd2, 0x6a, 0x32, 0xbf, 0x6f, 0xcc, 0xf1, 0xfe, 0x4e, 0xec,
+ 0x8d, 0x88, 0x84, 0x63, 0x02, 0x0f, 0x22, 0x19, 0xb9, 0x2a, 0x83, 0xf9,
+ 0x06, 0xb3, 0x98, 0x0c, 0xc7, 0xc7, 0xf8, 0x28, 0x85, 0x72, 0x64, 0x0f,
+ 0xd1, 0x43, 0x3c, 0xc0, 0x2c, 0x77, 0xa2, 0xcc, 0x24, 0x7b, 0x18, 0x52,
+ 0xfa, 0x20, 0x7c, 0x4a, 0xfb, 0x2c, 0x11, 0xf9, 0xa9, 0x84, 0xb1, 0x34,
+ 0xbd, 0x85, 0xc7, 0x3f, 0x89, 0x8a, 0x2e, 0x31, 0xb4, 0x64, 0xc3, 0x6f,
+ 0x14, 0x71, 0x3d, 0xb9, 0x65, 0xe8, 0x73, 0x23, 0xd2, 0xcf, 0xc0, 0x06,
+ 0x37, 0x2e, 0x38, 0x65, 0x11, 0xb0, 0x04, 0xd6, 0x97, 0xde, 0x7d, 0x7e,
+ 0x3a, 0xd7, 0xdc, 0xbd, 0xa7, 0x23, 0x52, 0x36, 0x9c, 0x61, 0x91, 0x41,
+ 0xc1, 0xdc, 0xec, 0x52, 0x30, 0x5c, 0x7a, 0x8b, 0x78, 0x19, 0x14, 0x0e,
+ 0x27, 0xf0, 0xf2, 0x91, 0xf1, 0x53, 0xf5, 0xa6, 0x1b, 0xc3, 0xe9, 0xaa,
+ 0x53, 0xc6, 0x75, 0x4f, 0x1a, 0xa7, 0x52, 0x00, 0x25, 0x12, 0xba, 0xff,
+ 0x25, 0xf6, 0xc3, 0x21, 0xea, 0xde, 0x87, 0xfb, 0xcb, 0xc6, 0x92, 0x68,
+ 0x1f, 0xa3, 0x8a, 0x74, 0x9e, 0xb2, 0xe4, 0xbf, 0x6e, 0x09, 0x54, 0x63,
+ 0x27, 0xac, 0xae, 0x88, 0xc4, 0xef, 0x21, 0x2a, 0xd8, 0x29, 0xb2, 0xf8,
+ 0x0e, 0x1b, 0x4d, 0x81, 0xaa, 0x31, 0x6d, 0xb2, 0x0f, 0xb8, 0x6c, 0xd6,
+ 0x85, 0xaa, 0x34, 0x31, 0xa8, 0x97, 0x53, 0x17, 0x24, 0x0a, 0x9e, 0xf3,
+ 0x1a, 0x28, 0xb5, 0xf5, 0xce, 0xec, 0x9f, 0x0c, 0x41, 0x98, 0x28, 0x80,
+ 0x1a, 0x36, 0x8e, 0x38, 0x72, 0xd7, 0xe3, 0xf2, 0x9a, 0xbd, 0x97, 0x82,
+ 0x5b, 0x36, 0x4f, 0x37, 0xda, 0x28, 0x1f, 0x93, 0x7d, 0x1f, 0x93, 0x9c,
+ 0xd4, 0x1c, 0xe4, 0x63, 0x2f, 0x7b, 0xc9, 0xf6, 0x99, 0x08, 0x5c, 0xec,
+ 0xaf, 0x95, 0x71, 0x5a, 0xd3, 0x61, 0xb0, 0x9f, 0x09, 0xfb, 0x1f, 0x9c,
+ 0xeb, 0x7d, 0xce, 0x02, 0x70, 0x32, 0x32, 0x89, 0xbc, 0x4c, 0x0b, 0x1f,
+ 0xfa, 0x98, 0xf9, 0x0d, 0x07, 0x95, 0x96, 0x35, 0x4e, 0x49, 0x6c, 0xd4,
+ 0x30, 0xe2, 0x28, 0x3a, 0xb2, 0xbc, 0xc8, 0x7c, 0x62, 0xae, 0x88, 0xb6,
+ 0x30, 0x9a, 0x1c, 0xcd, 0xa7, 0x84, 0xfe, 0xa4, 0x20, 0xa9, 0xe9, 0xbe,
+ 0x7a, 0x56, 0x02, 0x20, 0xe7, 0xa7, 0x1a, 0xfe, 0x39, 0x82, 0x6d, 0x4f,
+ 0x83, 0xaa, 0x0e, 0x2f, 0x38, 0x5e, 0x4e, 0xad, 0xfd, 0xf4, 0x01, 0xb2,
+ 0x10, 0x5c, 0xd7, 0x36, 0xdf, 0xf6, 0x92, 0xd7, 0x19, 0xa6, 0x8e, 0x6b,
+ 0xef, 0xaf, 0xa5, 0x69, 0xae, 0xb5, 0x52, 0xdd, 0x7c, 0xcb, 0x30, 0x3a,
+ 0x0e, 0xf6, 0xa6, 0x32, 0x43, 0x04, 0xa9, 0x0d, 0x31, 0x00, 0xe2, 0xd7,
+ 0x88, 0xf0, 0x5e, 0xa0, 0x81, 0x54, 0x9c, 0x13, 0x25, 0x44, 0xbd, 0xe7,
+ 0xb7, 0x9c, 0xe4, 0x45, 0x29, 0xf4, 0x64, 0x71, 0xf6, 0x60, 0xd4, 0xa8,
+ 0xd2, 0x98, 0x7f, 0x15, 0x02, 0x0a, 0xaa, 0xcd, 0x2f, 0x2d, 0xed, 0x1a,
+ 0x56, 0x76, 0x53, 0x7c, 0xc8, 0x36, 0xa8, 0x2c, 0x8d, 0xd2, 0xe6, 0x10,
+ 0x7a, 0x35, 0x18, 0x2f, 0xab, 0xee, 0x11, 0x8e, 0xfe, 0x0e, 0x32, 0xd0,
+ 0x1e, 0x82, 0xa9, 0x54, 0x79, 0xcb, 0x5e, 0x6c, 0x63, 0x81, 0x35, 0xf3,
+ 0x68, 0xba, 0x2a, 0xef, 0x94, 0xd2, 0x75, 0xde, 0x8b, 0x23, 0x44, 0x60,
+ 0x44, 0x07, 0x4b, 0x05, 0x35, 0x62, 0x84, 0x90, 0x42, 0x8f, 0xea, 0xef,
+ 0xc9, 0x66, 0xa2, 0x5f, 0x1d, 0xd1, 0x5f, 0x32, 0x0c, 0xa4, 0xdd, 0x6d,
+ 0xc0, 0xaa, 0xc4, 0x8a, 0xb1, 0xec, 0x58, 0x6b, 0x92, 0xed, 0xc0, 0x00,
+ 0x42, 0xd1, 0x68, 0x18, 0x3a, 0x43, 0x1c, 0x31, 0x76, 0x12, 0xdb, 0x1b,
+ 0x29, 0xc8, 0x82, 0x55, 0xe7, 0x18, 0xdd, 0x18, 0x75, 0xe6, 0x9a, 0xc0,
+ 0x7b, 0x25, 0x74, 0xfb, 0xe1, 0x81, 0x8a, 0x90, 0x29, 0x66, 0x8c, 0x32,
+ 0x04, 0xbd, 0x38, 0x1f, 0xcf, 0xe3, 0xa9, 0x94, 0x0f, 0x58, 0x70, 0x41,
+ 0x2c, 0x5f, 0x7c, 0xd8, 0x90, 0x59, 0xe7, 0xb9, 0x0e, 0xa7, 0xdd, 0xe9,
+ 0x2b, 0xde, 0xd9, 0x43, 0xf3, 0xfa, 0xa5, 0x84, 0xf2, 0x9e, 0x3d, 0x35,
+ 0xc2, 0x75, 0xbc, 0xae, 0x0e, 0xa1, 0xc9, 0xde, 0xd7, 0x66, 0xc8, 0x97,
+ 0x14, 0xea, 0x04, 0xe3, 0x09, 0x3b, 0xb9, 0x36, 0xb3, 0xc3, 0x3a, 0xb5,
+ 0x1f, 0xfd, 0xea, 0x31, 0x35, 0xf3, 0x31, 0x4f, 0x57, 0xf9, 0xd2, 0xd3,
+ 0xf2, 0xb6, 0xb7, 0xba, 0x72, 0x46, 0x2f, 0xd7, 0x4c, 0xaf, 0xf4, 0xa7,
+ 0xa7, 0xb2, 0xa1, 0x91, 0x7d, 0x04, 0x54, 0xa1, 0x68, 0x99, 0xf2, 0x8b,
+ 0x7c, 0x3c, 0xb3, 0x98, 0x12, 0x3c, 0x67, 0x7a, 0x3d, 0x01, 0x4c, 0xa6,
+ 0x93, 0x38, 0xb5, 0xf7, 0xb5, 0x76, 0x86, 0x01, 0x83, 0xea, 0x7d, 0x16,
+ 0x3b, 0x0f, 0x9b, 0x31, 0xaa, 0x4d, 0x24, 0xcd, 0xbe, 0x4a, 0xf4, 0x4a,
+ 0xd6, 0xfa, 0x92, 0x66, 0xa1, 0x70, 0x69, 0x5c, 0xb9, 0x9e, 0x65, 0xa7,
+ 0xd3, 0xa5, 0x25, 0xe3, 0xbc, 0xb2, 0x85, 0x94, 0x01, 0x4f, 0xb2, 0x49,
+ 0x9e, 0x51, 0xc1, 0x14, 0x1b, 0x77, 0x13, 0x63, 0x28, 0x02, 0xce, 0x6b,
+ 0x0e, 0xde, 0x32, 0x09, 0x12, 0xbb, 0xa0, 0xd8, 0x82, 0xc8, 0xc8, 0x8c,
+ 0x0a, 0xeb, 0x6f, 0x81, 0x39, 0x07, 0x46, 0x93, 0x56, 0xa1, 0x84, 0x00,
+ 0x3d, 0x39, 0xde, 0x34, 0xa2, 0x81, 0x2a, 0xfa, 0xe5, 0x0e, 0xf8, 0xe7,
+ 0x30, 0xcd, 0x76, 0xf2, 0xa3, 0xd4, 0xba, 0x06, 0x57, 0xb5, 0x2d, 0x0f,
+ 0x13, 0x8a, 0x6f, 0xb1, 0xb5, 0x2f, 0xf0, 0x40, 0xfc, 0x92, 0xd9, 0x54,
+ 0x95, 0xd5, 0x25, 0x30, 0x74, 0x65, 0xf5, 0x9b, 0xc3, 0x6c, 0xa5, 0x0c,
+ 0xba, 0x88, 0x9b, 0x43, 0xd4, 0xbe, 0x44, 0x0e, 0x35, 0x8b, 0xe3, 0xf2,
+ 0x9f, 0x23, 0xf1, 0x79, 0xe6, 0xb9, 0x96, 0xcd, 0xe4, 0x8d, 0x08, 0xad,
+ 0x01, 0x82, 0x0b, 0x0a, 0xc2, 0x27, 0x1c, 0xd5, 0x82, 0x27, 0x85, 0x4b,
+ 0xf0, 0x8b, 0xcb, 0x97, 0x55, 0xd3, 0xa3, 0x19, 0x4b, 0x4b, 0x78, 0xa1,
+ 0x58, 0x1d, 0x85, 0x01, 0xfb, 0xe7, 0xe8, 0xa7, 0x1b, 0x1b, 0x15, 0xbb,
+ 0x65, 0x33, 0x8a, 0xe2, 0xba, 0x51, 0x2b, 0x8a, 0xc3, 0xda, 0x90, 0x4f,
+ 0x11, 0x2f, 0xed, 0x42, 0x5e, 0x33, 0xdf, 0xfd, 0xe6, 0x3f, 0x1e, 0x31,
+ 0x82, 0x06, 0x0d, 0x3a, 0x67, 0x5f, 0xf2, 0x2c, 0x3b, 0xa3, 0xdb, 0x73,
+ 0x6a, 0x45, 0x29, 0x9a, 0x3a, 0xb8, 0xf0, 0x69, 0xc6, 0x49, 0x0f, 0xf0,
+ 0xfc, 0xbf, 0xd0, 0x52, 0x36, 0x0f, 0x03, 0x3d, 0xc6, 0xb1, 0xe7, 0xed,
+ 0x1a, 0x54, 0xab, 0x60, 0xc8, 0x00, 0x1b, 0x08, 0xb0, 0xe7, 0x98, 0x40,
+ 0x5d, 0x51, 0x8e, 0xc6, 0x8c, 0x3f, 0x82, 0xb4, 0x3d, 0x6a, 0x7e, 0x8a,
+ 0x98, 0xaa, 0x5d, 0x85, 0x18, 0xb0, 0x05, 0x4c, 0x72, 0x0a, 0x62, 0x3c,
+ 0xe9, 0xf2, 0x24, 0x96, 0x89, 0x32, 0x1f, 0x77, 0x9f, 0x61, 0xc2, 0x27,
+ 0x08, 0x7b, 0xf4, 0x08, 0x4b, 0x04, 0x73, 0x9e, 0xa9, 0x0d, 0x14, 0x0e,
+ 0xc2, 0x6a, 0x38, 0xab, 0xa7, 0x56, 0xf7, 0x7a, 0x46, 0x30, 0xa4, 0x98,
+ 0xe9, 0x13, 0x89, 0x55, 0x4c, 0xae, 0xfe, 0x79, 0x75, 0xdd, 0x7b, 0x95,
+ 0x34, 0xee, 0x21, 0x96, 0xb1, 0x8d, 0xf1, 0xb4, 0xcf, 0x8e, 0x99, 0xbc,
+ 0x8e, 0xd6, 0x52, 0x7a, 0x2a, 0x21, 0x70, 0xb3, 0x44, 0x6c, 0x38, 0x05,
+ 0x93, 0xa8, 0x66, 0xda, 0x0b, 0xcf, 0xb3, 0x1d, 0xa8, 0xc4, 0x3c, 0x43,
+ 0x08, 0x20, 0x63, 0xc8, 0x7c, 0xb9, 0xd3, 0xfb, 0x10, 0x01, 0x4c, 0x0e,
+ 0x05, 0xc0, 0xc4, 0x1c, 0x1e, 0x13, 0x84, 0xe5, 0x5a, 0x4f, 0x93, 0x9f,
+ 0xde, 0x5d, 0xba, 0x03, 0xcb, 0x55, 0x53, 0xa0, 0x63, 0x59, 0x1c, 0x9b,
+ 0xb1, 0x88, 0x1f, 0x0e, 0x39, 0x0a, 0xc5, 0x7d, 0x24, 0xeb, 0x1b, 0x41,
+ 0xae, 0x36, 0x6f, 0xa3, 0x9a, 0x97, 0x69, 0x69, 0x0d, 0x5d, 0x4c, 0x0c,
+ 0x4b, 0x2e, 0xac, 0x05, 0xbb, 0xff, 0xae, 0x81, 0x10, 0xff, 0x8d, 0xe4,
+ 0x7b, 0x44, 0xc9, 0xaf, 0xac, 0xf5, 0xaf, 0xab, 0x2b, 0x89, 0xa1, 0x81,
+ 0xde, 0xcb, 0xde, 0xab, 0xde, 0xeb, 0x6b, 0x77, 0x7d, 0xfd, 0xab, 0xb7,
+ 0xd8, 0xf8, 0x86, 0x79, 0xec, 0x37, 0x2c, 0x43, 0xfc, 0xac, 0x08, 0xd7,
+ 0x4b, 0xf6, 0xdf, 0x7a, 0x07, 0x33, 0x86, 0x70, 0xf9, 0x3b, 0xd5, 0x21,
+ 0x7c, 0x36, 0x63, 0xa7, 0x10, 0xd7, 0xf9, 0x44, 0xe0, 0x22, 0x46, 0xdc,
+ 0x27, 0x45, 0x46, 0x45, 0x63, 0x85, 0x9a, 0x0a, 0xc1, 0xb7, 0xac, 0x85,
+ 0x0f, 0xae, 0x7d, 0x6f, 0x7a, 0x54, 0xb4, 0x8d, 0x7c, 0x92, 0xfe, 0xfe,
+ 0x3b, 0x97, 0x90, 0xfb, 0x9e, 0xb0, 0x5a, 0x50, 0x85, 0xba, 0xe7, 0x52,
+ 0x4b, 0x99, 0x61, 0x2d, 0xfd, 0xa9, 0x07, 0xd2, 0x86, 0x52, 0x64, 0xad,
+ 0x8f, 0xb6, 0x0c, 0x4f, 0x50, 0xb1, 0x61, 0xa1, 0xd3, 0x1a, 0x2b, 0xb8,
+ 0x43, 0x3d, 0x47, 0x10, 0x87, 0x3e, 0x60, 0x10, 0x6a, 0x51, 0x5a, 0x43,
+ 0x58, 0xd8, 0xf7, 0xb9, 0x89, 0x54, 0x93, 0x91, 0x0a, 0x6c, 0xbf, 0xc2,
+ 0x5c, 0xb7, 0x21, 0xa0, 0x8b, 0x5b, 0xd7, 0x5f, 0x4d, 0x4c, 0xfb, 0xab,
+ 0x1a, 0x15, 0x33, 0x95, 0x91, 0x56, 0x6a, 0x8d, 0xb9, 0xb8, 0x6d, 0xa8,
+ 0x05, 0x43, 0x29, 0x87, 0xc0, 0x6c, 0xc1, 0xd6, 0x59, 0xdd, 0xd5, 0xb0,
+ 0x77, 0xc0, 0xee, 0x46, 0xd1, 0xf0, 0x36, 0x7d, 0xdf, 0xaf, 0x32, 0x0b,
+ 0xef, 0x73, 0x09, 0x84, 0x27, 0x42, 0xce, 0x0c, 0xd8, 0xee, 0x00, 0x34,
+ 0x4c, 0xa3, 0xe9, 0x6c, 0x28, 0xf6, 0xbf, 0x0a, 0x8e, 0x0f, 0x9b, 0xcb,
+ 0x4a, 0x37, 0x7a, 0xcb, 0x02, 0xd5, 0x5d, 0x4d, 0xc1, 0x1c, 0x51, 0xf8,
+ 0x07, 0xa9, 0x44, 0xa7, 0x9b, 0x87, 0xfc, 0x00, 0x63, 0xfd, 0x20, 0x07,
+ 0xab, 0x42, 0x3e, 0x17, 0xa1, 0xa7, 0x43, 0xe4, 0x02, 0x70, 0x71, 0x2a,
+ 0x33, 0x06, 0x7d, 0xc5, 0xca, 0x61, 0xde, 0x64, 0xea, 0x02, 0x79, 0x6e,
+ 0x49, 0x59, 0x91, 0x5e, 0x58, 0xf5, 0x56, 0xec, 0xa7, 0x6e, 0xbe, 0xbe,
+ 0x64, 0x01, 0x19, 0xf4, 0x53, 0x1f, 0x88, 0x9f, 0x1a, 0x35, 0x7e, 0xb2,
+ 0xee, 0x07, 0x07, 0x6d, 0x35, 0xe2, 0xd3, 0x0c, 0x6c, 0xf4, 0xde, 0x0b,
+ 0xa8, 0xb0, 0xd2, 0x1f, 0x53, 0x98, 0x17, 0xdf, 0xd3, 0x91, 0x14, 0x04,
+ 0x67, 0xda, 0xad, 0x8d, 0xb1, 0xc0, 0xac, 0x51, 0x8e, 0x3b, 0xa5, 0x00,
+ 0xe5, 0xaa, 0x11, 0x0b, 0xf7, 0x3d, 0xa5, 0x12, 0xb1, 0x8d, 0x26, 0x22,
+ 0xf0, 0xa3, 0x4a, 0x55, 0x51, 0x61, 0xd7, 0xed, 0x9d, 0x52, 0xf6, 0xdc,
+ 0x7c, 0x6e, 0xb2, 0x05, 0x6d, 0x8a, 0xca, 0x20, 0x25, 0x3b, 0xd8, 0x92,
+ 0xe2, 0x37, 0x19, 0x61, 0x32, 0x82, 0x72, 0x84, 0x61, 0x05, 0x29, 0x32,
+ 0x45, 0x85, 0x7a, 0xee, 0xb2, 0x25, 0xff, 0x35, 0xcb, 0x99, 0x35, 0x41,
+ 0x69, 0x4d, 0xec, 0xda, 0x68, 0xc3, 0x8f, 0x50, 0x89, 0x80, 0x24, 0xc0,
+ 0xa4, 0x02, 0x5c, 0x7f, 0xad, 0x43, 0x7f, 0xf9, 0x0d, 0x5e, 0x5b, 0xe0,
+ 0xe2, 0x78, 0x9e, 0xa8, 0x2d, 0x91, 0x8b, 0x82, 0xd7, 0x7a, 0x1e, 0xc8,
+ 0xae, 0x35, 0x4e, 0xfb, 0x35, 0xb7, 0xf5, 0xe6, 0x05, 0x16, 0x62, 0x64,
+ 0xe1, 0xfa, 0xda, 0x53, 0x56, 0x62, 0xf6, 0xf4, 0xb8, 0x58, 0xdb, 0x20,
+ 0x60, 0x57, 0x40, 0x66, 0x00, 0x98, 0x5b, 0xff, 0x27, 0x08, 0x14, 0xdc,
+ 0x88, 0xb8, 0x0b, 0xfb, 0xf7, 0x59, 0xff, 0x3d, 0x32, 0xbe, 0xa5, 0xdc,
+ 0x80, 0xa7, 0x88, 0x17, 0xb4, 0x88, 0x39, 0xe8, 0xb4, 0x06, 0xb3, 0xfc,
+ 0xe6, 0xd3, 0xe9, 0x13, 0x48, 0x7b, 0xfc, 0xd9, 0x86, 0xf9, 0x97, 0x0e,
+ 0x23, 0x81, 0xb7, 0xfe, 0xb8, 0xf8, 0x92, 0xe2, 0x46, 0xb0, 0x37, 0xa3,
+ 0x01, 0x5d, 0xb2, 0x03, 0x5d, 0x50, 0x57, 0x44, 0x88, 0x54, 0x9c, 0xc4,
+ 0x0a, 0x26, 0xc8, 0xa3, 0x0c, 0xb3, 0x75, 0x3c, 0x5f, 0x45, 0xa4, 0x68,
+ 0x1e, 0x6f, 0xd9, 0xa2, 0xc3, 0x61, 0xa9, 0xc9, 0x32, 0x87, 0xe2, 0x43,
+ 0x7a, 0x12, 0xc7, 0x45, 0x64, 0x0e, 0x93, 0x60, 0x0a, 0x09, 0xd6, 0x05,
+ 0x44, 0x1d, 0xe4, 0xa3, 0xf3, 0x98, 0x43, 0xa9, 0xb1, 0xb0, 0xa7, 0x8b,
+ 0xb9, 0x3e, 0x49, 0xda, 0xe6, 0xa8, 0x2d, 0x78, 0xed, 0xf0, 0xf0, 0x2d,
+ 0xa5, 0x84, 0xa0, 0x9d, 0x31, 0x92, 0xc5, 0xfd, 0x09, 0xc3, 0x4b, 0x27,
+ 0x89, 0x7e, 0xa6, 0xe9, 0xe3, 0xf2, 0x34, 0x31, 0x93, 0x43, 0x9b, 0x55,
+ 0x8b, 0xb0, 0x49, 0xe7, 0xbd, 0xc4, 0xaf, 0x4d, 0x29, 0xfe, 0x0a, 0x07,
+ 0xbe, 0x53, 0x60, 0x14, 0x8e, 0xdc, 0xd0, 0x46, 0x6c, 0x81, 0xfc, 0xe3,
+ 0xb2, 0x67, 0xee, 0xb1, 0xcc, 0x19, 0x25, 0x27, 0xd8, 0x21, 0x43, 0x75,
+ 0xcf, 0x99, 0x52, 0x10, 0x08, 0x61, 0xce, 0x51, 0xe6, 0x3c, 0x8a, 0x68,
+ 0x2e, 0x33, 0x7f, 0xab, 0x2b, 0x20, 0x03, 0x99, 0x96, 0xb8, 0xd8, 0x44,
+ 0x3b, 0xf1, 0x5e, 0x31, 0xaf, 0xfd, 0x84, 0x72, 0x66, 0xb8, 0x12, 0xe7,
+ 0xb8, 0x80, 0xec, 0x87, 0x67, 0x6f, 0x42, 0x8f, 0x7e, 0x4a, 0x48, 0x0b,
+ 0x98, 0x29, 0xa4, 0x10, 0xd0, 0x88, 0x9e, 0x7c, 0x25, 0x08, 0x64, 0x6c,
+ 0xce, 0x96, 0x44, 0xf5, 0xc0, 0xbd, 0xf3, 0xbb, 0xc6, 0xb8, 0x68, 0x08,
+ 0xe8, 0xef, 0x7d, 0x31, 0x1c, 0x90, 0xc4, 0x43, 0x3e, 0x06, 0x23, 0x85,
+ 0x61, 0xae, 0x41, 0x3a, 0xbc, 0x2b, 0x26, 0x46, 0x8f, 0x1a, 0x71, 0xc1,
+ 0x60, 0x90, 0x52, 0x62, 0x73, 0xa4, 0x6a, 0x49, 0x42, 0x0b, 0x83, 0xac,
+ 0xcc, 0x27, 0xa9, 0x60, 0x0f, 0x41, 0x31, 0x25, 0x23, 0x21, 0x18, 0xc5,
+ 0xae, 0x98, 0xbc, 0x47, 0x1c, 0x48, 0xd3, 0xfc, 0x53, 0x88, 0xed, 0x11,
+ 0xf1, 0xc4, 0x39, 0xd6, 0x76, 0xfa, 0x1c, 0x86, 0x4f, 0x0a, 0xc4, 0xc2,
+ 0xf9, 0x25, 0x63, 0x21, 0x7a, 0x91, 0x17, 0x4c, 0xf4, 0x2d, 0x02, 0x51,
+ 0xcd, 0x5f, 0x5d, 0x09, 0xff, 0x0c, 0x8c, 0x8a, 0xa2, 0x8b, 0xcc, 0xc2,
+ 0x3a, 0xd6, 0x0a, 0x3f, 0x1f, 0x15, 0xd5, 0xaa, 0x0c, 0x44, 0x52, 0x9e,
+ 0x11, 0x82, 0xe8, 0x83, 0x92, 0x15, 0x09, 0x41, 0xcd, 0xec, 0xb6, 0xdc,
+ 0xc1, 0xcd, 0x25, 0x1a, 0x6e, 0xa2, 0xcc, 0x34, 0x3e, 0x3f, 0x39, 0x3c,
+ 0x58, 0xf6, 0x0a, 0x3d, 0x92, 0x8c, 0x80, 0x1f, 0xa0, 0x3c, 0xa0, 0xc5,
+ 0x90, 0x81, 0xda, 0x58, 0x4d, 0xf3, 0xda, 0x84, 0x70, 0x49, 0xbf, 0xe2,
+ 0xad, 0x8c, 0xcb, 0x15, 0x17, 0x50, 0x09, 0x65, 0x5f, 0x8f, 0xd2, 0xbb,
+ 0x1c, 0x44, 0xba, 0xf2, 0x64, 0x03, 0x7d, 0x0c, 0xb1, 0x28, 0x4d, 0x44,
+ 0x65, 0x8c, 0xbb, 0x85, 0x90, 0xbb, 0xfa, 0x2c, 0x22, 0x3a, 0x9a, 0xfa,
+ 0x6e, 0x85, 0xd3, 0xcd, 0x63, 0x33, 0x62, 0xd1, 0x7f, 0x22, 0xb3, 0x87,
+ 0x30, 0xe9, 0x7c, 0x3a, 0x84, 0x92, 0x30, 0x7c, 0x2a, 0x7d, 0xd5, 0xf9,
+ 0xf9, 0x35, 0x02, 0x53, 0xe4, 0xbf, 0x67, 0x10, 0xfe, 0x49, 0x1f, 0x45,
+ 0x24, 0xe3, 0x7b, 0x4f, 0x51, 0x8c, 0xce, 0x58, 0xcd, 0x72, 0x22, 0x7a,
+ 0x80, 0x63, 0x18, 0xda, 0x24, 0x88, 0xd6, 0x18, 0x0f, 0x01, 0xe1, 0xad,
+ 0x91, 0x9d, 0x71, 0xd1, 0x07, 0xc3, 0x5c, 0xcd, 0x7a, 0x63, 0xd9, 0x16,
+ 0xfd, 0xd6, 0x39, 0x73, 0xae, 0xbc, 0xc6, 0x75, 0xe4, 0x04, 0xf7, 0xd8,
+ 0xf2, 0xd3, 0xf2, 0x40, 0xa5, 0x0c, 0x35, 0xd1, 0x94, 0x67, 0x9f, 0x06,
+ 0x99, 0x52, 0x45, 0x2f, 0x0b, 0x6c, 0xeb, 0xf8, 0x09, 0xa3, 0x07, 0x52,
+ 0x5b, 0x9f, 0x18, 0x96, 0x07, 0x3b, 0x10, 0x96, 0x42, 0xb6, 0xa4, 0xaf,
+ 0xbc, 0x91, 0x9e, 0xed, 0x26, 0x50, 0x30, 0x64, 0x92, 0x16, 0x6c, 0xdf,
+ 0x20, 0x5d, 0xda, 0xd7, 0xef, 0xbf, 0xe6, 0x4f, 0x6f, 0x6e, 0x4d, 0xe3,
+ 0x27, 0x0d, 0xd5, 0xd6, 0x77, 0x28, 0x55, 0x7d, 0xbf, 0x00, 0x30, 0x09,
+ 0x67, 0xa0, 0x85, 0x33, 0x10, 0xad, 0x9d, 0x96, 0xfc, 0x68, 0xda, 0x1b,
+ 0x06, 0xae, 0x71, 0x23, 0x59, 0x61, 0x15, 0x4f, 0x23, 0x05, 0x7b, 0x39,
+ 0xcf, 0x02, 0x8a, 0x5e, 0xdc, 0x9a, 0xc9, 0x76, 0xd5, 0xcb, 0xa6, 0x92,
+ 0xd5, 0xc8, 0xf6, 0x1c, 0x35, 0xeb, 0xce, 0x88, 0xb3, 0x4e, 0x65, 0x91,
+ 0x9a, 0x58, 0xe9, 0x8d, 0xe2, 0x32, 0x6e, 0x8c, 0x28, 0xfc, 0x1e, 0x0b,
+ 0xc1, 0x95, 0x4b, 0x17, 0x83, 0xfd, 0x84, 0x9a, 0x66, 0x68, 0xb2, 0xdc,
+ 0x15, 0x8b, 0x25, 0xd6, 0xc8, 0x1e, 0x17, 0x53, 0xcf, 0x29, 0x62, 0x7d,
+ 0x22, 0x71, 0x39, 0x38, 0x1a, 0x7f, 0x64, 0xc5, 0xad, 0x0d, 0xdc, 0xd6,
+ 0x68, 0xcf, 0xc4, 0xc0, 0x29, 0x15, 0x37, 0x0f, 0x1c, 0xe7, 0xce, 0x68,
+ 0x0a, 0x04, 0x12, 0x9a, 0x0e, 0x52, 0xca, 0xb9, 0x6c, 0x27, 0x57, 0x20,
+ 0x0f, 0x69, 0xea, 0x84, 0x70, 0x80, 0xa7, 0x07, 0x29, 0x51, 0x4f, 0x09,
+ 0xa8, 0x58, 0xcb, 0x67, 0xc0, 0x71, 0x4e, 0x46, 0x59, 0x29, 0x2d, 0xce,
+ 0x4d, 0x26, 0x87, 0x8f, 0xf9, 0xd9, 0xcb, 0xb6, 0x55, 0x36, 0xa8, 0xe4,
+ 0xcd, 0x98, 0xec, 0xa5, 0xc4, 0xbe, 0xcc, 0xbe, 0x1c, 0x58, 0xc8, 0x1d,
+ 0x50, 0x7c, 0x71, 0x20, 0xb0, 0x65, 0x38, 0xab, 0xb7, 0x82, 0x4e, 0xed,
+ 0xb2, 0x90, 0x1f, 0x04, 0x79, 0xc7, 0xc5, 0x81, 0x54, 0x5e, 0x8f, 0x26,
+ 0x18, 0xa8, 0x53, 0xd8, 0xa4, 0x02, 0x97, 0x02, 0x0d, 0x06, 0xb9, 0x0d,
+ 0xd9, 0x74, 0x42, 0x86, 0x95, 0xb2, 0x98, 0x4d, 0xfa, 0x19, 0x56, 0x44,
+ 0xf4, 0x8c, 0x9f, 0x9f, 0x60, 0x66, 0xa0, 0x74, 0xbd, 0xe1, 0x63, 0xfa,
+ 0x44, 0x56, 0x0b, 0x2a, 0xf4, 0xee, 0x97, 0x8a, 0xd3, 0x36, 0x53, 0xac,
+ 0xb1, 0xc2, 0x7a, 0x1c, 0xaf, 0xce, 0x1c, 0x60, 0xa5, 0xd5, 0x95, 0x4e,
+ 0x4d, 0x2a, 0x3a, 0x2a, 0x87, 0x8d, 0xd3, 0x44, 0x69, 0x8a, 0x0b, 0xba,
+ 0x58, 0x16, 0x12, 0x11, 0x1e, 0xbe, 0xc6, 0x2b, 0xa7, 0xa9, 0x4b, 0xe7,
+ 0x71, 0x42, 0x2f, 0xa2, 0x67, 0x7b, 0x0b, 0x43, 0xec, 0x98, 0xd1, 0xa1,
+ 0x3f, 0x95, 0x37, 0xaa, 0xa9, 0xb7, 0x99, 0x25, 0x95, 0xa6, 0xe0, 0x08,
+ 0x50, 0xd9, 0x0a, 0x6a, 0x58, 0x80, 0xee, 0x34, 0x40, 0xf9, 0x02, 0x40,
+ 0x9b, 0x5e, 0xf0, 0x3e, 0x87, 0xaf, 0x16, 0x11, 0xc9, 0x7c, 0x49, 0x8d,
+ 0xcc, 0x33, 0x90, 0xf0, 0x45, 0x61, 0xeb, 0x85, 0xca, 0x0f, 0xa6, 0x84,
+ 0x6b, 0x84, 0x70, 0xb4, 0xd6, 0xfb, 0xd4, 0xc6, 0x01, 0x91, 0x55, 0xc7,
+ 0x8e, 0x3b, 0x42, 0x8b, 0x58, 0x7d, 0x58, 0x4b, 0x5e, 0x00, 0x20, 0x8b,
+ 0xab, 0xa2, 0x19, 0x16, 0x01, 0x3f, 0xd9, 0x61, 0x40, 0xdd, 0xc9, 0xf7,
+ 0x0a, 0x16, 0xbd, 0x59, 0x0f, 0xcc, 0x6c, 0x33, 0x36, 0x44, 0x68, 0xf7,
+ 0x52, 0x3c, 0x6f, 0x99, 0x15, 0x22, 0x64, 0x42, 0xf2, 0x0b, 0xc8, 0xfe,
+ 0x4e, 0xb8, 0xcf, 0x1d, 0x86, 0x17, 0xd9, 0x78, 0xd3, 0x9a, 0xac, 0x12,
+ 0x84, 0x6e, 0x86, 0x64, 0x58, 0x48, 0xea, 0x90, 0xcf, 0x94, 0x22, 0xa4,
+ 0x26, 0xfc, 0x11, 0x8f, 0xa4, 0x2f, 0xa8, 0x8c, 0x1e, 0x6d, 0x63, 0xf4,
+ 0xeb, 0x36, 0xb3, 0x48, 0x29, 0x8e, 0x84, 0x2a, 0x1c, 0x95, 0xf7, 0x44,
+ 0xfb, 0x6e, 0x71, 0xab, 0x60, 0xb3, 0x59, 0xa6, 0xb4, 0x32, 0x9d, 0xc8,
+ 0x98, 0x08, 0x50, 0xc2, 0x5f, 0x64, 0xad, 0xec, 0xaf, 0x66, 0x5f, 0x29,
+ 0x4c, 0x89, 0x17, 0x21, 0x2e, 0x20, 0x0d, 0xca, 0x5a, 0xba, 0xff, 0xd2,
+ 0xb9, 0xbe, 0x7e, 0x79, 0x79, 0x75, 0x0d, 0x1c, 0x64, 0x94, 0x24, 0x96,
+ 0xd8, 0x92, 0x75, 0x7e, 0xeb, 0x1f, 0xf2, 0x82, 0x8d, 0x64, 0x4d, 0x3e,
+ 0xae, 0x81, 0x6d, 0x7a, 0x75, 0x65, 0x75, 0x45, 0xf0, 0x05, 0xbf, 0xd0,
+ 0x24, 0xa1, 0x31, 0x19, 0xdf, 0x61, 0x7b, 0x69, 0xa6, 0x4b, 0xf5, 0xd1,
+ 0xf5, 0xed, 0xab, 0x8b, 0xcb, 0x7f, 0xf4, 0xce, 0x75, 0x17, 0x03, 0x74,
+ 0x08, 0x4f, 0x60, 0xaf, 0xcc, 0xa8, 0x58, 0x29, 0x89, 0x85, 0x29, 0x8a,
+ 0x5f, 0x13, 0x03, 0x6a, 0xa2, 0x4e, 0xf9, 0xd5, 0x15, 0x15, 0x16, 0x39,
+ 0x2a, 0x06, 0xac, 0x85, 0x52, 0xc9, 0x3e, 0xab, 0xc9, 0x90, 0x97, 0x81,
+ 0xb6, 0xda, 0x49, 0x44, 0x6b, 0xa8, 0xac, 0x1c, 0xf0, 0x1b, 0xa7, 0xe5,
+ 0x5b, 0xe8, 0x86, 0x4a, 0x9f, 0xec, 0xfe, 0xb4, 0x11, 0xaf, 0x6a, 0x1b,
+ 0x4b, 0x56, 0x9d, 0xec, 0x14, 0x69, 0xa5, 0x62, 0xf7, 0xb7, 0x91, 0x4d,
+ 0xd0, 0x88, 0x55, 0x0c, 0x14, 0xaa, 0xad, 0x2e, 0x07, 0xa6, 0xc3, 0x0d,
+ 0x39, 0xf2, 0x94, 0x4a, 0xb7, 0x48, 0xe5, 0x70, 0xa8, 0xa1, 0x49, 0x45,
+ 0x82, 0xcd, 0x61, 0x35, 0x01, 0x4f, 0x94, 0x00, 0xa7, 0xd0, 0xd1, 0x28,
+ 0xe2, 0x9f, 0x6d, 0x2d, 0xc6, 0xdb, 0x9c, 0x4c, 0xec, 0x7b, 0x77, 0xaa,
+ 0x51, 0x83, 0x73, 0x62, 0x1a, 0x05, 0xf2, 0x5a, 0x67, 0xcc, 0xbb, 0x91,
+ 0xa3, 0x1c, 0x81, 0x6a, 0x1c, 0x2d, 0x39, 0x02, 0x1b, 0x39, 0x3e, 0x09,
+ 0x5a, 0xb2, 0x91, 0x22, 0xee, 0xb0, 0xf4, 0xba, 0x3e, 0x45, 0x88, 0xe0,
+ 0xee, 0x59, 0x90, 0x93, 0xd1, 0x9a, 0x15, 0x9b, 0x6a, 0x1c, 0x02, 0x5a,
+ 0x60, 0xbb, 0xf8, 0x4e, 0xc4, 0x67, 0xe7, 0x95, 0xbb, 0x80, 0x06, 0x5a,
+ 0x5e, 0x21, 0x9a, 0x28, 0x34, 0x4b, 0x21, 0xa5, 0x51, 0x1d, 0xe3, 0xb9,
+ 0xae, 0x0b, 0x10, 0xe8, 0x0c, 0x6b, 0x1b, 0x28, 0x6c, 0xe5, 0xde, 0x78,
+ 0xd0, 0x2a, 0x6e, 0x5b, 0x2f, 0x01, 0xb6, 0x20, 0x26, 0x70, 0x46, 0x51,
+ 0xf8, 0xa8, 0xb2, 0x19, 0x1e, 0x65, 0x5c, 0xe4, 0xac, 0x1a, 0x31, 0x4e,
+ 0x66, 0x26, 0x14, 0x47, 0x11, 0xb5, 0x9f, 0x24, 0x14, 0xb0, 0xfc, 0xcf,
+ 0xb0, 0xd6, 0x5c, 0x3e, 0xcc, 0xd8, 0x64, 0xcf, 0x62, 0x09, 0x8b, 0xb5,
+ 0xaa, 0xf2, 0x6e, 0x93, 0x4d, 0x55, 0x77, 0xa9, 0xc4, 0xee, 0x9a, 0x55,
+ 0x40, 0xa1, 0xb4, 0x2d, 0x19, 0x70, 0xf8, 0x0d, 0x6f, 0xb3, 0x32, 0x9a,
+ 0x91, 0xf7, 0xc0, 0xf4, 0xcc, 0x62, 0x24, 0x56, 0x59, 0xee, 0x63, 0xa1,
+ 0xc6, 0x54, 0x63, 0x53, 0x68, 0x60, 0x74, 0x29, 0x81, 0xdc, 0xa2, 0x12,
+ 0xc8, 0x50, 0x26, 0xf9, 0x9c, 0xca, 0x56, 0xe0, 0x84, 0x41, 0x29, 0x64,
+ 0xb8, 0xd6, 0xd9, 0x08, 0x03, 0xbb, 0x51, 0x1a, 0xbe, 0x86, 0xa3, 0x13,
+ 0x00, 0x10, 0x18, 0xa0, 0x71, 0x9a, 0x96, 0xef, 0xcb, 0x68, 0x94, 0xbd,
+ 0xa1, 0x0c, 0x73, 0x6e, 0xab, 0x2d, 0xe9, 0x29, 0x45, 0xb8, 0x41, 0xc0,
+ 0x35, 0x95, 0xfa, 0xd1, 0x81, 0x76, 0x7a, 0x9f, 0x6c, 0xbc, 0x69, 0xa4,
+ 0x0c, 0x43, 0xe2, 0xd7, 0x5e, 0x30, 0xbc, 0xc6, 0x7b, 0xd2, 0xa6, 0x24,
+ 0x70, 0x0e, 0x83, 0x6e, 0x66, 0xfa, 0x58, 0xb4, 0x74, 0x85, 0xed, 0x7f,
+ 0xcd, 0xd0, 0x56, 0xc7, 0x02, 0xa9, 0x99, 0x0b, 0x33, 0x74, 0xa7, 0x2d,
+ 0x60, 0xb8, 0xa9, 0xd2, 0x9b, 0xa4, 0x15, 0x73, 0x5f, 0x3c, 0x39, 0x72,
+ 0xa1, 0xc0, 0xc8, 0x81, 0xba, 0x20, 0x2a, 0x46, 0x04, 0x3e, 0x32, 0x99,
+ 0x11, 0x70, 0xbb, 0xeb, 0xa5, 0xe9, 0x52, 0x3b, 0xa1, 0xa0, 0xcb, 0x9b,
+ 0xcc, 0x6c, 0xcc, 0x9c, 0x32, 0x64, 0x11, 0x84, 0x87, 0x55, 0x1f, 0x8a,
+ 0xe4, 0x11, 0x7c, 0x17, 0xa0, 0x05, 0x51, 0x75, 0x31, 0xfd, 0xc3, 0xb0,
+ 0x2f, 0x2c, 0x74, 0x7d, 0x63, 0xa4, 0xff, 0xf7, 0xf8, 0x62, 0xa8, 0xf4,
+ 0x85, 0x62, 0xfc, 0x03, 0x80, 0xb7, 0x90, 0x6b, 0x93, 0xe6, 0x11, 0xac,
+ 0x70, 0x1b, 0x5f, 0x32, 0xa8, 0x7f, 0x7b, 0x8b, 0x12, 0x17, 0xb7, 0xc4,
+ 0xea, 0x7c, 0x0d, 0xb6, 0xbb, 0x3f, 0x4f, 0x55, 0x15, 0x52, 0x17, 0xe0,
+ 0xd2, 0xd0, 0x13, 0x28, 0x1a, 0xd7, 0x27, 0xaf, 0xde, 0x0d, 0xd6, 0xc9,
+ 0xce, 0x6f, 0x23, 0x76, 0x6b, 0x99, 0x76, 0xf0, 0x2a, 0x05, 0xb3, 0x9e,
+ 0x57, 0x48, 0x5d, 0x05, 0x04, 0xae, 0xfb, 0x25, 0x03, 0x82, 0xba, 0x3b,
+ 0x1b, 0x95, 0xb5, 0x4a, 0x78, 0xa9, 0x9a, 0x38, 0x98, 0x49, 0x3a, 0x2e,
+ 0x87, 0xa8, 0x05, 0xac, 0xae, 0x58, 0x1f, 0x78, 0x0d, 0xa9, 0x43, 0xa5,
+ 0x37, 0x58, 0x7d, 0x89, 0x53, 0x84, 0xef, 0xba, 0x70, 0x0e, 0x81, 0x6b,
+ 0x21, 0x11, 0xad, 0xae, 0xc0, 0x8d, 0x64, 0xa3, 0x24, 0xa2, 0x84, 0xef,
+ 0xd5, 0xda, 0xba, 0x71, 0xfe, 0x9b, 0x8e, 0xef, 0x5a, 0x58, 0xe3, 0xca,
+ 0xd6, 0x77, 0x34, 0x57, 0x66, 0x80, 0xef, 0x72, 0xc9, 0x51, 0x18, 0xfd,
+ 0x8a, 0xdf, 0xf8, 0x72, 0xec, 0x86, 0xee, 0x04, 0x08, 0x5f, 0xe1, 0x37,
+ 0xb2, 0xee, 0xed, 0x6c, 0x58, 0xc1, 0x8a, 0x35, 0x2c, 0x6f, 0x36, 0x21,
+ 0x7f, 0x1b, 0x01, 0xa0, 0xae, 0xae, 0x0c, 0xe5, 0x85, 0x16, 0xe2, 0x4e,
+ 0x3b, 0x9e, 0x4d, 0x83, 0x8f, 0x13, 0x88, 0xae, 0x19, 0xb7, 0x93, 0x4f,
+ 0xd1, 0x40, 0x8c, 0x7e, 0xec, 0xab, 0x20, 0xf0, 0x3a, 0x3e, 0xa5, 0x59,
+ 0x01, 0x31, 0x4c, 0x08, 0x0d, 0xbf, 0xd0, 0x01, 0x0f, 0xa0, 0x99, 0xcb,
+ 0x8a, 0xb2, 0x3f, 0x90, 0x7a, 0x09, 0xa5, 0x3f, 0x5c, 0x6c, 0x9c, 0x0d,
+ 0x35, 0xf4, 0x22, 0x01, 0xc4, 0xce, 0xc6, 0x07, 0xb8, 0xc8, 0x1b, 0x55,
+ 0xd4, 0x21, 0x73, 0x68, 0xd4, 0xe9, 0x21, 0xc9, 0x97, 0x56, 0x43, 0xbe,
+ 0x64, 0x78, 0x0c, 0x82, 0xcb, 0x1e, 0xee, 0xea, 0x62, 0xd7, 0x6e, 0x4a,
+ 0x02, 0x9b, 0xe1, 0xc4, 0xcd, 0xad, 0xae, 0x8f, 0x4a, 0x89, 0x2b, 0xe4,
+ 0xf9, 0x35, 0x9b, 0xc7, 0x2b, 0x85, 0xfd, 0xee, 0xa2, 0xbb, 0x7d, 0x78,
+ 0x70, 0xd0, 0xd8, 0xc4, 0x72, 0x61, 0x62, 0x94, 0xbc, 0x4e, 0xef, 0x4a,
+ 0x00, 0x1c, 0xa7, 0xa3, 0xc4, 0xa7, 0x5e, 0x78, 0xaf, 0x10, 0x76, 0xa9,
+ 0x0d, 0x99, 0xe8, 0xf8, 0x05, 0x77, 0xca, 0xac, 0xcf, 0xbc, 0x81, 0xf9,
+ 0xfb, 0x65, 0xef, 0xfa, 0x62, 0x75, 0xe5, 0x8a, 0x81, 0x83, 0xcb, 0xe4,
+ 0x1a, 0x90, 0x27, 0x2b, 0xc0, 0xb6, 0x5f, 0xb6, 0x76, 0xa2, 0x3f, 0x8d,
+ 0x3c, 0x05, 0x18, 0x88, 0xa6, 0xe7, 0x00, 0x6b, 0xcc, 0xe1, 0x3c, 0xda,
+ 0x80, 0x4e, 0xeb, 0xb1, 0x33, 0xcc, 0x85, 0x0b, 0xce, 0xdb, 0x39, 0xee,
+ 0x93, 0x98, 0x6f, 0x67, 0xd7, 0xf0, 0xa2, 0x60, 0x7a, 0x2f, 0xaf, 0xde,
+ 0x1c, 0xec, 0x1e, 0xe3, 0xec, 0x86, 0xad, 0xf4, 0x8b, 0xd9, 0x18, 0xec,
+ 0x33, 0x61, 0x23, 0x6a, 0x89, 0xb8, 0x7f, 0xa6, 0x91, 0xdd, 0x6d, 0x5e,
+ 0xa3, 0x82, 0x23, 0xf2, 0xa2, 0xeb, 0x6c, 0x84, 0xd4, 0xbc, 0x9c, 0x66,
+ 0x56, 0x7e, 0xc4, 0xc9, 0x47, 0x99, 0x01, 0xa2, 0x7c, 0x3a, 0x58, 0xe8,
+ 0xdc, 0xfc, 0xf6, 0x9a, 0x01, 0xdb, 0x3a, 0x58, 0xb5, 0x1c, 0x53, 0x70,
+ 0xbe, 0x1c, 0x01, 0xef, 0x63, 0x7c, 0xd7, 0xfe, 0x51, 0x38, 0xf3, 0x2a,
+ 0xa2, 0x92, 0x06, 0xd9, 0x79, 0xdd, 0x69, 0xbd, 0xec, 0xbc, 0xfe, 0xa1,
+ 0xfb, 0xe6, 0xbc, 0x77, 0x05, 0x49, 0xab, 0x42, 0x1f, 0x82, 0x5c, 0x97,
+ 0x7d, 0x7c, 0x40, 0xc8, 0x6b, 0xe5, 0xab, 0x14, 0x4a, 0x43, 0x09, 0xbe,
+ 0x86, 0xae, 0xc9, 0x3e, 0x6e, 0x44, 0x27, 0xc6, 0x8f, 0x9b, 0x9a, 0x21,
+ 0x64, 0x35, 0x4b, 0x79, 0x0b, 0x4d, 0xc9, 0x35, 0x3a, 0x1d, 0xb8, 0x08,
+ 0xcc, 0x10, 0x16, 0x8a, 0x2c, 0x6f, 0xb5, 0x6b, 0x5c, 0x2d, 0xbd, 0xfe,
+ 0x45, 0x52, 0x04, 0x7d, 0x52, 0x5e, 0x7f, 0xeb, 0xd2, 0x36, 0x57, 0x57,
+ 0x76, 0x77, 0xad, 0x75, 0x6d, 0xf7, 0x48, 0x25, 0x38, 0x4e, 0xb2, 0x91,
+ 0xe9, 0xfd, 0xc0, 0xca, 0x39, 0x14, 0x1f, 0xe1, 0xe4, 0xdc, 0x78, 0x79,
+ 0xe2, 0x85, 0xc7, 0x97, 0x0a, 0x75, 0x90, 0x9b, 0x01, 0x28, 0x80, 0xc3,
+ 0x1d, 0xdc, 0xa5, 0xba, 0x62, 0xee, 0xe6, 0x06, 0x98, 0xf8, 0xc6, 0xa9,
+ 0x7c, 0x62, 0x2c, 0x7c, 0x28, 0xd4, 0xee, 0x99, 0x84, 0x67, 0x37, 0x74,
+ 0x1f, 0x7f, 0x58, 0xaa, 0x9c, 0xb8, 0x6b, 0x5d, 0xf5, 0x87, 0x9e, 0x8e,
+ 0xf6, 0x86, 0xd6, 0xb1, 0x8b, 0x4f, 0xb8, 0xcf, 0xb1, 0x1c, 0xed, 0xcb,
+ 0x74, 0x9c, 0xf2, 0x7d, 0xfc, 0x29, 0x9a, 0xf8, 0xfd, 0x93, 0x39, 0x0b,
+ 0xe9, 0x36, 0xf9, 0xb4, 0x44, 0x1c, 0xb4, 0xee, 0x05, 0xf7, 0x5b, 0x77,
+ 0xc6, 0xc7, 0x38, 0x02, 0x68, 0xa3, 0x5f, 0x3b, 0xad, 0xff, 0xf9, 0xdb,
+ 0x46, 0x12, 0x7c, 0x5f, 0xf0, 0x12, 0x3b, 0x00, 0x79, 0x85, 0x1d, 0x87,
+ 0x2a, 0x22, 0x9c, 0x63, 0xec, 0xc8, 0x25, 0x84, 0x8e, 0x40, 0x4d, 0x10,
+ 0xff, 0x05, 0x0b, 0xd0, 0x94, 0xdc, 0xd8, 0xf9, 0x0d, 0x6e, 0x0a, 0xd4,
+ 0x1b, 0x3e, 0xe2, 0x1b, 0xfe, 0xf1, 0x49, 0x6f, 0xb0, 0x34, 0x21, 0xc1,
+ 0x35, 0x42, 0x1a, 0x75, 0x53, 0xf4, 0xb7, 0xb9, 0x10, 0xcc, 0x9e, 0xd2,
+ 0x17, 0x64, 0x65, 0xd6, 0xd1, 0xa9, 0x58, 0x5d, 0xc7, 0x4f, 0x72, 0x18,
+ 0x5b, 0xa0, 0x56, 0xcf, 0x6d, 0xab, 0xdb, 0xd6, 0x2e, 0xc5, 0xda, 0x43,
+ 0x65, 0xde, 0x89, 0xad, 0x8e, 0x14, 0x77, 0x60, 0xc3, 0xcc, 0xaa, 0x13,
+ 0xdb, 0xd6, 0xae, 0xb2, 0x27, 0x36, 0x95, 0x06, 0x30, 0x1f, 0x86, 0x91,
+ 0xa3, 0xbb, 0xc6, 0xe3, 0x19, 0x3b, 0x64, 0xe6, 0x9e, 0x31, 0x49, 0x78,
+ 0xc4, 0x98, 0x43, 0xc7, 0x9d, 0x31, 0x3c, 0x88, 0x85, 0x8c, 0xff, 0x84,
+ 0xad, 0xf2, 0x3e, 0x5c, 0x3b, 0xd8, 0xd7, 0xcc, 0x8c, 0x7c, 0xf4, 0x83,
+ 0x97, 0xf3, 0x6a, 0x51, 0xa0, 0x22, 0xc0, 0x79, 0xbd, 0x0c, 0x6f, 0xb1,
+ 0x59, 0x76, 0xcb, 0x0d, 0x38, 0x95, 0x31, 0xb1, 0x12, 0x65, 0x44, 0xbe,
+ 0x09, 0x81, 0xfd, 0x40, 0x54, 0xee, 0x00, 0x84, 0x1c, 0x0e, 0x39, 0x47,
+ 0x75, 0x12, 0x95, 0x1b, 0xc4, 0xf3, 0xcf, 0x3f, 0x00, 0x92, 0xa5, 0xb9,
+ 0x5d, 0x06, 0xc4, 0xb2, 0xa6, 0x07, 0x42, 0x1f, 0x1b, 0xd4, 0xc7, 0x56,
+ 0x25, 0x14, 0x3b, 0x1c, 0xd4, 0x3f, 0x5a, 0x91, 0xfa, 0x75, 0xc5, 0x64,
+ 0x90, 0x61, 0x20, 0x51, 0x36, 0x2e, 0x67, 0x13, 0x17, 0xd3, 0x63, 0x71,
+ 0x3d, 0x01, 0x31, 0xd6, 0xe8, 0x84, 0x53, 0x2e, 0x58, 0x41, 0x34, 0x41,
+ 0xa9, 0xfe, 0xae, 0xac, 0x03, 0x0c, 0xa9, 0xba, 0xcc, 0xb0, 0x4a, 0x75,
+ 0x6e, 0xd9, 0x70, 0xef, 0x60, 0xc6, 0xa5, 0xdd, 0x19, 0x8c, 0xbd, 0x0b,
+ 0xca, 0xed, 0x22, 0x8e, 0x0e, 0x85, 0xf2, 0xee, 0x50, 0x70, 0x3f, 0x11,
+ 0x65, 0x93, 0x92, 0x72, 0x4b, 0xba, 0x29, 0xe1, 0x9f, 0x8d, 0x28, 0x80,
+ 0x00, 0x56, 0x92, 0x64, 0xce, 0x6d, 0x68, 0x64, 0x2b, 0x23, 0x11, 0x3c,
+ 0x42, 0xfd, 0xcb, 0x29, 0xd5, 0x0b, 0x9d, 0x52, 0x7d, 0x40, 0x2b, 0xee,
+ 0xa7, 0x9e, 0xf8, 0x45, 0x22, 0x55, 0xb8, 0xcb, 0x44, 0xe6, 0x5a, 0x5d,
+ 0x69, 0x74, 0x45, 0x3a, 0x58, 0xb4, 0xbb, 0xa8, 0x55, 0x08, 0xed, 0x6c,
+ 0x70, 0x60, 0x8f, 0x3f, 0x02, 0x2a, 0xcf, 0x2a, 0xe8, 0x5b, 0x23, 0x0a,
+ 0xaf, 0x36, 0x9a, 0x8c, 0xd7, 0x59, 0xaf, 0x9f, 0x32, 0xf4, 0x5b, 0x9b,
+ 0x8e, 0x6c, 0x55, 0xbc, 0xd5, 0x15, 0xa3, 0xe1, 0x96, 0x53, 0xc2, 0x8d,
+ 0xad, 0x2e, 0x97, 0x35, 0xbf, 0x4e, 0x97, 0x63, 0x67, 0x0c, 0x6e, 0x5d,
+ 0x56, 0x88, 0xb3, 0x11, 0x90, 0x65, 0x03, 0x08, 0xa4, 0x11, 0x10, 0x62,
+ 0xa3, 0x9d, 0xc4, 0xec, 0x67, 0x24, 0xba, 0xf5, 0xcd, 0x70, 0x8a, 0x51,
+ 0x3a, 0x41, 0xdb, 0x32, 0x22, 0x0b, 0x7b, 0x43, 0xc1, 0x01, 0x02, 0xc4,
+ 0x80, 0x51, 0xc3, 0xc1, 0xd2, 0x53, 0x66, 0xe8, 0xa8, 0x96, 0x14, 0x34,
+ 0xb5, 0x50, 0xeb, 0x94, 0x5e, 0xba, 0x01, 0x77, 0xcf, 0x1e, 0x1e, 0xf8,
+ 0xee, 0x20, 0x86, 0xad, 0x14, 0xad, 0x11, 0x67, 0x00, 0x14, 0xbe, 0x82,
+ 0xb2, 0xbc, 0x69, 0x99, 0xf2, 0x71, 0xe8, 0x5d, 0x47, 0x81, 0x3f, 0x2d,
+ 0x49, 0x7d, 0x35, 0xcb, 0x03, 0xc5, 0x34, 0x9d, 0xb5, 0x39, 0xea, 0x39,
+ 0x51, 0xee, 0x92, 0x87, 0x44, 0x74, 0x61, 0x23, 0x40, 0x31, 0xe8, 0xde,
+ 0xbf, 0x66, 0x79, 0xff, 0x7d, 0x72, 0x33, 0x01, 0xe8, 0xba, 0xdb, 0xe2,
+ 0x63, 0xf2, 0x9f, 0xb3, 0xd1, 0x43, 0x29, 0xb1, 0xe9, 0x30, 0xf2, 0xdf,
+ 0x61, 0x53, 0xde, 0x39, 0x93, 0xa3, 0x6e, 0xa2, 0xf5, 0xc3, 0x59, 0xe3,
+ 0xf4, 0x17, 0x18, 0x4c, 0xbf, 0x18, 0x16, 0x33, 0x44, 0xc1, 0xcb, 0xa7,
+ 0xdf, 0xc7, 0xef, 0xfd, 0xe9, 0x4a, 0xdd, 0x1b, 0xdc, 0x5a, 0x3e, 0x80,
+ 0x0f, 0xeb, 0xbb, 0xc6, 0x45, 0x6a, 0xe6, 0xbf, 0x81, 0xe0, 0x05, 0xdf,
+ 0xad, 0x0d, 0xb3, 0xbc, 0xcc, 0xd6, 0x54, 0x23, 0x74, 0x86, 0x26, 0xc9,
+ 0xb7, 0xc3, 0xd3, 0x1f, 0x53, 0x43, 0x73, 0xe3, 0xd9, 0xd8, 0x4c, 0x49,
+ 0xff, 0xfe, 0x2f, 0xc9, 0xdb, 0xfb, 0x7c, 0x58, 0x94, 0xc5, 0xc3, 0x7d,
+ 0x9e, 0x35, 0xcd, 0xb9, 0x2a, 0x77, 0xfd, 0x7d, 0x36, 0x21, 0x62, 0xcb,
+ 0x61, 0x82, 0x07, 0xc9, 0xab, 0x6c, 0x00, 0x66, 0x37, 0x75, 0x07, 0x5c,
+ 0x35, 0xef, 0x01, 0x76, 0x94, 0x82, 0xc7, 0xdd, 0x4c, 0x09, 0xe0, 0xa0,
+ 0xe6, 0x99, 0xba, 0x67, 0x30, 0x9b, 0xf4, 0xef, 0x4d, 0xc7, 0x0c, 0xeb,
+ 0x99, 0x0d, 0x0c, 0xa3, 0x35, 0x44, 0x0f, 0x70, 0xb5, 0x59, 0xfe, 0xff,
+ 0xce, 0x46, 0xc9, 0x59, 0x36, 0xfa, 0x5f, 0xf7, 0x6b, 0xe3, 0x36, 0xdd,
+ 0x6f, 0xce, 0xe9, 0x07, 0x9d, 0xfa, 0xf0, 0x97, 0x56, 0x8b, 0xbd, 0x00,
+ 0x32, 0x0a, 0x36, 0x93, 0xd6, 0x38, 0x34, 0xc8, 0x42, 0x54, 0x54, 0x00,
+ 0x29, 0xc0, 0xa4, 0xa8, 0x0a, 0x38, 0xaf, 0xae, 0xac, 0x8b, 0xc3, 0xc2,
+ 0x16, 0x17, 0xf9, 0x90, 0xa7, 0xd5, 0xc0, 0x79, 0x26, 0xaf, 0x0d, 0x6e,
+ 0x53, 0x6b, 0xe4, 0x60, 0x03, 0x03, 0xa8, 0x8b, 0x69, 0x99, 0x84, 0x11,
+ 0x43, 0xb7, 0xa0, 0x77, 0x60, 0x12, 0xf0, 0x3a, 0x65, 0x7d, 0x70, 0x33,
+ 0x5c, 0xcc, 0x96, 0x47, 0x24, 0x78, 0xd8, 0x9e, 0x23, 0x20, 0x66, 0x71,
+ 0xa9, 0x75, 0xde, 0x90, 0x47, 0x5e, 0x87, 0x6f, 0x8d, 0x07, 0x61, 0xf2,
+ 0xc1, 0xb3, 0xfc, 0x36, 0x03, 0x38, 0xda, 0x04, 0xf2, 0x5e, 0xc7, 0xec,
+ 0xc4, 0xba, 0x85, 0x28, 0xc2, 0xe4, 0xdf, 0xb1, 0x2f, 0x11, 0xff, 0x51,
+ 0x6a, 0x9d, 0xe2, 0x42, 0xf8, 0x66, 0x25, 0xb1, 0x8c, 0x2f, 0x44, 0x33,
+ 0xda, 0x25, 0xb4, 0x1d, 0x41, 0xa6, 0x67, 0x97, 0x18, 0x5b, 0xb6, 0x7e,
+ 0x6a, 0xae, 0xb8, 0xed, 0x2f, 0x49, 0x42, 0x5e, 0x2e, 0x12, 0x9c, 0x30,
+ 0x7e, 0x63, 0xaa, 0xe0, 0x50, 0xf8, 0x18, 0x98, 0x6a, 0xba, 0x51, 0xee,
+ 0x18, 0xcf, 0xc2, 0x64, 0x78, 0x4f, 0xfa, 0x9e, 0x7d, 0x6e, 0x88, 0x90,
+ 0xc0, 0xed, 0x13, 0xa0, 0x32, 0xb7, 0x69, 0x8e, 0x7b, 0x55, 0x03, 0x5c,
+ 0x72, 0xdf, 0xb9, 0x24, 0xd3, 0x23, 0xc0, 0xb2, 0x67, 0xfd, 0xfb, 0x31,
+ 0x22, 0x43, 0x83, 0xed, 0xc8, 0x3e, 0x57, 0xad, 0xe4, 0x86, 0x14, 0x6a,
+ 0x23, 0x09, 0xf1, 0x85, 0x94, 0x23, 0x63, 0x38, 0x91, 0xcc, 0x8c, 0x9e,
+ 0x8c, 0x17, 0xe0, 0x69, 0x35, 0xdb, 0x28, 0xe4, 0x3d, 0x3f, 0x4a, 0x24,
+ 0xd9, 0xfb, 0xec, 0xe9, 0xb1, 0x40, 0x87, 0x15, 0x98, 0xb9, 0x13, 0xb2,
+ 0x6f, 0x05, 0x37, 0x97, 0xf7, 0xf9, 0xed, 0x54, 0xb2, 0x03, 0x90, 0xfe,
+ 0xf9, 0xbe, 0x53, 0x43, 0x51, 0x33, 0xc1, 0x90, 0x30, 0xfa, 0x77, 0xbb,
+ 0xcd, 0xeb, 0x85, 0x8e, 0x19, 0x6d, 0x59, 0x26, 0xf0, 0x84, 0x8a, 0x55,
+ 0xb8, 0xc9, 0xc8, 0x29, 0x0f, 0x40, 0xa0, 0x9e, 0xef, 0x73, 0x0d, 0x1c,
+ 0x45, 0x86, 0x38, 0x72, 0x24, 0xa2, 0x35, 0x9c, 0xf5, 0xc0, 0xd6, 0xd7,
+ 0x5e, 0x5d, 0x91, 0x0d, 0xd1, 0x21, 0xe7, 0x8b, 0x8f, 0x78, 0x82, 0xf8,
+ 0x01, 0x31, 0x13, 0x24, 0x96, 0x3d, 0xc6, 0x7c, 0x20, 0x9a, 0xe4, 0xc9,
+ 0xc8, 0xb1, 0x6b, 0xbb, 0xe0, 0xaf, 0x5f, 0x5d, 0xbf, 0xf9, 0xb7, 0xde,
+ 0xeb, 0xe4, 0xab, 0xcb, 0x57, 0x6f, 0x5f, 0x5e, 0xf6, 0xce, 0x9d, 0x4b,
+ 0x18, 0xc2, 0x6b, 0x25, 0xd2, 0x28, 0xd8, 0xe9, 0x94, 0xe3, 0xa2, 0xd3,
+ 0xc7, 0x68, 0xb1, 0x1f, 0x00, 0x7c, 0x64, 0x02, 0xb0, 0xda, 0x5c, 0x46,
+ 0xd7, 0x30, 0xe1, 0x21, 0x25, 0x07, 0xa3, 0x53, 0xf3, 0x02, 0x22, 0x11,
+ 0xef, 0xd1, 0x8f, 0x4e, 0xe2, 0x43, 0x6f, 0x7c, 0x67, 0xa4, 0xa6, 0x7b,
+ 0xe4, 0x79, 0x74, 0xf6, 0xe0, 0xbe, 0xba, 0x33, 0x6c, 0xb6, 0xe4, 0x9d,
+ 0x8a, 0x91, 0xd5, 0x40, 0x29, 0x7c, 0x6f, 0xd3, 0x77, 0x8d, 0xba, 0x01,
+ 0xab, 0xf0, 0x0a, 0x1e, 0xfb, 0x4d, 0xe6, 0xf8, 0x06, 0xce, 0xf6, 0x63,
+ 0xfa, 0x14, 0x3d, 0xb2, 0x02, 0x0f, 0x7f, 0x52, 0x99, 0x9d, 0xb5, 0xdb,
+ 0xc9, 0x1a, 0xee, 0x4f, 0xb9, 0x11, 0x7b, 0x18, 0xbb, 0x31, 0x1b, 0xfb,
+ 0x37, 0xa2, 0x19, 0xaf, 0xee, 0x46, 0xc5, 0xc3, 0xad, 0x0d, 0x1d, 0x3e,
+ 0x6c, 0x33, 0x2f, 0x48, 0xbe, 0x66, 0x98, 0x1c, 0x23, 0x00, 0x12, 0x0d,
+ 0xc0, 0x8f, 0xce, 0xc2, 0x4e, 0x30, 0xeb, 0x82, 0xdd, 0xe8, 0x0c, 0x15,
+ 0x0c, 0xbf, 0x7e, 0x65, 0xd1, 0xe0, 0xe7, 0x95, 0x1b, 0x11, 0x08, 0x71,
+ 0x49, 0xb0, 0x11, 0x44, 0xf1, 0x5e, 0xda, 0xbf, 0x8f, 0xbb, 0x48, 0x06,
+ 0xec, 0x21, 0x71, 0xd0, 0xe9, 0x7e, 0xea, 0x37, 0x63, 0xe6, 0x52, 0xc8,
+ 0x06, 0x0a, 0x75, 0x9c, 0x95, 0xc3, 0x83, 0xe1, 0x8d, 0x44, 0x2b, 0x79,
+ 0x63, 0xe4, 0x19, 0x23, 0x69, 0x13, 0x14, 0xc8, 0xad, 0xe4, 0x35, 0x41,
+ 0xec, 0x37, 0x39, 0xef, 0xa4, 0x4e, 0x32, 0x69, 0x7e, 0x95, 0xec, 0x4e,
+ 0x74, 0x30, 0x50, 0x45, 0x67, 0x30, 0x56, 0x6a, 0xab, 0x34, 0x86, 0x80,
+ 0x54, 0x62, 0x5d, 0xf0, 0x81, 0x6c, 0x3c, 0x08, 0x6e, 0x07, 0x15, 0x86,
+ 0x7c, 0xb3, 0xd5, 0x47, 0x46, 0x0f, 0x80, 0x32, 0x8f, 0x7f, 0x74, 0xfb,
+ 0xae, 0x30, 0x35, 0x84, 0x00, 0xc5, 0xe2, 0x6a, 0xf8, 0x65, 0xf0, 0x60,
+ 0xcb, 0x06, 0x1f, 0xa5, 0x77, 0x1a, 0x6b, 0x00, 0x66, 0xd9, 0x9d, 0xba,
+ 0x88, 0x4e, 0x8f, 0x51, 0x9f, 0x4d, 0xa7, 0x73, 0x91, 0x3b, 0xcf, 0xf0,
+ 0xc0, 0x26, 0x3a, 0x78, 0xa7, 0x39, 0x48, 0x6d, 0xe0, 0xfd, 0x05, 0x67,
+ 0xc1, 0xd4, 0x16, 0xb8, 0xbb, 0xcb, 0xc6, 0x50, 0x7f, 0xdd, 0x30, 0x14,
+ 0x95, 0xe3, 0x2a, 0x5a, 0xe0, 0x0f, 0x97, 0x1b, 0x74, 0x44, 0xc0, 0xce,
+ 0x45, 0xc6, 0x9a, 0x62, 0xa8, 0xa0, 0xc7, 0x6f, 0xfc, 0x88, 0x65, 0x0f,
+ 0x82, 0x15, 0x89, 0xa1, 0xe6, 0x4e, 0xee, 0x75, 0xd4, 0x71, 0x32, 0x46,
+ 0x00, 0xa7, 0x31, 0x02, 0x38, 0xf9, 0x2b, 0x53, 0xf3, 0x80, 0x61, 0x30,
+ 0x0d, 0x8a, 0xfc, 0xa9, 0x06, 0x8a, 0xd5, 0x17, 0x09, 0xeb, 0x49, 0x84,
+ 0x43, 0xcc, 0x14, 0x67, 0x31, 0xf2, 0x25, 0x73, 0x5e, 0x6e, 0x8e, 0x9a,
+ 0xbd, 0x7a, 0xb0, 0x5a, 0xd0, 0xde, 0x35, 0xac, 0x9d, 0xfe, 0xe6, 0x5b,
+ 0xab, 0xe0, 0x4f, 0x80, 0x22, 0x89, 0x4f, 0x5c, 0xc9, 0x9d, 0xde, 0x6f,
+ 0x36, 0x1a, 0xce, 0x46, 0xc1, 0x55, 0x90, 0x45, 0xe9, 0x7d, 0x95, 0xf7,
+ 0x58, 0xac, 0xc2, 0x1f, 0x2e, 0x5f, 0x01, 0xbe, 0x09, 0x98, 0x82, 0x25,
+ 0x5b, 0x89, 0x47, 0x42, 0x75, 0x11, 0x36, 0x6b, 0xab, 0x69, 0x5d, 0x57,
+ 0x41, 0xeb, 0x74, 0xd5, 0x14, 0xc2, 0xad, 0xa5, 0x93, 0x36, 0x1b, 0xa5,
+ 0x86, 0x76, 0xfa, 0xa0, 0x2a, 0x80, 0xd6, 0x61, 0xb6, 0xc3, 0xfa, 0x4d,
+ 0xf6, 0x54, 0x40, 0xcc, 0xe4, 0x93, 0xd9, 0xd7, 0x1f, 0x37, 0x44, 0x6b,
+ 0x08, 0x04, 0x27, 0x86, 0xf9, 0xd0, 0xae, 0xaa, 0xd2, 0xa2, 0xa5, 0x11,
+ 0xa0, 0x20, 0x3e, 0x86, 0x2a, 0x15, 0x42, 0x12, 0x02, 0xa3, 0x37, 0x94,
+ 0x20, 0xa0, 0x2d, 0x05, 0xe7, 0x53, 0x60, 0x55, 0xcc, 0x3f, 0xa0, 0x26,
+ 0x26, 0x94, 0xc4, 0xfc, 0x03, 0xea, 0x61, 0x42, 0x39, 0xcc, 0x3f, 0xb8,
+ 0x18, 0x26, 0x65, 0x57, 0x2c, 0xaa, 0xc2, 0xc8, 0xf1, 0xa1, 0x73, 0xcb,
+ 0x30, 0x06, 0xe5, 0x60, 0x98, 0xc4, 0x34, 0x9c, 0x8e, 0x4c, 0xf8, 0xa9,
+ 0x47, 0x63, 0x04, 0x76, 0x8b, 0xbf, 0x3c, 0x0f, 0xb7, 0xcc, 0x09, 0x6b,
+ 0x6b, 0x65, 0xc2, 0x0c, 0x68, 0x2e, 0x5c, 0x99, 0x57, 0xae, 0xde, 0xdc,
+ 0x1c, 0x03, 0xa7, 0x51, 0xf9, 0x1d, 0x1e, 0x31, 0x04, 0x7d, 0xfe, 0x99,
+ 0x0a, 0x61, 0x48, 0x77, 0x3b, 0x2e, 0x16, 0x12, 0xea, 0xe4, 0xc0, 0x8f,
+ 0xe8, 0xc4, 0xb3, 0xd9, 0x34, 0xa9, 0x9f, 0xd7, 0x01, 0xfd, 0xc3, 0xea,
+ 0x65, 0xcb, 0x82, 0x19, 0xea, 0x20, 0xfe, 0x79, 0x55, 0x50, 0xb1, 0x65,
+ 0x16, 0x2b, 0xf5, 0xd8, 0x89, 0x57, 0xe1, 0x09, 0xc2, 0xc8, 0x2b, 0x4e,
+ 0x46, 0xc4, 0xd4, 0x1a, 0x39, 0xc6, 0x8b, 0x30, 0x0d, 0x24, 0xc8, 0x74,
+ 0xb7, 0x6f, 0xf8, 0xf6, 0xfd, 0xe3, 0x69, 0xef, 0xd5, 0xdb, 0xeb, 0x7f,
+ 0x7e, 0xbb, 0x69, 0x3e, 0x59, 0x53, 0x89, 0x66, 0xbc, 0xe3, 0x22, 0x8e,
+ 0x7a, 0x12, 0x6c, 0x5c, 0x8f, 0x2b, 0x55, 0xad, 0x66, 0xb5, 0x1d, 0xd0,
+ 0xdc, 0xc0, 0x28, 0x92, 0x83, 0x09, 0xc8, 0x9c, 0xf2, 0x89, 0xa6, 0x83,
+ 0x7b, 0x05, 0x76, 0x1f, 0x76, 0xd6, 0xc7, 0x62, 0x20, 0x48, 0xcc, 0xc6,
+ 0x27, 0xb9, 0x81, 0xc4, 0x3f, 0x59, 0xa9, 0x92, 0x55, 0x36, 0x2c, 0xc6,
+ 0xe0, 0xb6, 0x64, 0x45, 0xcf, 0x5a, 0x17, 0xf0, 0x9c, 0x48, 0x55, 0xe0,
+ 0xf9, 0x24, 0xbb, 0xc3, 0xea, 0x3f, 0x5c, 0xba, 0x44, 0x45, 0x77, 0x8b,
+ 0x96, 0x04, 0xf1, 0x7b, 0xc3, 0x26, 0x2b, 0x3d, 0xc5, 0x03, 0xc3, 0xbe,
+ 0xe8, 0xc0, 0xd8, 0x75, 0x15, 0x33, 0x6c, 0xc9, 0x65, 0xa9, 0xa8, 0xf6,
+ 0x0d, 0xb0, 0xb3, 0x10, 0x6e, 0xd4, 0x97, 0x74, 0xbb, 0x61, 0xf4, 0xfd,
+ 0xbe, 0x02, 0xcd, 0xc1, 0x74, 0x26, 0xda, 0x58, 0x96, 0x1a, 0x04, 0xf2,
+ 0x4e, 0x4d, 0x69, 0x53, 0xac, 0x99, 0xfe, 0x65, 0x4c, 0xd8, 0x71, 0x86,
+ 0x4e, 0x05, 0x8c, 0xa7, 0x6e, 0x72, 0x54, 0x46, 0xbb, 0x5d, 0xdb, 0x65,
+ 0x82, 0x2a, 0x7c, 0x0a, 0xac, 0xd5, 0x88, 0x41, 0x04, 0xd5, 0xe6, 0x66,
+ 0xd7, 0x72, 0x6b, 0xc7, 0x29, 0x16, 0xce, 0x2b, 0x9b, 0x8c, 0xee, 0x91,
+ 0x8c, 0xb8, 0x2c, 0xa0, 0x97, 0xe4, 0x53, 0x62, 0xfd, 0xa5, 0x3c, 0x52,
+ 0x56, 0xf5, 0xd3, 0x88, 0xfa, 0x55, 0xfe, 0x11, 0x02, 0x88, 0xf1, 0x8f,
+ 0x47, 0xce, 0x2e, 0x4a, 0x52, 0x1b, 0xfb, 0x96, 0xa9, 0x4b, 0x1c, 0xd4,
+ 0xff, 0x4b, 0xb4, 0x44, 0xe7, 0xb6, 0xe8, 0x72, 0xfb, 0xe1, 0xd1, 0x25,
+ 0xd4, 0xf0, 0x34, 0x5a, 0xf3, 0x17, 0x52, 0x83, 0x47, 0xeb, 0xcf, 0xdd,
+ 0xdb, 0x86, 0xa5, 0x74, 0x5e, 0x13, 0x6b, 0x71, 0x58, 0x9f, 0xf4, 0x2e,
+ 0xd6, 0xa3, 0x3f, 0xb5, 0xdb, 0xce, 0x67, 0x29, 0xaa, 0x4c, 0x98, 0x0e,
+ 0x54, 0x44, 0xd2, 0x81, 0xbc, 0x40, 0x1c, 0xa4, 0x73, 0x90, 0x76, 0xbd,
+ 0x44, 0x6f, 0x43, 0xfa, 0x10, 0xd6, 0xd0, 0x4c, 0x20, 0x28, 0x92, 0x3e,
+ 0x41, 0xc7, 0x51, 0xe0, 0x69, 0xd9, 0xb3, 0x0e, 0x65, 0xe4, 0x7a, 0xdd,
+ 0x01, 0xc5, 0x6f, 0x56, 0x1c, 0x6c, 0x9b, 0x64, 0xf2, 0x73, 0x27, 0x3d,
+ 0xe4, 0xc1, 0x62, 0x82, 0x22, 0x64, 0xb6, 0xa3, 0x30, 0x4c, 0xc5, 0xfe,
+ 0xd4, 0x11, 0x04, 0x99, 0x10, 0x1c, 0x4a, 0xcf, 0xba, 0x82, 0xdd, 0x9c,
+ 0xa2, 0x75, 0x3f, 0xa3, 0x64, 0xec, 0x95, 0x7b, 0x76, 0x31, 0x36, 0x94,
+ 0x4d, 0x57, 0xdf, 0xde, 0x6e, 0xef, 0x57, 0x33, 0xd6, 0xaf, 0x53, 0x07,
+ 0xb9, 0x44, 0xa2, 0x9d, 0x0f, 0x38, 0xbf, 0x36, 0xf7, 0x7c, 0xab, 0x47,
+ 0x94, 0xf7, 0x60, 0xb6, 0x49, 0x60, 0x42, 0xa0, 0x5f, 0x09, 0x32, 0x42,
+ 0x87, 0x6e, 0x52, 0x57, 0x30, 0xc6, 0x42, 0xba, 0x5b, 0xe9, 0x70, 0x36,
+ 0xce, 0xff, 0x65, 0x44, 0x2f, 0x10, 0x6a, 0x02, 0x49, 0x50, 0x0f, 0x47,
+ 0xbd, 0x8b, 0xc7, 0xa4, 0x5e, 0xb9, 0x54, 0xdd, 0xf2, 0x9a, 0xf4, 0xfb,
+ 0xca, 0x90, 0x7e, 0x06, 0x11, 0x1e, 0x47, 0xf4, 0x33, 0x09, 0xf3, 0x56,
+ 0xa6, 0xb5, 0xd2, 0x2b, 0xfe, 0x70, 0x1d, 0x82, 0xd0, 0xbf, 0x2e, 0x04,
+ 0xe2, 0xe1, 0x5d, 0x76, 0x5b, 0xd2, 0x58, 0xec, 0x8f, 0xdd, 0x61, 0x96,
+ 0x8e, 0xa1, 0xcb, 0xe6, 0xd9, 0x72, 0xc9, 0xfc, 0xfc, 0x05, 0xb2, 0x99,
+ 0x2f, 0x66, 0x31, 0x04, 0x08, 0x69, 0x87, 0x89, 0x43, 0xfc, 0x71, 0x92,
+ 0x1b, 0x91, 0xa7, 0x4b, 0x8d, 0x38, 0x75, 0xa8, 0x15, 0xa0, 0x7a, 0xb9,
+ 0x90, 0x31, 0xde, 0x16, 0x6a, 0xca, 0x93, 0x05, 0x5d, 0x69, 0x05, 0x08,
+ 0xd0, 0xb1, 0x39, 0x04, 0xa7, 0x5a, 0x3e, 0x11, 0xb4, 0xe3, 0x5b, 0x73,
+ 0xbe, 0xb1, 0xb5, 0xb3, 0x74, 0x21, 0x8d, 0xa7, 0x75, 0x2a, 0x9d, 0x18,
+ 0xb7, 0x48, 0x78, 0xb7, 0x6a, 0xa7, 0xdb, 0x5a, 0xcd, 0x0a, 0x02, 0x87,
+ 0x55, 0xe2, 0xc2, 0xe1, 0x24, 0xd4, 0x79, 0xeb, 0x1c, 0xf1, 0x08, 0x20,
+ 0x32, 0xc7, 0x19, 0x68, 0x90, 0xd0, 0xf7, 0x65, 0xba, 0xed, 0x14, 0xc6,
+ 0x53, 0xad, 0x85, 0x5a, 0xfe, 0x1f, 0x74, 0x10, 0x94, 0xc6, 0x4a, 0xff,
+ 0x78, 0xf6, 0x22, 0x50, 0x33, 0xcb, 0xd0, 0x6a, 0xb2, 0x8e, 0x2c, 0x1c,
+ 0xcc, 0xd3, 0x22, 0x00, 0xe0, 0xa3, 0xa8, 0x80, 0xac, 0x89, 0x22, 0x02,
+ 0xe6, 0x02, 0x72, 0xf7, 0xf0, 0x15, 0x68, 0x97, 0xec, 0x15, 0x93, 0x72,
+ 0xa3, 0x6e, 0x74, 0x4a, 0xbd, 0xf5, 0xf8, 0xda, 0x17, 0x2c, 0xca, 0xbe,
+ 0x77, 0x00, 0xf2, 0xcf, 0xde, 0x41, 0x15, 0x58, 0x1e, 0x3a, 0x48, 0x9e,
+ 0xd2, 0x39, 0xb6, 0x00, 0xca, 0x62, 0x73, 0x02, 0x13, 0xb8, 0x80, 0xb4,
+ 0x55, 0x03, 0xcc, 0xc3, 0x77, 0x12, 0x40, 0xaa, 0xb2, 0xfa, 0x2a, 0x51,
+ 0x6d, 0x5a, 0xbf, 0xd2, 0x2c, 0x8b, 0xf5, 0x95, 0x9f, 0xcc, 0xa5, 0x59,
+ 0x96, 0x98, 0x95, 0x48, 0xae, 0xcc, 0x65, 0xa7, 0xb1, 0xbc, 0x2e, 0x12,
+ 0x9f, 0x3a, 0x28, 0xc7, 0x8b, 0x05, 0x1a, 0xe7, 0x38, 0x2c, 0x40, 0xda,
+ 0xd1, 0x48, 0xbe, 0xf5, 0x7d, 0x4e, 0x16, 0xab, 0x54, 0x8e, 0x43, 0x71,
+ 0xff, 0x02, 0xea, 0x8a, 0xa0, 0x57, 0x2b, 0x1b, 0xa4, 0x51, 0xed, 0x00,
+ 0xde, 0x20, 0x3c, 0xbf, 0x75, 0x9e, 0x8b, 0xf8, 0x35, 0x15, 0x58, 0xa6,
+ 0x33, 0x59, 0x92, 0xc1, 0xbe, 0x9d, 0xac, 0x83, 0xc7, 0xcd, 0xb6, 0x4b,
+ 0x69, 0x59, 0x65, 0xac, 0xa0, 0x0b, 0xc7, 0x68, 0x02, 0x63, 0x74, 0xd8,
+ 0xb9, 0x71, 0xc4, 0xe2, 0x80, 0xcb, 0xf2, 0xf0, 0xcc, 0x2c, 0x5b, 0x7c,
+ 0x1d, 0xaa, 0xe2, 0x90, 0xbc, 0x53, 0xf9, 0xe3, 0x56, 0x7d, 0x74, 0x7d,
+ 0x61, 0x7b, 0x30, 0xcb, 0x97, 0x36, 0x67, 0x1f, 0x93, 0x9b, 0x13, 0x06,
+ 0xc6, 0xc7, 0xcf, 0x55, 0xbc, 0x76, 0x8d, 0x65, 0x61, 0x11, 0x80, 0x16,
+ 0x20, 0xdc, 0xfa, 0xfc, 0xdf, 0xf5, 0xda, 0xd5, 0xa0, 0x96, 0x9d, 0x69,
+ 0x7a, 0x11, 0x2c, 0x96, 0x27, 0xc8, 0xc4, 0x53, 0x66, 0x96, 0xac, 0x28,
+ 0x80, 0x7e, 0x11, 0x0d, 0xdd, 0xc7, 0xcc, 0xcc, 0xe6, 0x74, 0xab, 0x81,
+ 0xdb, 0xfa, 0x54, 0xc1, 0xf6, 0x4f, 0x6a, 0x52, 0x8d, 0x3f, 0xcb, 0x6e,
+ 0x3f, 0xc2, 0x98, 0xb8, 0x23, 0x1b, 0x13, 0x57, 0x08, 0xaa, 0x77, 0x58,
+ 0x8b, 0xb6, 0xa6, 0x02, 0xf9, 0x86, 0xc3, 0x13, 0x45, 0x0a, 0xd5, 0x6b,
+ 0x9b, 0x56, 0x27, 0x3b, 0x8e, 0x9a, 0x1b, 0x56, 0x1d, 0xb7, 0x3b, 0x31,
+ 0x48, 0x34, 0xaf, 0x54, 0x73, 0xb3, 0x12, 0x25, 0x7c, 0x54, 0x39, 0x6a,
+ 0x15, 0xc3, 0xb5, 0x12, 0x3e, 0x8d, 0x10, 0x9b, 0x58, 0xd1, 0x33, 0xa3,
+ 0xea, 0x64, 0x24, 0x74, 0xda, 0xdd, 0x0e, 0xcc, 0x8e, 0x3c, 0xfa, 0xe2,
+ 0xbd, 0x53, 0xcc, 0x41, 0x36, 0xa2, 0x12, 0x44, 0x2d, 0x96, 0x14, 0x49,
+ 0x03, 0x41, 0x4d, 0x38, 0xaa, 0xaa, 0x41, 0x9c, 0x88, 0x12, 0x46, 0xfb,
+ 0xf7, 0x45, 0x45, 0x58, 0xc0, 0x0d, 0x9d, 0x96, 0x9c, 0x7e, 0x19, 0x1a,
+ 0x74, 0x5e, 0x3c, 0x43, 0xa6, 0xed, 0x49, 0x2f, 0xfe, 0xac, 0x44, 0xdb,
+ 0xd3, 0x12, 0x6d, 0x2f, 0x22, 0xd1, 0x6e, 0xce, 0x17, 0x69, 0xeb, 0x6a,
+ 0x1c, 0x59, 0x99, 0x74, 0x19, 0x99, 0xac, 0x02, 0x34, 0xc9, 0x93, 0x1c,
+ 0x90, 0x86, 0x9a, 0x9e, 0x3a, 0x22, 0x10, 0xfb, 0x0c, 0xd3, 0x41, 0x57,
+ 0xcc, 0x35, 0xd1, 0x0d, 0x4e, 0x9b, 0x3b, 0x44, 0xce, 0xd7, 0xe7, 0xbb,
+ 0x6f, 0x13, 0x10, 0x2b, 0x5d, 0x6e, 0xed, 0xed, 0x31, 0x59, 0xd0, 0xb3,
+ 0x0c, 0x9d, 0x3e, 0x67, 0x51, 0xbb, 0x4e, 0x2e, 0xe9, 0x59, 0xd5, 0xef,
+ 0xcf, 0x2e, 0xb0, 0x9d, 0x91, 0x2a, 0x66, 0xac, 0xed, 0x69, 0xbc, 0x92,
+ 0xa3, 0x51, 0xbb, 0xcf, 0x51, 0x01, 0x97, 0x4f, 0xac, 0x6e, 0xac, 0xc7,
+ 0xaa, 0x98, 0xa8, 0x92, 0xb3, 0x91, 0x58, 0x4f, 0x55, 0x7b, 0x69, 0x6e,
+ 0xe5, 0xa5, 0xee, 0x39, 0x61, 0xcd, 0xd2, 0xdf, 0x68, 0x53, 0x95, 0x0a,
+ 0x40, 0xf3, 0x4b, 0x4f, 0x6e, 0x24, 0xcb, 0x8c, 0xe9, 0x0b, 0x01, 0xd3,
+ 0x1e, 0x62, 0x72, 0xee, 0xe1, 0xf6, 0xb3, 0x61, 0x69, 0x63, 0xa6, 0xaf,
+ 0x90, 0xdd, 0xa1, 0x1b, 0x4a, 0xf8, 0x1d, 0xf9, 0xa4, 0x3e, 0x1b, 0xac,
+ 0xf4, 0xf1, 0x21, 0x74, 0xfc, 0xf8, 0x90, 0x3b, 0xee, 0x0c, 0xc4, 0x12,
+ 0x1b, 0x57, 0xe8, 0xb4, 0x99, 0x32, 0xcd, 0xf1, 0xc0, 0xbb, 0xb1, 0x9e,
+ 0x3d, 0xe7, 0x1b, 0xd3, 0x12, 0x6d, 0x72, 0x5d, 0x09, 0x0f, 0x43, 0x27,
+ 0x1f, 0x6c, 0x78, 0x78, 0x42, 0x9b, 0x00, 0xd8, 0xdd, 0xa7, 0x99, 0x72,
+ 0x6e, 0x56, 0x75, 0x00, 0xde, 0x64, 0x73, 0x88, 0xaa, 0xac, 0x24, 0xc5,
+ 0x2f, 0xa8, 0x5a, 0xa4, 0x34, 0x17, 0x4a, 0x76, 0x92, 0x23, 0x1e, 0x4e,
+ 0xa4, 0x3e, 0x38, 0x2a, 0x0f, 0x6a, 0x14, 0xc1, 0x8a, 0x88, 0x2b, 0x87,
+ 0x00, 0x05, 0x43, 0xb8, 0x82, 0x98, 0xe0, 0x5c, 0x7f, 0xce, 0xc6, 0x07,
+ 0xbb, 0x0a, 0x39, 0xc0, 0x71, 0x1a, 0x3e, 0xdf, 0xe6, 0xf7, 0xbd, 0x57,
+ 0xc2, 0xe5, 0x3d, 0x27, 0xd6, 0x7f, 0x07, 0xfb, 0xc5, 0xa6, 0x36, 0x60,
+ 0x70, 0x53, 0xf5, 0x16, 0x8c, 0xba, 0x4d, 0xd3, 0x0b, 0xd7, 0xce, 0x16,
+ 0x94, 0xc2, 0x44, 0x2a, 0x2c, 0x16, 0xa2, 0x92, 0xa4, 0xc8, 0xb5, 0xcc,
+ 0x96, 0x7e, 0xa6, 0xe6, 0xa6, 0x80, 0x6e, 0x22, 0x21, 0x21, 0xde, 0xc9,
+ 0xd4, 0x4b, 0x3c, 0x76, 0x88, 0xe8, 0x1c, 0x42, 0x12, 0x78, 0x12, 0xda,
+ 0xb1, 0x62, 0x49, 0xe6, 0x4a, 0xf1, 0xd0, 0x80, 0x48, 0x39, 0x86, 0x89,
+ 0x86, 0x92, 0x2c, 0x0c, 0xba, 0x12, 0x26, 0x2c, 0x56, 0x08, 0xb0, 0xce,
+ 0x0c, 0xfe, 0x79, 0xf4, 0x40, 0x2c, 0xa8, 0xb4, 0x27, 0x05, 0x95, 0x08,
+ 0xcf, 0x02, 0x8e, 0x40, 0xc6, 0xc3, 0x45, 0x74, 0x14, 0x02, 0xb9, 0x40,
+ 0x2b, 0xb4, 0xfc, 0xe0, 0x76, 0x13, 0xa6, 0x2f, 0xdb, 0x54, 0x78, 0xeb,
+ 0xad, 0x97, 0x09, 0x5b, 0x5d, 0xc1, 0xb9, 0x71, 0xe1, 0x82, 0x3d, 0x06,
+ 0x5d, 0x45, 0x89, 0x4c, 0x6f, 0xfa, 0x32, 0x38, 0xec, 0x2f, 0x5f, 0xfd,
+ 0x90, 0xa4, 0x43, 0xa3, 0x3b, 0x7e, 0xd7, 0x18, 0x66, 0xb7, 0x50, 0x83,
+ 0x30, 0x29, 0x27, 0xfd, 0xd8, 0xe8, 0x2e, 0xc1, 0x8e, 0xbc, 0xf9, 0xcb,
+ 0x2f, 0xbf, 0x6c, 0x3e, 0xee, 0xf6, 0xff, 0xe3, 0xbe, 0x00, 0xeb, 0xc4,
+ 0x26, 0xc3, 0x20, 0xdc, 0x4c, 0x48, 0x72, 0x30, 0x7f, 0xe5, 0xc2, 0xe6,
+ 0x1c, 0x6c, 0x22, 0xe8, 0x0b, 0xe9, 0x4c, 0xa1, 0x2f, 0xb9, 0x52, 0x3e,
+ 0x78, 0xb1, 0xfe, 0x50, 0x5f, 0x8c, 0x3d, 0x29, 0x25, 0x14, 0x83, 0xe5,
+ 0x9d, 0xaa, 0x39, 0x58, 0x07, 0x56, 0x24, 0x91, 0xb8, 0x8a, 0x11, 0x94,
+ 0xe8, 0x89, 0xc6, 0x27, 0xb0, 0xc7, 0x4f, 0x90, 0x60, 0x34, 0x10, 0xff,
+ 0xea, 0xca, 0xc3, 0x6c, 0xf2, 0x50, 0x94, 0xa0, 0x2f, 0xde, 0xa8, 0x4a,
+ 0xf5, 0x96, 0xb0, 0x3d, 0x87, 0xe3, 0x02, 0xcc, 0x61, 0x40, 0xa3, 0x19,
+ 0x27, 0x75, 0xa5, 0x67, 0x5d, 0xe3, 0x51, 0x8b, 0x99, 0x67, 0xe9, 0x9f,
+ 0xef, 0x53, 0x23, 0xb2, 0xa9, 0x79, 0x8d, 0x42, 0x7d, 0x62, 0xbf, 0x35,
+ 0xd1, 0xa0, 0xef, 0x88, 0xee, 0x53, 0xc2, 0x6f, 0x96, 0x4e, 0x10, 0x02,
+ 0x6c, 0x09, 0x17, 0x1a, 0xfa, 0xe0, 0xb4, 0x92, 0xa7, 0xc6, 0xd0, 0x36,
+ 0xaa, 0x24, 0xc6, 0xb9, 0x1b, 0x26, 0xf1, 0x40, 0x61, 0x5e, 0x9c, 0x6d,
+ 0xe9, 0xf2, 0x7e, 0x81, 0xf1, 0xe4, 0x65, 0x39, 0x83, 0xc0, 0x8a, 0xc7,
+ 0x74, 0x42, 0x2e, 0x6e, 0x08, 0xaf, 0x0b, 0x5c, 0xa9, 0x16, 0x43, 0x41,
+ 0xc5, 0x5a, 0xe2, 0x18, 0x1d, 0xb0, 0x20, 0x46, 0xf1, 0xb9, 0x47, 0xa0,
+ 0xec, 0x1f, 0xc1, 0x27, 0x98, 0xfd, 0x49, 0x98, 0x87, 0xb6, 0xa2, 0x02,
+ 0x1e, 0x7d, 0x93, 0x49, 0x31, 0x69, 0xd7, 0xd6, 0x24, 0xe6, 0x92, 0xc1,
+ 0x7e, 0x74, 0x0f, 0x11, 0xf7, 0x20, 0x8e, 0x9d, 0x6b, 0xcf, 0xbb, 0x9a,
+ 0xaa, 0xd8, 0x2e, 0x12, 0xf0, 0xb9, 0xc7, 0x5e, 0xdd, 0xd6, 0xaa, 0x3f,
+ 0xf7, 0xf6, 0x19, 0x4e, 0x16, 0x4e, 0xbe, 0xa3, 0x39, 0x35, 0x1c, 0xb4,
+ 0x33, 0xda, 0x0f, 0xf3, 0x88, 0x56, 0x89, 0x65, 0xe8, 0xf1, 0x4f, 0xa8,
+ 0x12, 0xeb, 0x9f, 0x7d, 0xf1, 0x47, 0x24, 0xa6, 0x16, 0x0d, 0x5b, 0xea,
+ 0xcb, 0x92, 0x0a, 0x94, 0x35, 0x90, 0xf7, 0xce, 0xc9, 0x1e, 0x36, 0xc7,
+ 0xa0, 0xef, 0xbd, 0xca, 0x97, 0xf2, 0xe9, 0x8d, 0x6e, 0xe0, 0xc8, 0x97,
+ 0x31, 0xc1, 0xa8, 0xf3, 0x1a, 0xff, 0xce, 0x75, 0xde, 0x85, 0x52, 0x78,
+ 0x9d, 0xcb, 0x7a, 0x79, 0x9d, 0x6f, 0xb9, 0x88, 0x80, 0x8a, 0xc9, 0x9d,
+ 0x76, 0x07, 0x61, 0x25, 0x7b, 0x2e, 0x30, 0xdf, 0x54, 0x67, 0xe7, 0xca,
+ 0xb7, 0x24, 0x2e, 0xa0, 0x38, 0xb2, 0x2c, 0xfa, 0x14, 0x6f, 0x21, 0x37,
+ 0x59, 0x02, 0xf0, 0x8d, 0x8b, 0x91, 0x4a, 0x60, 0xc1, 0x19, 0x57, 0xc7,
+ 0xb8, 0x82, 0xe3, 0xce, 0xc2, 0xdf, 0xdf, 0x18, 0x29, 0x10, 0x96, 0x46,
+ 0x70, 0x7c, 0xe4, 0xfa, 0x83, 0xc5, 0xc3, 0xff, 0x03, 0xa0, 0x5d, 0x8d,
+ 0x34, 0x15, 0xde, 0xf1, 0x57, 0x30, 0x3f, 0xb4, 0x01, 0xff, 0xe3, 0x24,
+ 0xf9, 0xab, 0x44, 0x12, 0xd3, 0xd7, 0xf0, 0x56, 0x29, 0x73, 0x36, 0x49,
+ 0xcc, 0xe2, 0xdb, 0xf3, 0xd0, 0x1c, 0x83, 0xbb, 0xd6, 0x4d, 0xc8, 0x1d,
+ 0x77, 0xdc, 0x39, 0xdc, 0xb5, 0x5d, 0xe1, 0xd6, 0xf3, 0x63, 0x09, 0x03,
+ 0x8d, 0xbc, 0xe7, 0xc3, 0x7f, 0x35, 0x74, 0xf0, 0x49, 0xf5, 0x14, 0xa4,
+ 0x78, 0xbe, 0x00, 0x78, 0xea, 0x5e, 0x58, 0x78, 0x1c, 0x4b, 0xec, 0x94,
+ 0x18, 0xad, 0x88, 0x15, 0x0c, 0x9f, 0x93, 0xf2, 0x12, 0x48, 0x05, 0x23,
+ 0x34, 0x5e, 0x51, 0x5d, 0x8c, 0xc5, 0xa7, 0x41, 0x2c, 0xcc, 0x2f, 0x59,
+ 0x07, 0xb1, 0xd1, 0x73, 0x4d, 0x6f, 0x34, 0x6d, 0x34, 0x44, 0x08, 0xc5,
+ 0x52, 0x13, 0x1c, 0x01, 0x66, 0xeb, 0x67, 0x45, 0x47, 0x68, 0xff, 0x40,
+ 0xdc, 0xf4, 0xd1, 0x42, 0x8f, 0x75, 0x03, 0xa2, 0xab, 0x95, 0x05, 0x84,
+ 0xfc, 0xd8, 0x0d, 0x00, 0x54, 0xc0, 0xf3, 0x82, 0xb2, 0x48, 0xd8, 0x19,
+ 0xc2, 0x95, 0xca, 0x05, 0x7b, 0x1c, 0xa3, 0xf7, 0xbe, 0xa0, 0xd0, 0xb9,
+ 0x8f, 0x42, 0xe7, 0xfe, 0xbe, 0x06, 0x99, 0x3e, 0xb5, 0x41, 0x01, 0xd8,
+ 0x51, 0xeb, 0xec, 0x61, 0x31, 0xb3, 0x89, 0x90, 0x13, 0x68, 0x20, 0xba,
+ 0x9b, 0xa4, 0xa3, 0x51, 0x3a, 0x49, 0xee, 0x20, 0xfc, 0x7e, 0x2c, 0x33,
+ 0x27, 0x95, 0x84, 0xac, 0x93, 0x9d, 0x9c, 0xf8, 0x9e, 0x1b, 0xdd, 0x7a,
+ 0xe2, 0xc9, 0xbf, 0xa1, 0x41, 0x20, 0xa4, 0x5e, 0x26, 0x37, 0x52, 0xb0,
+ 0xb4, 0x10, 0x96, 0x9d, 0xb7, 0x2f, 0x07, 0xe8, 0x95, 0x59, 0x0e, 0x20,
+ 0xa2, 0x63, 0xab, 0x08, 0x63, 0x76, 0x5b, 0x1f, 0xb6, 0xbd, 0xa7, 0x26,
+ 0xf5, 0x8d, 0xe4, 0xdf, 0xa7, 0xf2, 0x37, 0x50, 0x31, 0x94, 0x41, 0xb0,
+ 0x55, 0x0d, 0x2d, 0x8c, 0x3b, 0x68, 0x1a, 0x52, 0x2a, 0xf2, 0x3e, 0x40,
+ 0xca, 0x70, 0x40, 0x44, 0xa5, 0x59, 0x0c, 0x31, 0xb1, 0x91, 0x40, 0x43,
+ 0x9b, 0xc9, 0x55, 0xb9, 0xf1, 0xc5, 0xb2, 0x07, 0xaf, 0x90, 0x4c, 0xf2,
+ 0x0a, 0xe6, 0xbc, 0x5c, 0xee, 0xd8, 0x3d, 0x70, 0x0a, 0x67, 0xd5, 0xd6,
+ 0x64, 0x4f, 0x05, 0x39, 0x7b, 0xec, 0xe1, 0xe0, 0xd2, 0x4e, 0xfd, 0x63,
+ 0x04, 0x06, 0x0d, 0xbb, 0x0c, 0xfe, 0xc6, 0x8c, 0x3a, 0x66, 0xc0, 0x8d,
+ 0x53, 0xf3, 0x8f, 0x04, 0x07, 0xad, 0xaf, 0x7d, 0x8f, 0x87, 0xd6, 0x37,
+ 0xf8, 0xef, 0xdf, 0xd6, 0x36, 0xbe, 0x9f, 0x9f, 0x07, 0x0b, 0xd3, 0x2f,
+ 0x9d, 0x79, 0xa8, 0xeb, 0x46, 0x78, 0xea, 0x84, 0x67, 0x5d, 0xa5, 0x93,
+ 0xe1, 0x71, 0xe8, 0xf7, 0x32, 0x79, 0x76, 0x27, 0xe9, 0x0d, 0x31, 0x13,
+ 0x1d, 0xbf, 0xd3, 0x9d, 0xdb, 0xeb, 0x75, 0xb5, 0xdd, 0x93, 0x1a, 0xaa,
+ 0x4b, 0xd6, 0x6b, 0x84, 0x14, 0xa3, 0x78, 0xff, 0xf1, 0xec, 0xc6, 0x36,
+ 0xfe, 0x56, 0xdf, 0xda, 0x86, 0x48, 0x2c, 0x9f, 0xd3, 0x86, 0xb6, 0xbf,
+ 0x85, 0xdc, 0x62, 0x2b, 0xb4, 0xa1, 0x7d, 0xd6, 0x77, 0x60, 0x9d, 0xed,
+ 0xfd, 0x9d, 0xf0, 0x1d, 0x41, 0xd5, 0xf0, 0x1f, 0x60, 0x4b, 0xcc, 0x91,
+ 0xbe, 0x80, 0x0a, 0x22, 0x6b, 0x88, 0x74, 0xf1, 0x85, 0x16, 0xb0, 0xf9,
+ 0xfc, 0x05, 0xfc, 0xe6, 0xbf, 0x7a, 0x01, 0x3f, 0x7d, 0x72, 0xe7, 0xcb,
+ 0x8e, 0x18, 0x42, 0x30, 0x37, 0x94, 0xa3, 0x74, 0x6e, 0x54, 0x36, 0x33,
+ 0x6a, 0xdb, 0x8f, 0xe7, 0x33, 0x8e, 0xc7, 0xac, 0xcf, 0x13, 0x05, 0x8c,
+ 0x1a, 0x38, 0x7e, 0x72, 0xc1, 0x6c, 0xc2, 0x7e, 0xc9, 0x37, 0xae, 0xb8,
+ 0xb9, 0xae, 0x00, 0xc3, 0x2e, 0x9f, 0xa5, 0x10, 0x52, 0x2d, 0x67, 0xd7,
+ 0x11, 0x6f, 0xe4, 0xa0, 0x87, 0xe2, 0x4c, 0x8c, 0xd4, 0x2a, 0x42, 0xb4,
+ 0x7e, 0x61, 0x80, 0x8e, 0xcd, 0x87, 0xd6, 0x49, 0xe4, 0xa8, 0xf0, 0x4a,
+ 0x9a, 0x60, 0x0e, 0x80, 0x3a, 0x5e, 0x48, 0x56, 0xc2, 0x59, 0x8e, 0x77,
+ 0x5f, 0x95, 0x85, 0x58, 0x0a, 0xe1, 0x55, 0x9e, 0xa7, 0xf3, 0xd7, 0x73,
+ 0x82, 0xc1, 0xfb, 0x08, 0xd8, 0xce, 0x05, 0x94, 0x3a, 0xe1, 0xca, 0x45,
+ 0xfb, 0x92, 0x8f, 0x0d, 0x4e, 0x42, 0xec, 0x21, 0x09, 0x01, 0xae, 0x54,
+ 0x8e, 0x52, 0x14, 0xa8, 0x92, 0xac, 0x8a, 0xf6, 0x70, 0x83, 0x56, 0xef,
+ 0xc4, 0xc5, 0x91, 0x8a, 0xb8, 0x2e, 0x41, 0x65, 0x9d, 0x9c, 0x9a, 0x7f,
+ 0x63, 0x8f, 0xe6, 0x46, 0x73, 0x75, 0xe5, 0xf7, 0x6c, 0x52, 0x84, 0xbf,
+ 0x7f, 0x63, 0x7f, 0x87, 0x5f, 0xe4, 0x0e, 0x68, 0x88, 0xb2, 0x32, 0xf8,
+ 0xb6, 0xef, 0xe5, 0x36, 0xae, 0x59, 0x91, 0xde, 0xd8, 0x8a, 0x10, 0x58,
+ 0x81, 0x02, 0x74, 0x09, 0xb0, 0x08, 0x4e, 0xa1, 0xf9, 0x2c, 0x1d, 0xbb,
+ 0x8a, 0x15, 0x96, 0x60, 0x01, 0xe2, 0x2d, 0x18, 0x07, 0x47, 0x14, 0xd8,
+ 0x9a, 0x3f, 0x29, 0xf9, 0x9a, 0xc7, 0x02, 0x68, 0xc9, 0x21, 0xfa, 0x94,
+ 0xe6, 0x41, 0xe5, 0x14, 0xa8, 0xf2, 0x03, 0xe6, 0x83, 0xf4, 0xa5, 0x3c,
+ 0x10, 0x84, 0x41, 0x32, 0xd0, 0x94, 0x14, 0xac, 0x70, 0x85, 0xee, 0xa3,
+ 0x10, 0xd3, 0x3e, 0xd2, 0xa4, 0x0a, 0xa6, 0x51, 0x1b, 0x4c, 0x42, 0x21,
+ 0x53, 0x3f, 0x68, 0x98, 0x72, 0x00, 0xd9, 0x98, 0x28, 0x30, 0x51, 0x66,
+ 0xef, 0x14, 0x25, 0x25, 0xc2, 0x41, 0x8f, 0x26, 0x08, 0x8b, 0x3e, 0x9b,
+ 0x62, 0x19, 0x1d, 0x8c, 0x26, 0x62, 0x3c, 0xe4, 0x4a, 0x04, 0x72, 0x52,
+ 0xdc, 0x64, 0x4f, 0x22, 0x01, 0x0a, 0xe9, 0x42, 0x9d, 0x75, 0xdc, 0x0b,
+ 0x64, 0xbd, 0x9c, 0x64, 0x0f, 0xd9, 0x34, 0xa7, 0x4c, 0x74, 0x9e, 0xe3,
+ 0x92, 0x33, 0x5f, 0x58, 0xf0, 0x46, 0x02, 0x57, 0xc8, 0x59, 0x5e, 0x88,
+ 0x6a, 0x7a, 0x07, 0x16, 0xac, 0xa9, 0x07, 0x17, 0xac, 0x82, 0xf1, 0xfd,
+ 0x28, 0xd1, 0x98, 0x69, 0x6b, 0x64, 0xc6, 0xc0, 0xa6, 0x5f, 0xfa, 0x92,
+ 0x57, 0xed, 0xbe, 0x64, 0x63, 0x16, 0xdb, 0x0d, 0xcd, 0x51, 0xd8, 0x23,
+ 0x0b, 0x83, 0x86, 0x48, 0x7f, 0x14, 0xb1, 0xaa, 0x55, 0x51, 0x46, 0x92,
+ 0x9f, 0x08, 0x61, 0x2d, 0xd7, 0x61, 0xec, 0x17, 0x36, 0xa3, 0x4a, 0xb1,
+ 0xc4, 0x62, 0x49, 0x06, 0x19, 0x29, 0x26, 0x79, 0x39, 0x52, 0x50, 0x3e,
+ 0x7f, 0x69, 0x01, 0x02, 0x5f, 0x36, 0x1e, 0x00, 0x46, 0xc3, 0xbc, 0xfb,
+ 0x29, 0x5b, 0x0d, 0x52, 0xd8, 0xec, 0xfd, 0x90, 0x75, 0x62, 0x6f, 0x32,
+ 0xf4, 0xe8, 0x77, 0xcd, 0xa6, 0xfd, 0x56, 0x8b, 0xab, 0xd3, 0x41, 0xe1,
+ 0xd7, 0x55, 0xc7, 0x6b, 0xd5, 0x8a, 0xea, 0xf3, 0xea, 0xa9, 0xab, 0x72,
+ 0xef, 0xcb, 0xc4, 0x79, 0xcc, 0xad, 0xa7, 0xce, 0xda, 0x92, 0x86, 0x6d,
+ 0xfa, 0x7c, 0xf0, 0x88, 0xe8, 0x43, 0xdc, 0x16, 0x1f, 0x22, 0x9d, 0x48,
+ 0x66, 0x6b, 0x01, 0x14, 0x85, 0x2a, 0xf3, 0x8a, 0xa7, 0xe4, 0xbc, 0x2a,
+ 0xee, 0x62, 0xc4, 0x34, 0xdd, 0xa7, 0x30, 0x5c, 0xc3, 0x51, 0x86, 0x05,
+ 0x5a, 0x7d, 0x6d, 0x9b, 0xc8, 0x1b, 0x21, 0x0b, 0x67, 0x81, 0xf8, 0xdb,
+ 0xac, 0x17, 0x7e, 0x91, 0x13, 0x2e, 0x30, 0x25, 0x59, 0xf4, 0xb0, 0xcf,
+ 0x5a, 0xe5, 0xbd, 0x5a, 0xc4, 0xec, 0x4f, 0xd5, 0x76, 0x7f, 0xf8, 0x22,
+ 0xc5, 0x98, 0xa9, 0x50, 0xe9, 0x71, 0x6d, 0x7d, 0x25, 0xed, 0x2c, 0x4a,
+ 0xe6, 0xf9, 0x8a, 0x72, 0xaf, 0x52, 0x76, 0xab, 0x5a, 0x29, 0x5b, 0x09,
+ 0x01, 0x9f, 0x63, 0x3d, 0x9d, 0xc0, 0x58, 0x0d, 0xec, 0xb7, 0xeb, 0xd9,
+ 0xc4, 0x04, 0xc4, 0xca, 0x02, 0xb2, 0x07, 0xc9, 0x86, 0x0c, 0x99, 0xc6,
+ 0x86, 0x19, 0xa4, 0x47, 0x00, 0xdb, 0x82, 0x28, 0x70, 0x2a, 0xb9, 0x60,
+ 0xcf, 0x7b, 0xce, 0x5e, 0x57, 0x70, 0xad, 0x94, 0x89, 0x31, 0x86, 0x63,
+ 0x3f, 0xc5, 0x0f, 0x95, 0x67, 0x2c, 0x4a, 0x72, 0xdd, 0xdb, 0x19, 0xd6,
+ 0x64, 0x3c, 0xce, 0xfa, 0x70, 0xce, 0xf2, 0xd1, 0xfc, 0x47, 0x25, 0x74,
+ 0xb3, 0x69, 0x0f, 0xeb, 0x25, 0x4d, 0x7b, 0x2d, 0x9f, 0x71, 0xd5, 0xd9,
+ 0xf5, 0x80, 0x3d, 0x26, 0xeb, 0xb7, 0x93, 0x02, 0x93, 0x48, 0x8a, 0x81,
+ 0xd9, 0x9b, 0x37, 0x69, 0xff, 0xfd, 0xf7, 0x1b, 0xa1, 0x6d, 0x0e, 0x73,
+ 0x7a, 0xd7, 0x81, 0x7f, 0x35, 0x93, 0xf5, 0x07, 0xa3, 0x40, 0xa2, 0x9c,
+ 0xf2, 0x07, 0xa6, 0x0e, 0x6f, 0x7c, 0xd3, 0x84, 0xdf, 0x77, 0xbe, 0x89,
+ 0x3c, 0x85, 0x47, 0x76, 0x3a, 0x79, 0x6a, 0x41, 0xe3, 0xc9, 0xfa, 0x5f,
+ 0xcd, 0x7d, 0xed, 0x51, 0xfe, 0xf1, 0xc4, 0x3c, 0xfa, 0x57, 0xf8, 0x15,
+ 0xbf, 0x6c, 0x7c, 0xe3, 0x79, 0xbf, 0x76, 0x2b, 0x66, 0xbf, 0x11, 0x2c,
+ 0x6b, 0xd5, 0xe8, 0x87, 0xab, 0xbd, 0x8c, 0xc9, 0x0f, 0x9f, 0x17, 0x63,
+ 0x9f, 0xf7, 0x54, 0xd4, 0xd4, 0x97, 0xcc, 0xb3, 0xf4, 0x51, 0x35, 0x28,
+ 0xb2, 0x0f, 0x61, 0xbb, 0x73, 0x0d, 0x7d, 0x89, 0x6f, 0xe7, 0x4b, 0x2d,
+ 0xf0, 0xaf, 0x26, 0x12, 0x30, 0xd3, 0x79, 0x56, 0xba, 0x6a, 0xf5, 0xf0,
+ 0x4f, 0xb4, 0x07, 0xea, 0x38, 0x87, 0xaa, 0x95, 0x4d, 0xdb, 0xa5, 0x82,
+ 0xd4, 0x21, 0xb1, 0x30, 0x2b, 0x6f, 0x9c, 0x91, 0x61, 0xc0, 0xb3, 0xc3,
+ 0xe0, 0x01, 0xf9, 0x44, 0x22, 0x72, 0x27, 0xfc, 0xd5, 0x81, 0x06, 0xb9,
+ 0x43, 0x7f, 0x09, 0xb3, 0xcf, 0x2b, 0xbd, 0xb6, 0xcf, 0x77, 0xb8, 0xcc,
+ 0xb3, 0xfc, 0x30, 0x53, 0x60, 0x8d, 0x97, 0x79, 0xc3, 0x32, 0x3a, 0xef,
+ 0x1a, 0x1b, 0xb5, 0xd7, 0x6a, 0x82, 0x0b, 0xc0, 0x13, 0xb2, 0x9c, 0x95,
+ 0x22, 0xd0, 0xfe, 0x6a, 0xc3, 0x0d, 0x4c, 0x83, 0x1b, 0xdf, 0xac, 0x25,
+ 0x41, 0xe6, 0xee, 0x52, 0x5d, 0xac, 0xbb, 0x61, 0x43, 0x35, 0x57, 0xa3,
+ 0xd6, 0xea, 0xeb, 0x38, 0x3d, 0x5d, 0x36, 0x8d, 0x45, 0x7d, 0x3a, 0x7f,
+ 0xca, 0x69, 0x52, 0x3a, 0x0c, 0x21, 0x4b, 0x76, 0xae, 0x8c, 0xd5, 0x3d,
+ 0xb0, 0x5f, 0x5f, 0xf1, 0x15, 0x2b, 0x5d, 0x3b, 0xf9, 0x82, 0x65, 0x3f,
+ 0xb7, 0xb7, 0x08, 0xe5, 0x59, 0x43, 0xb5, 0xea, 0x18, 0x0a, 0x9e, 0x64,
+ 0xca, 0xc7, 0x34, 0xd4, 0x8e, 0x8e, 0x1f, 0xb3, 0x89, 0x0c, 0xb3, 0x66,
+ 0x6c, 0x73, 0x5b, 0x1a, 0x10, 0xc1, 0x3a, 0x38, 0x70, 0x55, 0x90, 0x93,
+ 0x7d, 0x4b, 0x7c, 0x5b, 0x42, 0x57, 0xc3, 0x80, 0x73, 0x5f, 0x9c, 0x8c,
+ 0x2d, 0x84, 0x8b, 0x22, 0x3e, 0x9f, 0x11, 0x90, 0x07, 0xc5, 0x75, 0x97,
+ 0x61, 0xf5, 0x33, 0x10, 0x1e, 0x50, 0x19, 0xb5, 0x31, 0xb1, 0xb5, 0xe1,
+ 0xe7, 0x16, 0x2f, 0xd9, 0xe3, 0xae, 0xda, 0x1d, 0xb4, 0xf0, 0xb0, 0xf1,
+ 0xf8, 0xdf, 0x52, 0x8e, 0x24, 0xe5, 0x30, 0x4a, 0xff, 0x98, 0x0d, 0xff,
+ 0xb8, 0xf9, 0x23, 0xff, 0x23, 0x1b, 0x99, 0x03, 0xa0, 0xd6, 0xb1, 0x04,
+ 0x27, 0xc5, 0x6d, 0x01, 0xa5, 0x17, 0xcc, 0x07, 0x9a, 0x37, 0xfc, 0xc8,
+ 0x61, 0x4d, 0x27, 0xf4, 0xfb, 0x64, 0x74, 0x12, 0x71, 0x3e, 0xdd, 0xa8,
+ 0x72, 0xcd, 0x95, 0x13, 0xa6, 0x1a, 0x68, 0x61, 0x63, 0xd3, 0x2d, 0x73,
+ 0xb2, 0xc1, 0x42, 0xad, 0x97, 0x70, 0xde, 0xd5, 0x45, 0x5a, 0xd4, 0xe0,
+ 0x31, 0xdb, 0xa7, 0x43, 0x14, 0xfe, 0x99, 0x40, 0x7e, 0x97, 0x65, 0xd1,
+ 0x87, 0xe0, 0x31, 0x5c, 0xb3, 0x16, 0x06, 0x5d, 0x4b, 0xf2, 0x4c, 0x7d,
+ 0x45, 0x2f, 0x6d, 0xcf, 0x28, 0x3d, 0xd3, 0x4f, 0x4d, 0x66, 0x84, 0xb7,
+ 0xb5, 0x28, 0x71, 0x93, 0xe0, 0x7d, 0x9e, 0x01, 0x55, 0x51, 0x93, 0xd7,
+ 0x58, 0x07, 0x1f, 0xa1, 0x9e, 0x84, 0x5c, 0x82, 0x19, 0x57, 0x5a, 0xd4,
+ 0x6a, 0x3c, 0x4f, 0x02, 0x84, 0xa7, 0xf7, 0x8b, 0x3b, 0x28, 0x28, 0x80,
+ 0x35, 0xe9, 0x95, 0x59, 0xc7, 0xd7, 0xde, 0xfc, 0x34, 0xc1, 0x4d, 0x3d,
+ 0xde, 0x6a, 0x1c, 0x88, 0x2d, 0xaf, 0x03, 0x6f, 0xa9, 0xad, 0xc7, 0x77,
+ 0x5d, 0x30, 0x64, 0x23, 0x2b, 0xeb, 0x3e, 0xd6, 0x44, 0x09, 0xa5, 0xed,
+ 0x25, 0x8e, 0x1a, 0x01, 0xc6, 0xc9, 0x3a, 0xa4, 0x55, 0xd8, 0x76, 0x1d,
+ 0x30, 0xa1, 0x69, 0xda, 0xe8, 0x62, 0xe9, 0x0d, 0x42, 0xc7, 0xe0, 0xe1,
+ 0xef, 0x7c, 0x5a, 0xf1, 0xf2, 0x7a, 0x75, 0xf9, 0x9c, 0x85, 0x84, 0x56,
+ 0x2c, 0x2e, 0x17, 0xc8, 0xd0, 0x37, 0x6a, 0xd5, 0x10, 0x1d, 0xb7, 0xf6,
+ 0x1d, 0x0a, 0x0f, 0xf0, 0x34, 0x92, 0xb3, 0xa4, 0x83, 0x32, 0xea, 0x77,
+ 0x42, 0x83, 0xa3, 0x17, 0x4f, 0xfd, 0xe5, 0x90, 0xd2, 0x25, 0x7e, 0x56,
+ 0x97, 0xc6, 0x14, 0x27, 0xb8, 0x10, 0xe0, 0x8c, 0x2a, 0x9f, 0xde, 0xc7,
+ 0x86, 0x12, 0xec, 0x38, 0x14, 0xa4, 0x33, 0x1f, 0xdf, 0xc3, 0x6e, 0x1e,
+ 0xa9, 0xbc, 0x11, 0x59, 0x9e, 0xe7, 0x04, 0x7e, 0x04, 0xd4, 0x54, 0x2b,
+ 0x89, 0xa8, 0x3c, 0x45, 0xb8, 0xd1, 0xab, 0x16, 0xac, 0xae, 0x55, 0xe2,
+ 0x39, 0x18, 0x6d, 0xe7, 0x4f, 0xc7, 0x73, 0x98, 0x77, 0x9c, 0x83, 0x8e,
+ 0x49, 0x7f, 0xf1, 0x86, 0xc5, 0x49, 0x98, 0x73, 0x92, 0x2d, 0xb1, 0x31,
+ 0xd7, 0x7f, 0x6c, 0x33, 0x1a, 0x7b, 0xfd, 0xd9, 0x62, 0x4f, 0xcc, 0x5b,
+ 0x28, 0x61, 0x89, 0x3f, 0xcc, 0x89, 0x39, 0xf1, 0x9b, 0x3b, 0x27, 0xe2,
+ 0xa0, 0x29, 0x57, 0x5f, 0x6a, 0x30, 0x7a, 0x3f, 0x21, 0xc3, 0x32, 0xe8,
+ 0xa6, 0x5b, 0x60, 0x6f, 0x65, 0xd1, 0x60, 0x30, 0x99, 0x0d, 0xb3, 0x7a,
+ 0x6b, 0xbe, 0x8d, 0xc7, 0x4a, 0x16, 0x87, 0x63, 0x81, 0x71, 0x43, 0xe2,
+ 0xb1, 0x72, 0x8f, 0x01, 0xe9, 0xa8, 0x45, 0x8e, 0x15, 0xf5, 0x2d, 0x68,
+ 0x14, 0x0d, 0x5a, 0x66, 0xc3, 0x5b, 0x57, 0x53, 0x8b, 0xe4, 0xf4, 0x68,
+ 0x04, 0x56, 0xf2, 0x69, 0xd3, 0x10, 0xd2, 0x9b, 0x3f, 0x78, 0x32, 0x7e,
+ 0x07, 0xc8, 0xf6, 0xce, 0x1e, 0x8b, 0x05, 0xbf, 0x7c, 0xab, 0xe0, 0xd2,
+ 0xb3, 0xac, 0x03, 0xcb, 0x08, 0x2a, 0x37, 0xb6, 0xcb, 0x9b, 0x55, 0x94,
+ 0x40, 0x2c, 0xa8, 0x04, 0x56, 0x64, 0x79, 0x1a, 0xa7, 0x72, 0x94, 0x4d,
+ 0xee, 0xa4, 0x06, 0x19, 0x9b, 0x18, 0x6d, 0x9f, 0xf0, 0x20, 0xc8, 0xc3,
+ 0x68, 0x36, 0x8b, 0xe1, 0x89, 0x92, 0x95, 0x8f, 0x3c, 0xe7, 0xf7, 0x84,
+ 0x22, 0x73, 0x9a, 0xca, 0x32, 0x10, 0x04, 0xc8, 0xdd, 0x40, 0xba, 0xd5,
+ 0x98, 0x92, 0x36, 0x08, 0xc0, 0xd5, 0x0b, 0x19, 0x44, 0x2b, 0xf8, 0xdd,
+ 0x18, 0x0a, 0xf3, 0xb4, 0xbf, 0xa8, 0xed, 0x0e, 0xad, 0x3d, 0x9f, 0x68,
+ 0xec, 0x69, 0x6a, 0xb0, 0x82, 0x09, 0x66, 0x90, 0xc2, 0x54, 0x9c, 0x5f,
+ 0x9f, 0x93, 0xc6, 0xd8, 0xbf, 0x2f, 0x0a, 0xe8, 0xf6, 0xd4, 0x1d, 0x5a,
+ 0x29, 0xd8, 0x20, 0xd8, 0xac, 0x52, 0x1f, 0xb8, 0x99, 0xd4, 0xae, 0x2d,
+ 0x1c, 0x5f, 0x91, 0x16, 0xf4, 0x7a, 0xe9, 0x67, 0xfd, 0x0c, 0xcc, 0x30,
+ 0xaf, 0xad, 0x7a, 0x32, 0x35, 0x39, 0xa2, 0x34, 0x71, 0xc6, 0x9f, 0xe8,
+ 0x3b, 0x24, 0x3b, 0x78, 0x4e, 0x53, 0x2a, 0x9c, 0x3f, 0x3a, 0x77, 0x71,
+ 0x0e, 0x90, 0x7a, 0x6c, 0x62, 0x75, 0x25, 0x1a, 0xa0, 0xe9, 0x93, 0xea,
+ 0x9c, 0x69, 0x5c, 0x72, 0xbf, 0x14, 0x93, 0xba, 0x26, 0x6b, 0xf6, 0x81,
+ 0xdf, 0x98, 0x2a, 0xce, 0xb1, 0x28, 0xd8, 0xd3, 0xb3, 0xe3, 0xb8, 0x8e,
+ 0xa3, 0x0e, 0x18, 0x39, 0x7b, 0x3d, 0xad, 0xc6, 0xd6, 0xbb, 0x72, 0xbd,
+ 0x63, 0x0c, 0xa7, 0x09, 0x33, 0x9c, 0x49, 0x96, 0x25, 0xef, 0xcd, 0xbe,
+ 0x2a, 0x5f, 0x60, 0x52, 0x06, 0xfa, 0x0c, 0x59, 0x96, 0x10, 0x71, 0x6e,
+ 0x5a, 0xbc, 0xcf, 0xb0, 0x5a, 0x95, 0x4d, 0x4a, 0xa5, 0xac, 0x29, 0x29,
+ 0x21, 0xc8, 0xf5, 0x6b, 0x91, 0x33, 0xaa, 0x16, 0x70, 0x6d, 0x10, 0x98,
+ 0x10, 0xc2, 0xf3, 0xa5, 0xa6, 0x12, 0xdf, 0x90, 0x42, 0xc5, 0x3f, 0x12,
+ 0x51, 0x28, 0x53, 0xd6, 0xbe, 0x84, 0x3b, 0x88, 0x19, 0xb5, 0x1f, 0xd2,
+ 0x09, 0x3a, 0x82, 0x86, 0xd9, 0x47, 0xf4, 0x6c, 0x61, 0xdc, 0x3a, 0x83,
+ 0x57, 0x69, 0x69, 0xf0, 0x4b, 0x6e, 0x76, 0xac, 0xe4, 0x20, 0x85, 0x1c,
+ 0xd8, 0x97, 0x89, 0x41, 0xd8, 0x5c, 0x83, 0xca, 0x4a, 0xa4, 0x54, 0xe6,
+ 0xd5, 0x77, 0xce, 0x52, 0xfc, 0x11, 0x20, 0x47, 0x02, 0xff, 0xbc, 0x9d,
+ 0x66, 0x41, 0xf5, 0x33, 0x41, 0xb9, 0x04, 0x83, 0x18, 0xa6, 0x0f, 0xeb,
+ 0xc2, 0x42, 0x25, 0x62, 0xd7, 0x9a, 0x1b, 0xa9, 0xd9, 0xfa, 0x2c, 0xe0,
+ 0x50, 0x1b, 0x5e, 0x42, 0x42, 0xab, 0x50, 0x89, 0x36, 0x10, 0x81, 0x55,
+ 0x68, 0x6f, 0x6e, 0x02, 0x8a, 0x95, 0x3f, 0x9c, 0xd4, 0x43, 0x62, 0x48,
+ 0x5c, 0xec, 0xc1, 0x35, 0xa7, 0x07, 0xdc, 0xe7, 0x58, 0x4c, 0xce, 0xb5,
+ 0x50, 0x01, 0xdd, 0xec, 0x7d, 0x8d, 0x46, 0xe8, 0xf4, 0x2c, 0x15, 0xd2,
+ 0x13, 0xfe, 0xf7, 0xba, 0xe0, 0x55, 0x0f, 0xfb, 0x43, 0x75, 0x4e, 0x10,
+ 0x40, 0x54, 0x1f, 0x9d, 0x08, 0x4a, 0xc6, 0xa2, 0xf9, 0x8d, 0x05, 0xfd,
+ 0xe7, 0xf6, 0x82, 0x61, 0xb8, 0x26, 0x2f, 0xcf, 0xc3, 0x60, 0x60, 0x44,
+ 0x78, 0xb3, 0xdf, 0x0c, 0x5f, 0x69, 0xe5, 0x83, 0xd6, 0x03, 0x78, 0x02,
+ 0x86, 0x64, 0x4b, 0x72, 0x37, 0x5a, 0xdd, 0x65, 0x53, 0x99, 0xbb, 0x2e,
+ 0xcf, 0xdf, 0xf5, 0x2e, 0xaa, 0x8d, 0x02, 0xe9, 0x57, 0x6e, 0xbb, 0x5a,
+ 0x7c, 0x5f, 0xef, 0xf5, 0xf5, 0xe5, 0xf5, 0x3f, 0xc3, 0xfb, 0x0c, 0x17,
+ 0x44, 0xb0, 0x88, 0xca, 0x9d, 0x97, 0xbd, 0xab, 0x65, 0xee, 0x65, 0x74,
+ 0xcc, 0xf0, 0xd6, 0xf1, 0xc8, 0x30, 0x81, 0xd8, 0x8d, 0x57, 0x73, 0xee,
+ 0x5c, 0x60, 0x5b, 0x53, 0x86, 0x21, 0x87, 0x97, 0x06, 0xa5, 0x39, 0xc4,
+ 0xe8, 0xf3, 0xb3, 0x2b, 0x2b, 0x04, 0x3c, 0x0b, 0x4c, 0x56, 0xf0, 0x33,
+ 0x58, 0xab, 0x02, 0xd4, 0xb6, 0xb9, 0xd0, 0x17, 0x4e, 0x2d, 0x87, 0x2a,
+ 0x53, 0x4b, 0xd8, 0x8f, 0x04, 0x2c, 0x4e, 0xe7, 0x81, 0x50, 0xb4, 0x8a,
+ 0xad, 0x7d, 0x87, 0x87, 0x02, 0xf4, 0xea, 0x24, 0xc9, 0xdb, 0x59, 0xbb,
+ 0x99, 0x5c, 0x9e, 0x5b, 0x64, 0x56, 0x68, 0x7b, 0x86, 0x96, 0x2d, 0xa8,
+ 0xe0, 0xec, 0x55, 0xc8, 0x0a, 0xd2, 0x76, 0x6e, 0xe0, 0xdd, 0x60, 0x16,
+ 0x88, 0xd8, 0xa2, 0xd4, 0xec, 0xf8, 0xa4, 0xc6, 0x13, 0xf5, 0xc6, 0x9c,
+ 0x6b, 0xe6, 0xa5, 0xe0, 0x8a, 0xd5, 0x21, 0xd6, 0x0b, 0xc2, 0xaa, 0x91,
+ 0x75, 0xfb, 0x87, 0xa3, 0x69, 0xa4, 0x02, 0x3a, 0xe1, 0x02, 0xbc, 0xe3,
+ 0x3d, 0x52, 0x14, 0x6e, 0xd7, 0x4d, 0x19, 0x68, 0xce, 0xa5, 0x72, 0xa9,
+ 0x82, 0xbb, 0xd3, 0xaf, 0xe1, 0x22, 0x6e, 0x8c, 0x82, 0x69, 0x55, 0x00,
+ 0xd1, 0x8e, 0x01, 0x9b, 0x0a, 0xcc, 0x93, 0x16, 0x10, 0x17, 0x56, 0x1c,
+ 0xbc, 0x45, 0x70, 0xf1, 0x5d, 0xef, 0x7f, 0xfc, 0x74, 0xf9, 0x8e, 0xaf,
+ 0x2e, 0xea, 0x25, 0xec, 0x19, 0xdb, 0x41, 0xb3, 0xad, 0x16, 0xd0, 0x16,
+ 0xde, 0x21, 0xe4, 0x25, 0x2e, 0xff, 0x45, 0xf1, 0xf2, 0x8e, 0xbc, 0xe8,
+ 0xf0, 0xfd, 0x50, 0xd3, 0xf2, 0x15, 0x36, 0xcd, 0x43, 0xa7, 0xa6, 0xc3,
+ 0x66, 0x4b, 0x6a, 0xb7, 0xc4, 0x86, 0x4f, 0x16, 0x46, 0x5b, 0x79, 0x6d,
+ 0x39, 0x48, 0x0b, 0xd2, 0xd4, 0xbc, 0x65, 0x85, 0xda, 0xa0, 0x50, 0x99,
+ 0x32, 0x88, 0x70, 0xd0, 0x04, 0x7e, 0x62, 0x48, 0xd5, 0x50, 0x72, 0x38,
+ 0x13, 0x9a, 0xa8, 0x23, 0x2f, 0xc2, 0x56, 0xf5, 0xab, 0xe6, 0xaf, 0x88,
+ 0x70, 0x1c, 0x01, 0x47, 0x24, 0x17, 0x2a, 0x0d, 0x68, 0xce, 0xca, 0x10,
+ 0xab, 0xab, 0xce, 0xdf, 0x73, 0x96, 0xe6, 0x43, 0x4d, 0xb3, 0x86, 0x2f,
+ 0x7e, 0xf9, 0x85, 0x11, 0x25, 0x32, 0x86, 0x51, 0x3b, 0x1b, 0x93, 0x41,
+ 0xbd, 0x71, 0x2a, 0x9f, 0x92, 0xd0, 0xab, 0xee, 0x15, 0xca, 0x8d, 0x87,
+ 0xb3, 0x99, 0x65, 0x9c, 0xe2, 0xb9, 0x66, 0xb4, 0x95, 0x6a, 0x36, 0x57,
+ 0x7c, 0x35, 0x88, 0x55, 0x8b, 0xf5, 0x1d, 0xba, 0x88, 0xa7, 0xe1, 0xdc,
+ 0xa5, 0x60, 0xb6, 0xbf, 0xc4, 0x5a, 0x8c, 0x50, 0x6c, 0x34, 0xb3, 0x42,
+ 0x1f, 0xc2, 0x15, 0x39, 0x89, 0xad, 0x88, 0x1c, 0x2a, 0x91, 0x15, 0xf1,
+ 0x06, 0xec, 0xda, 0x2f, 0xed, 0x0b, 0xca, 0xb9, 0xc3, 0x86, 0x40, 0x98,
+ 0xc7, 0xfb, 0xa7, 0xef, 0xad, 0xb9, 0x24, 0xd0, 0x55, 0xe8, 0x40, 0x60,
+ 0x01, 0xaf, 0x5a, 0xed, 0xcf, 0x95, 0xe7, 0x2c, 0x25, 0x1d, 0x75, 0x14,
+ 0xa9, 0x1e, 0xda, 0x0c, 0x25, 0x43, 0xac, 0x79, 0xa0, 0x44, 0xc3, 0xce,
+ 0xcf, 0xaf, 0xe5, 0x25, 0x12, 0xd4, 0x23, 0xd0, 0xe2, 0x95, 0x4c, 0x0e,
+ 0x57, 0x13, 0xdc, 0x42, 0x6c, 0x58, 0xb1, 0x5e, 0x01, 0xc0, 0xd0, 0x22,
+ 0x71, 0xb6, 0xba, 0x12, 0xb2, 0x94, 0xa5, 0xc5, 0x22, 0x67, 0x40, 0x61,
+ 0x0f, 0x90, 0xfa, 0x09, 0xd7, 0xd3, 0xf0, 0xde, 0x21, 0x47, 0xc4, 0x4b,
+ 0xa5, 0x6f, 0x6b, 0x19, 0x90, 0x18, 0xa8, 0x30, 0xf9, 0x6c, 0x80, 0xb6,
+ 0x78, 0xaa, 0xa9, 0x82, 0x75, 0x70, 0x1f, 0x0b, 0xd2, 0x51, 0xd0, 0xe5,
+ 0x15, 0xe8, 0x1d, 0x4b, 0x84, 0xc5, 0x47, 0x86, 0x14, 0x93, 0x7f, 0x6d,
+ 0x76, 0x75, 0x20, 0x53, 0x4a, 0x7e, 0x75, 0x20, 0x5a, 0xc6, 0x81, 0xd4,
+ 0x0a, 0x4a, 0x80, 0xa7, 0x27, 0xf5, 0xb7, 0xb9, 0xe2, 0x2b, 0x1a, 0x81,
+ 0xd5, 0x97, 0x65, 0x04, 0x57, 0xff, 0x55, 0xdc, 0x49, 0xff, 0x8d, 0x4e,
+ 0xd2, 0x7c, 0xfd, 0xe6, 0xba, 0x73, 0x7d, 0xf9, 0xe6, 0x75, 0x9d, 0xed,
+ 0x74, 0x7e, 0xf8, 0x72, 0xbd, 0xdc, 0xb3, 0x5e, 0x67, 0x36, 0xfd, 0xe3,
+ 0x93, 0xda, 0x9b, 0x93, 0x4c, 0x6e, 0x9d, 0xb1, 0x4e, 0x0a, 0x84, 0xb1,
+ 0x8e, 0x7d, 0xb1, 0xd8, 0x48, 0x2c, 0x32, 0x05, 0x6f, 0xb3, 0x49, 0x43,
+ 0x79, 0x3c, 0x95, 0x58, 0xfd, 0xba, 0x90, 0x7b, 0x08, 0x60, 0xc1, 0xbb,
+ 0xab, 0x6e, 0xba, 0xbd, 0xa5, 0x0a, 0x48, 0x02, 0x57, 0xec, 0xb9, 0xa1,
+ 0xe0, 0x51, 0xe6, 0xb5, 0xba, 0xf2, 0x69, 0x33, 0x3a, 0xbf, 0xd5, 0xa5,
+ 0x82, 0xc3, 0x9d, 0xc4, 0x3e, 0x1b, 0xcd, 0x81, 0x99, 0xee, 0x10, 0x13,
+ 0x65, 0x7a, 0x62, 0x9c, 0x5d, 0x57, 0xcd, 0x5b, 0x50, 0xc9, 0xa3, 0x71,
+ 0xd7, 0x63, 0x9e, 0xf6, 0xc6, 0xa9, 0x7c, 0xf2, 0xca, 0x45, 0x87, 0x07,
+ 0x90, 0x39, 0x66, 0xd8, 0x31, 0xe1, 0x1c, 0x15, 0xe5, 0x53, 0x39, 0x05,
+ 0x17, 0xd7, 0x78, 0xb0, 0x69, 0x58, 0xea, 0xc3, 0xec, 0xc6, 0xb0, 0x45,
+ 0x5d, 0x0e, 0xb2, 0x49, 0x88, 0x15, 0xae, 0xca, 0x2a, 0x1a, 0x91, 0x1e,
+ 0x26, 0xd9, 0x54, 0x22, 0x4a, 0xad, 0x1d, 0xa7, 0x50, 0xd5, 0x62, 0xbd,
+ 0x7a, 0xe4, 0xe6, 0x8b, 0x39, 0x7c, 0xa3, 0x09, 0x88, 0x4c, 0x73, 0xd6,
+ 0x9b, 0xcc, 0xd5, 0x90, 0xb4, 0x9f, 0x32, 0x72, 0xb0, 0x89, 0x20, 0xef,
+ 0x9d, 0x36, 0xcc, 0x1f, 0xe9, 0xa4, 0xe5, 0xa2, 0x64, 0x6c, 0x9e, 0xf8,
+ 0x4a, 0x1a, 0x2e, 0xbd, 0x99, 0x92, 0xca, 0x65, 0x94, 0x5b, 0x04, 0x1a,
+ 0x04, 0x26, 0x76, 0xc5, 0x18, 0xe9, 0x09, 0x1a, 0x70, 0xe5, 0x59, 0x0f,
+ 0x04, 0xd5, 0xcf, 0x54, 0xa6, 0x20, 0x3a, 0x37, 0xf7, 0xf3, 0x4f, 0xf3,
+ 0xfa, 0xed, 0xc5, 0x33, 0xf2, 0xd9, 0x20, 0x56, 0x10, 0x61, 0x85, 0xad,
+ 0x2e, 0xe6, 0xad, 0xab, 0x2b, 0x76, 0xae, 0xdf, 0x2e, 0xa1, 0x8d, 0x24,
+ 0xf3, 0x94, 0x91, 0x0a, 0xfd, 0xea, 0x9a, 0x12, 0x4b, 0x2a, 0x27, 0x73,
+ 0x58, 0xc8, 0x67, 0x9e, 0x89, 0x03, 0x34, 0x40, 0x1d, 0x1c, 0x59, 0x4c,
+ 0x3f, 0x35, 0x15, 0xe6, 0xff, 0x1e, 0xb4, 0x88, 0x9b, 0x8a, 0x79, 0x21,
+ 0xcb, 0x49, 0x5d, 0xc4, 0x32, 0x40, 0x2f, 0xfa, 0x16, 0x7a, 0x27, 0x34,
+ 0x79, 0xfb, 0xdd, 0xaa, 0xb6, 0x3a, 0x83, 0xd6, 0xab, 0x54, 0xa3, 0x36,
+ 0x73, 0x80, 0xa4, 0xb1, 0x40, 0x76, 0x37, 0xbc, 0xe7, 0xd4, 0x3f, 0xb6,
+ 0xbd, 0x3c, 0xde, 0xc8, 0xa6, 0x52, 0x7a, 0x03, 0x80, 0x2a, 0x67, 0x0a,
+ 0xff, 0x71, 0x81, 0xa0, 0x48, 0x22, 0x5d, 0x64, 0x5b, 0x44, 0xc3, 0x36,
+ 0xe6, 0x22, 0x80, 0xcc, 0xb5, 0xf3, 0x5b, 0xef, 0x87, 0x7f, 0xf4, 0x45,
+ 0xfb, 0xc4, 0x61, 0x8d, 0x30, 0xb9, 0x94, 0xbf, 0x10, 0x47, 0x3d, 0x74,
+ 0x52, 0x90, 0x26, 0x5e, 0x87, 0x45, 0x2c, 0x91, 0x29, 0x51, 0x4f, 0x7b,
+ 0x34, 0x42, 0x10, 0x5a, 0x11, 0x85, 0x3b, 0x6a, 0x57, 0x66, 0x85, 0xdb,
+ 0x33, 0x2d, 0x77, 0xc6, 0x73, 0x6a, 0x48, 0x6b, 0x8b, 0x78, 0x20, 0xe1,
+ 0xe1, 0xb4, 0xb0, 0x1c, 0x58, 0xea, 0x20, 0x75, 0x58, 0x41, 0x2f, 0xed,
+ 0xc3, 0x36, 0xb2, 0x56, 0x72, 0x55, 0xda, 0x7e, 0x46, 0x75, 0x76, 0xfe,
+ 0x35, 0xcb, 0x27, 0x02, 0x66, 0x92, 0x43, 0x31, 0xa5, 0x69, 0x33, 0xb9,
+ 0x2f, 0x1e, 0x2b, 0x3e, 0x82, 0xd5, 0x15, 0x9e, 0xd3, 0x89, 0x51, 0xa9,
+ 0xa6, 0x14, 0x61, 0x6b, 0x89, 0xd3, 0xe7, 0xfb, 0x90, 0xc0, 0x41, 0x65,
+ 0xb6, 0x5d, 0x85, 0xed, 0x67, 0xd8, 0x54, 0x23, 0x33, 0xf4, 0x3c, 0xb3,
+ 0xaa, 0xe7, 0x9d, 0x65, 0x19, 0xc3, 0x73, 0xd2, 0x3a, 0x19, 0xc3, 0xda,
+ 0x28, 0xd6, 0x92, 0x3f, 0xbe, 0x1e, 0xdf, 0x94, 0x0f, 0x27, 0x6b, 0x62,
+ 0xcb, 0xa8, 0x04, 0xc1, 0xad, 0xaf, 0xaf, 0x7d, 0x75, 0x71, 0xf9, 0x0f,
+ 0xf8, 0xe5, 0x6a, 0xe3, 0xfb, 0x64, 0x09, 0xfc, 0xd9, 0x8d, 0x40, 0x26,
+ 0x78, 0xc7, 0xb3, 0x0d, 0x63, 0xf5, 0x05, 0x2e, 0xa0, 0x18, 0xc2, 0x66,
+ 0x25, 0xd3, 0x65, 0x2d, 0x88, 0xaf, 0x7d, 0xe2, 0x02, 0x42, 0x9e, 0x5c,
+ 0x43, 0x0b, 0x83, 0xe3, 0x2e, 0x03, 0x60, 0x45, 0xcf, 0xf5, 0x54, 0x35,
+ 0xd7, 0x84, 0xa9, 0x36, 0xa1, 0x41, 0x28, 0x1d, 0x3e, 0xa6, 0x4f, 0x25,
+ 0xc7, 0xfc, 0x33, 0xde, 0x46, 0xd5, 0x12, 0x44, 0xc5, 0x2c, 0xaa, 0x85,
+ 0xb6, 0xec, 0x43, 0xed, 0x04, 0xd5, 0x3d, 0x72, 0xd8, 0x3c, 0xe1, 0x2e,
+ 0xfd, 0xcb, 0x5f, 0x4c, 0x7f, 0x2b, 0x2d, 0xa9, 0xee, 0xe4, 0xb7, 0x55,
+ 0x59, 0xa3, 0x18, 0x41, 0x6d, 0x7a, 0xf0, 0x0e, 0x41, 0x18, 0x9c, 0x72,
+ 0x4e, 0x6b, 0x16, 0xd7, 0xa4, 0x14, 0x9e, 0x88, 0x3a, 0x49, 0x5b, 0x27,
+ 0x54, 0x11, 0x19, 0xac, 0xd0, 0xf4, 0x9f, 0xfa, 0xfd, 0x98, 0xaa, 0xfa,
+ 0x62, 0x27, 0x0c, 0x8c, 0x64, 0xd3, 0xc3, 0xcd, 0xa0, 0x20, 0xb4, 0x7a,
+ 0x20, 0x95, 0xcb, 0x6f, 0x32, 0x73, 0x68, 0xe6, 0x85, 0x8b, 0xbd, 0x56,
+ 0x2d, 0x63, 0xfe, 0x46, 0x05, 0x6b, 0x4b, 0xec, 0x74, 0x15, 0x74, 0xde,
+ 0x73, 0x31, 0xe0, 0x5d, 0x72, 0x81, 0x87, 0xc0, 0xd3, 0x26, 0xc1, 0xe0,
+ 0x91, 0x65, 0x1c, 0x8b, 0x31, 0x4e, 0xcf, 0x26, 0x15, 0x33, 0xa3, 0xa6,
+ 0x96, 0x20, 0x63, 0x1e, 0xbe, 0x2d, 0x56, 0xe4, 0x7a, 0x90, 0x71, 0x28,
+ 0x96, 0xc4, 0xfd, 0xb0, 0xf6, 0xca, 0xfe, 0x18, 0x72, 0x49, 0xe1, 0xdb,
+ 0x71, 0xdf, 0x50, 0x8f, 0x24, 0xac, 0xb1, 0x34, 0xa7, 0x6f, 0x16, 0xa3,
+ 0xb0, 0x44, 0x13, 0x18, 0x08, 0x1e, 0x32, 0x66, 0x45, 0x43, 0x6d, 0xa8,
+ 0x90, 0x99, 0x56, 0xe9, 0xca, 0xc6, 0x1e, 0x30, 0x9e, 0x4c, 0xe8, 0xe8,
+ 0x34, 0x7c, 0x0f, 0x4a, 0x42, 0x22, 0xb8, 0x00, 0x9c, 0x05, 0x44, 0x36,
+ 0xda, 0x8f, 0x98, 0x4b, 0x82, 0x08, 0xae, 0x5f, 0x46, 0xb0, 0xc4, 0x36,
+ 0xc5, 0xca, 0x75, 0xf2, 0x11, 0xd4, 0x6a, 0x06, 0x6b, 0x63, 0xdc, 0x37,
+ 0x6f, 0x5e, 0xfc, 0xee, 0x56, 0xc2, 0x7f, 0xd4, 0x69, 0xed, 0x71, 0x05,
+ 0x3e, 0xb5, 0xe5, 0x5a, 0xa2, 0x50, 0xc2, 0xe4, 0xf0, 0xe6, 0xda, 0xa0,
+ 0xfc, 0x02, 0xcf, 0xf3, 0x2b, 0x91, 0x10, 0x5e, 0xe8, 0xa8, 0x47, 0x10,
+ 0xaa, 0x8e, 0x5d, 0x30, 0xe1, 0x20, 0xbe, 0xfa, 0xd5, 0xf3, 0x40, 0xf6,
+ 0xf5, 0xe3, 0xc7, 0x33, 0x2f, 0x5d, 0xaa, 0xde, 0xfd, 0x3b, 0x5f, 0x3c,
+ 0xf1, 0x98, 0xdd, 0x69, 0x0d, 0xfb, 0x4f, 0x5e, 0x66, 0x77, 0xe9, 0xd0,
+ 0xc7, 0x0b, 0x76, 0xb8, 0x59, 0xfe, 0xc2, 0x93, 0xe8, 0x92, 0x65, 0x9c,
+ 0xff, 0xc9, 0x6e, 0x4e, 0xed, 0x55, 0x2c, 0x6e, 0xfd, 0xd5, 0x09, 0x10,
+ 0x82, 0xe7, 0xf7, 0xd7, 0xb1, 0x5a, 0xee, 0x2c, 0x5e, 0x98, 0x67, 0x44,
+ 0xbf, 0xbc, 0xf5, 0x98, 0x2d, 0x85, 0xea, 0x87, 0xe4, 0xea, 0x97, 0x69,
+ 0x9c, 0xb3, 0x55, 0x9a, 0xb6, 0x70, 0x22, 0x57, 0xa7, 0xc5, 0x9a, 0x18,
+ 0xfe, 0xea, 0x39, 0xcb, 0x5e, 0x48, 0x78, 0xf3, 0x23, 0x67, 0xe7, 0x40,
+ 0x58, 0x85, 0xa1, 0xb3, 0x52, 0xa5, 0xcd, 0x02, 0xb8, 0x27, 0xf6, 0x7f,
+ 0xf9, 0x80, 0xfe, 0x5e, 0x9e, 0xd3, 0x5f, 0x4b, 0x73, 0xfa, 0x26, 0xb4,
+ 0xac, 0x9a, 0xff, 0x51, 0x34, 0x6d, 0x62, 0xab, 0xe8, 0x49, 0xb0, 0xac,
+ 0xb4, 0x4f, 0xf1, 0x0c, 0xee, 0x39, 0x24, 0x39, 0xf3, 0xbf, 0xf5, 0x9b,
+ 0xd9, 0x70, 0x98, 0x4d, 0xcb, 0x3f, 0x30, 0xde, 0x3f, 0x1b, 0xfc, 0x81,
+ 0x75, 0xe5, 0xd2, 0xc9, 0xd3, 0x46, 0x92, 0x34, 0xf8, 0x5a, 0x23, 0x6c,
+ 0x0c, 0xf8, 0xba, 0x6e, 0x6c, 0x64, 0x64, 0x22, 0x23, 0x29, 0xb8, 0x4e,
+ 0xe0, 0x74, 0x27, 0x8d, 0xb7, 0x6f, 0xae, 0xae, 0x1b, 0x73, 0xb2, 0x3f,
+ 0xb4, 0x35, 0x30, 0xc8, 0x62, 0xff, 0xbc, 0x1a, 0x1b, 0x06, 0x82, 0x1f,
+ 0x4a, 0x20, 0xb8, 0x8b, 0x05, 0xfc, 0x99, 0x62, 0x72, 0xa5, 0x17, 0x61,
+ 0x3c, 0xe0, 0xe9, 0x19, 0x9a, 0x3d, 0x2b, 0xbe, 0x05, 0xef, 0x94, 0x04,
+ 0x93, 0x28, 0x05, 0xfc, 0x06, 0xe7, 0x11, 0xe6, 0xbb, 0xdd, 0x67, 0xfd,
+ 0xf7, 0x12, 0x60, 0x21, 0xae, 0xf9, 0x66, 0x32, 0x5d, 0x64, 0x80, 0xf5,
+ 0x59, 0x09, 0xbd, 0xfb, 0xe6, 0x89, 0x2a, 0x8a, 0x62, 0x85, 0x16, 0x42,
+ 0x20, 0xb9, 0x83, 0x4a, 0xde, 0xf7, 0x23, 0x2c, 0xb5, 0xf3, 0x48, 0x05,
+ 0x61, 0x9e, 0x18, 0x57, 0x0d, 0x3d, 0x13, 0x54, 0xf6, 0x93, 0x97, 0x07,
+ 0x13, 0x7f, 0xed, 0xc9, 0x40, 0x6d, 0x52, 0xe7, 0x6d, 0x89, 0x1e, 0xdd,
+ 0xfb, 0x5c, 0xd5, 0xda, 0x4c, 0xf9, 0x48, 0x21, 0xf3, 0xb5, 0x2b, 0xdc,
+ 0x63, 0x7b, 0xd0, 0xae, 0xab, 0x86, 0xd4, 0x31, 0xec, 0x6e, 0x08, 0x31,
+ 0xb8, 0x37, 0x46, 0xc4, 0x7d, 0xcf, 0x8e, 0x14, 0x07, 0x49, 0xae, 0x62,
+ 0x0a, 0x30, 0x0c, 0xe7, 0x61, 0x86, 0xc6, 0x8f, 0xaf, 0x3e, 0x76, 0x3c,
+ 0x4b, 0x32, 0x7a, 0x24, 0xab, 0x01, 0xc3, 0xd0, 0x70, 0x2b, 0x1b, 0x0f,
+ 0x4a, 0x2c, 0xbe, 0x5e, 0x16, 0x9c, 0x8d, 0x55, 0x3a, 0x09, 0xc5, 0x4d,
+ 0x11, 0xa5, 0xe2, 0x62, 0x8d, 0xbf, 0x31, 0x65, 0x69, 0xa9, 0x77, 0x4b,
+ 0xd2, 0xb1, 0x39, 0x1d, 0x6b, 0x02, 0x75, 0xcf, 0x5c, 0x95, 0xf0, 0x54,
+ 0x3f, 0x69, 0x4f, 0x71, 0xc0, 0x56, 0xe1, 0x5a, 0x23, 0x16, 0x54, 0x91,
+ 0x23, 0x4a, 0x6a, 0xc3, 0x88, 0xb1, 0x90, 0x31, 0xf8, 0x52, 0x54, 0x1e,
+ 0x5a, 0x98, 0x56, 0xd7, 0x24, 0x32, 0x92, 0x54, 0x03, 0x7b, 0xdd, 0x96,
+ 0x8d, 0x99, 0x8d, 0x75, 0x60, 0x86, 0x4f, 0x33, 0xcd, 0xa0, 0xdc, 0x99,
+ 0x8a, 0x5f, 0x93, 0x1a, 0xb4, 0xf9, 0x78, 0xc6, 0x11, 0xd0, 0xd8, 0x1a,
+ 0x24, 0xbb, 0x35, 0xa1, 0x3c, 0xb9, 0x57, 0xf2, 0xaa, 0x36, 0xc6, 0x1a,
+ 0x81, 0xe1, 0x63, 0xdd, 0x6b, 0x72, 0xda, 0x2d, 0x2f, 0x09, 0x5f, 0x1d,
+ 0xa8, 0x5b, 0xe5, 0x8d, 0xe1, 0x64, 0xd6, 0x2c, 0xc0, 0x05, 0xc7, 0x47,
+ 0x56, 0xa6, 0x67, 0x92, 0x19, 0x55, 0xb4, 0xcc, 0x3f, 0x00, 0x46, 0x2b,
+ 0x55, 0xdc, 0x2d, 0xa7, 0xd9, 0x43, 0xb2, 0x5b, 0xa5, 0x01, 0x4b, 0xe6,
+ 0x95, 0x84, 0x3d, 0x59, 0x34, 0x6c, 0x7c, 0x5e, 0x07, 0x3c, 0x54, 0x25,
+ 0x37, 0x96, 0xf5, 0xaf, 0x3e, 0xee, 0x6c, 0x35, 0x0d, 0xd9, 0x9e, 0xc3,
+ 0x3f, 0x1d, 0xf8, 0xe7, 0x78, 0xc3, 0x4e, 0x41, 0x4a, 0xf7, 0xeb, 0x8c,
+ 0x11, 0x7c, 0x40, 0xca, 0x15, 0x27, 0xcf, 0x9a, 0x02, 0xda, 0xd3, 0x3a,
+ 0x73, 0xd1, 0x4d, 0x74, 0x38, 0xbb, 0xf1, 0x96, 0x35, 0x29, 0xba, 0x20,
+ 0xf1, 0x48, 0x3d, 0x1f, 0x2b, 0x16, 0xf9, 0x6a, 0xbc, 0x44, 0x83, 0x21,
+ 0xbb, 0x57, 0xb2, 0x4f, 0x84, 0xa3, 0xdd, 0xce, 0x26, 0x84, 0x6d, 0xca,
+ 0xd7, 0xc3, 0x4e, 0x45, 0x78, 0xdc, 0x20, 0x2f, 0xfb, 0x50, 0x48, 0x0f,
+ 0x83, 0x29, 0x9f, 0x20, 0x72, 0xcf, 0x06, 0x56, 0x82, 0xe0, 0x31, 0x44,
+ 0xf6, 0xc7, 0xb0, 0x56, 0x34, 0x8b, 0x0e, 0xdc, 0x8a, 0x34, 0xee, 0x9b,
+ 0x27, 0x5e, 0x61, 0xe4, 0x83, 0x9c, 0xa4, 0x8f, 0x07, 0x73, 0xcd, 0x63,
+ 0xab, 0x2b, 0x58, 0xf7, 0x87, 0xed, 0x12, 0xf1, 0x9b, 0x5c, 0xc8, 0xab,
+ 0x2b, 0xa1, 0xc5, 0x4a, 0xd3, 0xbc, 0x1d, 0xe8, 0x04, 0xfc, 0xe8, 0x36,
+ 0x41, 0x92, 0xac, 0xa3, 0xaa, 0x82, 0x2d, 0x0d, 0x86, 0xec, 0x75, 0x9f,
+ 0x9a, 0xd1, 0x95, 0xb5, 0x2f, 0xa2, 0xb3, 0x21, 0xba, 0xe5, 0x38, 0x96,
+ 0x78, 0x5d, 0xe8, 0x14, 0x58, 0x0b, 0x50, 0x2a, 0xa3, 0x37, 0x40, 0x0b,
+ 0x93, 0x14, 0x40, 0x9e, 0x84, 0x57, 0x18, 0x92, 0x85, 0xdc, 0x2c, 0x97,
+ 0x03, 0xe6, 0x0d, 0xb5, 0x32, 0xc0, 0x9a, 0xcd, 0x81, 0x8a, 0x28, 0x17,
+ 0x2a, 0x80, 0x2e, 0x09, 0x26, 0x15, 0xd9, 0x4a, 0x58, 0xc1, 0x13, 0x40,
+ 0xfc, 0xd8, 0xce, 0xda, 0x10, 0xe1, 0xd8, 0xbd, 0x5c, 0xa2, 0xd3, 0x30,
+ 0xbe, 0x13, 0xea, 0x00, 0x57, 0x3b, 0x9f, 0x2c, 0xdf, 0x77, 0xd4, 0x5b,
+ 0x42, 0xd6, 0xc2, 0x05, 0xbb, 0x2a, 0xcc, 0x62, 0xd1, 0x80, 0x4f, 0x00,
+ 0xcd, 0x16, 0x48, 0x4f, 0x73, 0x26, 0xa6, 0x7f, 0x50, 0xa2, 0xa0, 0x2f,
+ 0xf1, 0x99, 0xaa, 0xce, 0x87, 0x50, 0xfa, 0xe2, 0x09, 0xf1, 0xf7, 0x37,
+ 0x1d, 0xbc, 0x2a, 0xd6, 0xbc, 0x16, 0xdc, 0xd3, 0x86, 0xf7, 0x99, 0xf3,
+ 0x79, 0xa0, 0x32, 0x97, 0xa7, 0xe6, 0x3b, 0x2a, 0xff, 0xb8, 0x35, 0x20,
+ 0xfd, 0x59, 0xe0, 0x5d, 0xc7, 0x77, 0x5f, 0xb2, 0x4e, 0xde, 0x31, 0x42,
+ 0xb5, 0x1d, 0x0b, 0x54, 0x9b, 0xe5, 0x27, 0x0a, 0x78, 0x00, 0xea, 0x7d,
+ 0xdf, 0x26, 0x9e, 0x11, 0xd7, 0x25, 0xf2, 0xb9, 0x19, 0xb8, 0x70, 0x10,
+ 0x2e, 0x00, 0xdd, 0x13, 0x93, 0xcf, 0xed, 0xfc, 0xb1, 0x01, 0xe1, 0x07,
+ 0x0c, 0x80, 0xf5, 0x8e, 0x3e, 0x3f, 0xd3, 0xa5, 0x92, 0xf9, 0x86, 0x91,
+ 0x19, 0xc9, 0x20, 0x69, 0x60, 0x21, 0x0b, 0xb3, 0xb1, 0x4e, 0xac, 0xb4,
+ 0xcc, 0xbf, 0xa5, 0xf6, 0xb7, 0x4e, 0xe5, 0xb7, 0x41, 0xaa, 0x1e, 0x54,
+ 0x77, 0xb9, 0x6a, 0x03, 0x3e, 0xf7, 0xad, 0xd6, 0xc4, 0x21, 0xdd, 0xec,
+ 0x16, 0xa8, 0x72, 0x38, 0x1b, 0x8d, 0x49, 0x12, 0x4c, 0x1e, 0x65, 0x15,
+ 0xf5, 0x86, 0xe1, 0x23, 0xc1, 0x91, 0x92, 0xc7, 0x1a, 0xe1, 0xa7, 0x51,
+ 0x3e, 0x18, 0x0c, 0x33, 0x69, 0xaa, 0x62, 0x12, 0xc2, 0x92, 0xd7, 0xa9,
+ 0xd4, 0xba, 0xd6, 0x18, 0xd5, 0x95, 0xd8, 0x05, 0x62, 0xd7, 0x02, 0xf6,
+ 0x22, 0x79, 0xf2, 0x58, 0x13, 0x9b, 0x5a, 0xc7, 0x25, 0x9c, 0xdf, 0x60,
+ 0x75, 0x4d, 0x21, 0xe3, 0x0a, 0xea, 0x35, 0x83, 0x5a, 0xf2, 0x5d, 0x63,
+ 0xbb, 0x91, 0xdc, 0x02, 0x18, 0xc1, 0x77, 0x0d, 0xba, 0x02, 0x21, 0x00,
+ 0xa4, 0x36, 0x4c, 0x27, 0xf0, 0xf1, 0xb4, 0x26, 0x63, 0xee, 0xdb, 0x4d,
+ 0xf3, 0x1b, 0xb4, 0x76, 0x7f, 0x9a, 0xc2, 0x96, 0x73, 0x1d, 0x37, 0x57,
+ 0xec, 0x55, 0x7e, 0x3b, 0x5c, 0xda, 0x84, 0xf6, 0x36, 0xa5, 0x6d, 0xc8,
+ 0x75, 0xe7, 0x57, 0x98, 0xaf, 0x66, 0x9d, 0xd2, 0xef, 0x1a, 0x50, 0x88,
+ 0xfd, 0xe3, 0xd3, 0xef, 0x0d, 0x5c, 0x37, 0x73, 0xeb, 0x80, 0x7e, 0xc4,
+ 0xac, 0xfe, 0x8f, 0xc9, 0x53, 0xf2, 0xbb, 0x2d, 0x6f, 0xe2, 0xfd, 0x04,
+ 0x5b, 0x39, 0xc1, 0x7f, 0x2a, 0x37, 0xc1, 0x39, 0x8c, 0xef, 0xf0, 0xde,
+ 0x83, 0x24, 0x32, 0x38, 0xe1, 0x3f, 0x1d, 0xfc, 0x9b, 0x9e, 0xf0, 0x9f,
+ 0x33, 0xba, 0x9c, 0x9e, 0x44, 0xbb, 0xd1, 0x59, 0x5d, 0xc1, 0x37, 0x9d,
+ 0x2d, 0xea, 0x4a, 0x27, 0x71, 0x9f, 0xcf, 0xdc, 0xe7, 0x85, 0x9d, 0x5b,
+ 0x5d, 0x11, 0x52, 0x1e, 0x9c, 0xd8, 0x0f, 0x1d, 0xfe, 0x94, 0x9e, 0xd8,
+ 0x0f, 0x67, 0xe1, 0x5d, 0x35, 0x1d, 0x36, 0x5b, 0x02, 0xba, 0x7c, 0x8e,
+ 0x1d, 0xa2, 0xff, 0xa0, 0x3b, 0xe7, 0xf0, 0xa9, 0x6e, 0x0c, 0xe7, 0x49,
+ 0xfc, 0x81, 0xf3, 0x58, 0xef, 0x37, 0x79, 0x29, 0x37, 0x91, 0xac, 0xc2,
+ 0xb3, 0xdd, 0x16, 0xd4, 0x94, 0x32, 0x21, 0x10, 0x05, 0x3f, 0x46, 0x1e,
+ 0x08, 0x4a, 0xf3, 0x34, 0x79, 0xcc, 0x86, 0xc3, 0x16, 0x68, 0xc2, 0xd9,
+ 0x60, 0x63, 0x3e, 0x31, 0x53, 0x9d, 0x82, 0xda, 0x38, 0x9f, 0x8a, 0xef,
+ 0xa3, 0x9a, 0xbb, 0x0a, 0xca, 0x8e, 0x39, 0x76, 0x06, 0x18, 0xb9, 0xdf,
+ 0x2a, 0x33, 0x5d, 0x6b, 0xbd, 0x2b, 0xd7, 0xa1, 0xde, 0x3a, 0xd5, 0xf2,
+ 0x9c, 0x5b, 0x31, 0x11, 0xda, 0x69, 0x71, 0xd1, 0x4f, 0xb1, 0x8a, 0xf6,
+ 0x55, 0x1b, 0xf2, 0x93, 0x24, 0xfe, 0xa9, 0xf6, 0xa1, 0x2c, 0x6c, 0xdf,
+ 0xcb, 0xf8, 0x03, 0xce, 0xfa, 0x50, 0x4c, 0xa6, 0xae, 0xae, 0xf1, 0xbc,
+ 0xd8, 0x2c, 0x1b, 0x4c, 0x4a, 0x0e, 0x67, 0x7d, 0x0c, 0xd9, 0x42, 0x4c,
+ 0xe5, 0xec, 0xa6, 0xcc, 0xa6, 0x5e, 0xd9, 0x4c, 0x41, 0x78, 0x57, 0x3e,
+ 0x65, 0xd4, 0x8a, 0xb2, 0x8f, 0xfc, 0x1d, 0xec, 0xd3, 0x6c, 0x87, 0xe6,
+ 0x8a, 0xf4, 0x3e, 0xdc, 0xb9, 0x38, 0xec, 0x6f, 0xd2, 0xd2, 0x99, 0x92,
+ 0xc5, 0x9c, 0x47, 0xed, 0x0b, 0xac, 0x17, 0x47, 0xa3, 0x3e, 0xa7, 0x80,
+ 0x4a, 0x38, 0xfb, 0xf5, 0xd0, 0x06, 0xc7, 0x16, 0xd8, 0x60, 0x2f, 0x5e,
+ 0x36, 0x45, 0x9a, 0xba, 0x92, 0x15, 0x66, 0x34, 0x65, 0x7d, 0xbd, 0x26,
+ 0xba, 0x87, 0x27, 0x87, 0x9e, 0x54, 0x5f, 0x54, 0x28, 0xbb, 0xf3, 0xef,
+ 0x51, 0x2a, 0x12, 0xdf, 0x6b, 0x3f, 0x2f, 0x13, 0xd9, 0xe3, 0xbd, 0x86,
+ 0x3b, 0xe8, 0xbd, 0x2d, 0xc8, 0x8b, 0xfc, 0x75, 0x2d, 0xb9, 0xfa, 0x3e,
+ 0x59, 0xbb, 0x7c, 0xdd, 0x7d, 0xf9, 0xd3, 0x79, 0x8f, 0xbe, 0xfc, 0xea,
+ 0x47, 0x8b, 0x98, 0xa5, 0xbf, 0xc2, 0x45, 0x27, 0xdf, 0x92, 0xf7, 0x95,
+ 0x03, 0x4f, 0xd6, 0x7e, 0xfb, 0xed, 0xeb, 0x3b, 0x2c, 0x15, 0xf1, 0xf9,
+ 0xc1, 0x02, 0x8f, 0xd1, 0x38, 0x74, 0xbc, 0x55, 0x07, 0x16, 0x08, 0xd3,
+ 0x0f, 0xfb, 0x6f, 0x4c, 0x38, 0x4f, 0xcb, 0x45, 0xe4, 0xe8, 0x09, 0x96,
+ 0x59, 0x52, 0xf3, 0x5c, 0x33, 0x49, 0x3f, 0xbc, 0x7e, 0xf3, 0x2e, 0x3e,
+ 0x47, 0xee, 0x61, 0x86, 0x36, 0x29, 0xf5, 0xc2, 0xc9, 0x35, 0x4a, 0x17,
+ 0x75, 0xd3, 0xf5, 0x7f, 0xde, 0x6c, 0xb9, 0xd1, 0x55, 0x66, 0xcd, 0x0d,
+ 0x32, 0x4a, 0xff, 0x97, 0x78, 0x63, 0xe3, 0x94, 0xfe, 0x72, 0x04, 0x98,
+ 0x9d, 0xde, 0x1a, 0xea, 0x5f, 0x38, 0x99, 0x89, 0xa3, 0xbc, 0xf9, 0xef,
+ 0x52, 0xe5, 0x7c, 0xa2, 0x43, 0x94, 0x47, 0x78, 0x58, 0xf2, 0x64, 0x6d,
+ 0x19, 0x24, 0x2a, 0x17, 0xc4, 0xf9, 0xbf, 0x2d, 0x3f, 0x96, 0x2d, 0xfc,
+ 0x1d, 0x20, 0x6a, 0x65, 0xa0, 0x7f, 0xd8, 0x1e, 0x57, 0xcb, 0x10, 0xe9,
+ 0x67, 0x36, 0x96, 0xc6, 0x4d, 0x57, 0x36, 0xfb, 0x39, 0x8b, 0xfb, 0x99,
+ 0x23, 0x4b, 0x02, 0x32, 0x23, 0xcc, 0xb5, 0xd5, 0x95, 0x08, 0xb7, 0x8d,
+ 0x42, 0xb0, 0x5d, 0x52, 0x89, 0x3c, 0x66, 0xfd, 0x0d, 0x57, 0x2f, 0xee,
+ 0x2f, 0xbf, 0xb2, 0x24, 0xd0, 0x30, 0xe7, 0x05, 0x5f, 0x77, 0x97, 0xe0,
+ 0x50, 0xe1, 0x8b, 0x34, 0x89, 0xf2, 0x0b, 0xc5, 0x2d, 0x44, 0x4e, 0x49,
+ 0x0f, 0x4e, 0x0c, 0xad, 0x94, 0x73, 0xf0, 0xc4, 0xea, 0xb1, 0xb3, 0x9a,
+ 0xe8, 0x16, 0xa2, 0xee, 0x8e, 0x38, 0xfa, 0xfe, 0xd9, 0xf0, 0x61, 0x9e,
+ 0x3b, 0xe2, 0x65, 0xfe, 0x9e, 0xb4, 0x5e, 0x0c, 0xfe, 0x18, 0x73, 0x82,
+ 0x9a, 0x3d, 0x65, 0xe1, 0x34, 0xa4, 0x93, 0x16, 0x6c, 0x26, 0xd1, 0x91,
+ 0x29, 0x38, 0x23, 0x8e, 0x5d, 0xe1, 0x80, 0x0f, 0x08, 0xd1, 0x19, 0x66,
+ 0xbe, 0xb7, 0x1b, 0xd0, 0xa4, 0xa9, 0x04, 0x96, 0xf9, 0xc4, 0x3a, 0x1b,
+ 0x41, 0x7c, 0xd2, 0x41, 0x4c, 0xb7, 0x40, 0x81, 0x1b, 0xc4, 0xb0, 0x43,
+ 0x40, 0xb6, 0xf0, 0x8d, 0x65, 0x93, 0x3a, 0x3b, 0x42, 0x33, 0x0c, 0x6b,
+ 0xc0, 0x4a, 0x51, 0x76, 0x9a, 0x1d, 0x5b, 0xa5, 0xe4, 0x04, 0x17, 0x8c,
+ 0xa3, 0xf8, 0xf2, 0x60, 0x40, 0x3f, 0x1d, 0x3f, 0x81, 0xb3, 0xce, 0xa2,
+ 0x93, 0x96, 0xf3, 0x9a, 0x40, 0x11, 0x27, 0x9d, 0x4c, 0x95, 0x20, 0x81,
+ 0x8e, 0x52, 0xbf, 0x07, 0x24, 0x7d, 0xcc, 0xeb, 0x02, 0x32, 0xf7, 0xd0,
+ 0x5d, 0x38, 0xa7, 0x03, 0x56, 0xd8, 0xc2, 0x1e, 0x80, 0x0d, 0x85, 0x65,
+ 0x1b, 0xb0, 0x26, 0x84, 0xfd, 0xa9, 0xa9, 0xe5, 0xf8, 0x79, 0x2a, 0x73,
+ 0xf9, 0x7b, 0xd1, 0x8a, 0xc8, 0xe4, 0xd4, 0x98, 0x64, 0xc3, 0x1c, 0xd5,
+ 0x32, 0x88, 0xdd, 0x37, 0x2b, 0x57, 0x4d, 0xd7, 0xce, 0x10, 0x74, 0x95,
+ 0x92, 0x9f, 0x63, 0x33, 0x54, 0x3a, 0x82, 0x47, 0x1b, 0x04, 0xa0, 0xe4,
+ 0x23, 0xf8, 0x14, 0x14, 0xb4, 0x34, 0x74, 0xd6, 0x9f, 0x0a, 0xf2, 0x61,
+ 0xf4, 0x61, 0x4a, 0xf8, 0x2c, 0x67, 0x13, 0x27, 0xb8, 0x03, 0x2e, 0x9f,
+ 0x25, 0x8b, 0x62, 0x06, 0x34, 0x05, 0x29, 0xc6, 0xeb, 0xdc, 0x89, 0x8d,
+ 0xba, 0x75, 0xb2, 0x48, 0x8b, 0xf4, 0x5a, 0x0a, 0xb4, 0x13, 0xab, 0xc3,
+ 0x65, 0x1d, 0x0b, 0x60, 0xcb, 0x95, 0xa2, 0xc6, 0x90, 0xe4, 0x28, 0x5c,
+ 0xaa, 0x64, 0x60, 0x16, 0xc8, 0x2e, 0x35, 0xfb, 0xe6, 0x2e, 0x9b, 0x3c,
+ 0xa7, 0x39, 0x4d, 0x3e, 0x88, 0x31, 0x68, 0xc7, 0x46, 0x55, 0x89, 0x69,
+ 0xaf, 0x8f, 0xe3, 0x8d, 0xfa, 0x09, 0xe8, 0x11, 0xc8, 0xa5, 0xe4, 0x4b,
+ 0x51, 0x8b, 0xc2, 0x6b, 0x2d, 0xa5, 0xf2, 0xda, 0x1c, 0x5a, 0x90, 0xdd,
+ 0x56, 0x92, 0x8f, 0x09, 0xef, 0x44, 0x0b, 0xce, 0x50, 0x81, 0xf3, 0x96,
+ 0x94, 0xae, 0x4a, 0x5b, 0x2e, 0x64, 0xe2, 0x0a, 0xb9, 0x57, 0xed, 0xd0,
+ 0x26, 0x28, 0x0b, 0xd9, 0xc3, 0x34, 0xfa, 0x4e, 0xc4, 0x9d, 0x29, 0xed,
+ 0x79, 0xe0, 0x9f, 0x13, 0x52, 0x86, 0xb1, 0x8c, 0x9f, 0x0c, 0xcd, 0x64,
+ 0x66, 0x78, 0xf9, 0x90, 0xcc, 0x27, 0x82, 0xef, 0x1a, 0xdd, 0xc5, 0x40,
+ 0x92, 0x39, 0x18, 0xe2, 0x66, 0xe3, 0x41, 0x3b, 0xb1, 0x20, 0xa1, 0x91,
+ 0xba, 0xb4, 0xb2, 0xdf, 0x2d, 0x74, 0x8e, 0x75, 0x50, 0x59, 0x3b, 0x7a,
+ 0x25, 0xaf, 0xf6, 0x99, 0x4c, 0x71, 0xee, 0x61, 0xc4, 0xa0, 0xbc, 0x61,
+ 0x0f, 0x05, 0xd4, 0xd2, 0x9a, 0x28, 0x61, 0x81, 0xa6, 0xa5, 0x45, 0x88,
+ 0xba, 0x71, 0xce, 0x52, 0x15, 0xe0, 0x66, 0x0e, 0x09, 0x0c, 0xa4, 0xb3,
+ 0x81, 0x73, 0x85, 0xe8, 0x71, 0x58, 0xa4, 0x16, 0x49, 0xa1, 0xae, 0xa7,
+ 0xca, 0x9a, 0x69, 0xcb, 0x75, 0xd6, 0x58, 0xe0, 0xfe, 0x9a, 0x0c, 0x26,
+ 0x86, 0x2a, 0x94, 0xa6, 0x11, 0x98, 0xda, 0xfe, 0x9a, 0xdc, 0x62, 0x91,
+ 0x0b, 0x2b, 0x65, 0x9f, 0x82, 0xd1, 0x86, 0xd6, 0xfa, 0xaf, 0xf8, 0xec,
+ 0xc9, 0xaf, 0x21, 0xc0, 0x54, 0x51, 0xbc, 0x4f, 0xd6, 0xe5, 0x5c, 0xfb,
+ 0xc6, 0x70, 0x36, 0x88, 0x72, 0x16, 0x28, 0xc5, 0x72, 0xf6, 0xf0, 0xc0,
+ 0x71, 0x1c, 0x88, 0xa8, 0x48, 0x74, 0x61, 0x9b, 0xc4, 0xb7, 0xd5, 0x34,
+ 0xb9, 0x44, 0x3b, 0x95, 0x82, 0x61, 0x7f, 0x69, 0xb5, 0x94, 0x45, 0x60,
+ 0x0d, 0xc4, 0x30, 0x70, 0xde, 0xb6, 0xa6, 0x05, 0x00, 0xe2, 0xae, 0x59,
+ 0x85, 0x14, 0x9c, 0x30, 0x6f, 0xad, 0x13, 0xe6, 0x1a, 0xac, 0xb8, 0x12,
+ 0xb3, 0xf5, 0x92, 0x75, 0xe3, 0x2b, 0xd1, 0x8d, 0xb5, 0x99, 0xe0, 0x97,
+ 0x05, 0xa1, 0x3d, 0xba, 0x2e, 0x22, 0x06, 0xf4, 0x70, 0x84, 0xc4, 0xfb,
+ 0x0c, 0x31, 0x1c, 0x08, 0x60, 0xc1, 0xb3, 0x9c, 0xea, 0xd8, 0xc9, 0x24,
+ 0xfd, 0x90, 0xe6, 0xc3, 0x54, 0x00, 0x97, 0x7d, 0x57, 0xf3, 0x8b, 0x8a,
+ 0x67, 0xd1, 0x9a, 0x3e, 0x75, 0x8c, 0xe8, 0x5a, 0x99, 0xdc, 0x65, 0x86,
+ 0xc1, 0x79, 0x41, 0xf5, 0x51, 0xd7, 0xaa, 0x7d, 0x9c, 0x62, 0xcb, 0x7d,
+ 0xd8, 0xa7, 0xf7, 0xe3, 0xe2, 0x71, 0xcc, 0x05, 0x37, 0x0c, 0xab, 0xc7,
+ 0xee, 0x40, 0xf5, 0x47, 0xf5, 0x26, 0x23, 0x50, 0x2b, 0x63, 0xb7, 0x9d,
+ 0x8d, 0xd2, 0x8d, 0x59, 0x8d, 0xc7, 0xbd, 0xc3, 0xb3, 0xb8, 0xab, 0x28,
+ 0x63, 0x41, 0x19, 0xd1, 0xaf, 0x38, 0x09, 0x4d, 0xea, 0xc1, 0x5b, 0x20,
+ 0xfb, 0xd2, 0x7b, 0x8d, 0x37, 0xc7, 0xf6, 0x9d, 0x9e, 0x81, 0x56, 0x59,
+ 0xf9, 0x6d, 0x5d, 0x6c, 0xe0, 0x25, 0x2e, 0x6e, 0x1c, 0x85, 0xfc, 0x3a,
+ 0xff, 0xdf, 0x83, 0xa6, 0x37, 0xca, 0xca, 0x82, 0x6f, 0xdb, 0x92, 0x3e,
+ 0xf6, 0x75, 0x8f, 0x6b, 0x64, 0x9f, 0x30, 0x50, 0x32, 0xc2, 0x86, 0x8a,
+ 0x79, 0xea, 0xe1, 0xfe, 0xa9, 0x04, 0xea, 0x6a, 0x91, 0xc0, 0xe7, 0x2c,
+ 0x24, 0x6f, 0xf9, 0x07, 0x47, 0x76, 0x73, 0xcd, 0x53, 0xc4, 0x6c, 0x5c,
+ 0xca, 0x17, 0x7e, 0x83, 0xfd, 0xef, 0x65, 0x23, 0xb3, 0x70, 0x2a, 0x05,
+ 0x4d, 0x0a, 0x88, 0xc2, 0x47, 0xc8, 0x8d, 0x31, 0xb8, 0x7f, 0x8b, 0x49,
+ 0x7a, 0x07, 0xfe, 0x1e, 0xc3, 0x9d, 0xda, 0x5f, 0xd2, 0x57, 0x81, 0x25,
+ 0xed, 0x0f, 0xdc, 0x49, 0x07, 0x30, 0x0f, 0x30, 0xe1, 0x5c, 0xaa, 0x57,
+ 0xaa, 0x37, 0xd3, 0xac, 0xb1, 0xc9, 0xec, 0x84, 0x8b, 0xbf, 0x18, 0x62,
+ 0xc1, 0x30, 0x88, 0x58, 0x05, 0x5f, 0xf2, 0x6a, 0x41, 0xbe, 0x1d, 0xdc,
+ 0xb6, 0xce, 0x47, 0x97, 0x90, 0x51, 0xcc, 0xbe, 0x86, 0xa8, 0x71, 0x76,
+ 0x76, 0xc2, 0xfc, 0x49, 0x68, 0x8f, 0x03, 0x13, 0x6b, 0x6d, 0x73, 0x11,
+ 0xd5, 0xc0, 0x35, 0xb0, 0xe1, 0x76, 0x1c, 0xb0, 0x7d, 0xc1, 0x3d, 0xe6,
+ 0xce, 0x8f, 0x31, 0x45, 0xca, 0x2f, 0x9f, 0xa3, 0xb1, 0x49, 0x7b, 0x10,
+ 0xe2, 0xe0, 0x2d, 0x1f, 0x38, 0x9d, 0x40, 0xa5, 0x90, 0x1a, 0xe6, 0xaa,
+ 0xb6, 0xf1, 0xf3, 0x47, 0x27, 0xde, 0xc4, 0x32, 0x9b, 0x7c, 0x80, 0x7d,
+ 0x97, 0x96, 0xae, 0x90, 0x32, 0xee, 0xac, 0x02, 0x42, 0x49, 0x6b, 0x67,
+ 0x0f, 0x56, 0x16, 0x36, 0x1f, 0xd5, 0x3d, 0x54, 0xfe, 0x26, 0x97, 0x7d,
+ 0x4a, 0xe0, 0xed, 0x0e, 0xdd, 0x95, 0x3c, 0x78, 0x86, 0x7e, 0x2a, 0xa1,
+ 0xd8, 0x0f, 0xa7, 0xb2, 0x49, 0x04, 0x63, 0x95, 0xa3, 0x48, 0x59, 0xa6,
+ 0x31, 0x9d, 0x90, 0x2c, 0xd7, 0x76, 0x25, 0x54, 0x95, 0xae, 0xab, 0xca,
+ 0x55, 0xd7, 0xa0, 0x3b, 0xda, 0x2d, 0xc0, 0xb3, 0x2d, 0xf0, 0x93, 0x34,
+ 0x0d, 0x6b, 0xa5, 0x2e, 0x0b, 0x4e, 0x35, 0x87, 0x26, 0xec, 0xfe, 0x9d,
+ 0x08, 0x0e, 0x21, 0x1e, 0xd3, 0xcb, 0x15, 0x9b, 0x87, 0x22, 0x4e, 0x1a,
+ 0x85, 0xfc, 0x84, 0xb8, 0xe3, 0x52, 0x85, 0xac, 0x59, 0x19, 0x2e, 0x73,
+ 0x8c, 0x1a, 0xc3, 0x02, 0x83, 0xa0, 0xd0, 0xdd, 0x01, 0xb6, 0x8a, 0xd6,
+ 0x58, 0xd4, 0xa4, 0x05, 0x76, 0xd6, 0x2a, 0x3b, 0xb0, 0xd9, 0xc1, 0x3c,
+ 0x25, 0x3f, 0x49, 0x8e, 0xb0, 0xe2, 0x0c, 0x34, 0x2f, 0xd1, 0xec, 0x61,
+ 0xb2, 0xc4, 0xa7, 0x10, 0x14, 0x54, 0xcc, 0x26, 0xd6, 0xa7, 0x6b, 0xe7,
+ 0x0a, 0x6b, 0x31, 0x10, 0x54, 0x0f, 0xe7, 0x8c, 0x2c, 0x35, 0xd2, 0x26,
+ 0xd1, 0x04, 0x78, 0xc8, 0xcc, 0xf5, 0xe6, 0x97, 0xe4, 0x31, 0x3b, 0xe8,
+ 0x0f, 0xdd, 0x11, 0x7f, 0xa8, 0xe9, 0x29, 0x6a, 0x4a, 0x2e, 0x36, 0xc0,
+ 0xe1, 0x12, 0x99, 0x36, 0xda, 0xb4, 0xd9, 0x82, 0xb9, 0xc0, 0xfd, 0x06,
+ 0x71, 0x6b, 0x2e, 0x57, 0xad, 0x0a, 0x0d, 0x35, 0x37, 0x01, 0xce, 0xdf,
+ 0xff, 0x78, 0xfe, 0xb4, 0x93, 0xb3, 0xec, 0xa9, 0xc0, 0xf0, 0x16, 0x4e,
+ 0x78, 0x60, 0xfa, 0xc1, 0x40, 0xca, 0x2a, 0x18, 0x92, 0xd8, 0x23, 0x5c,
+ 0x3e, 0x9c, 0x3b, 0x18, 0xa9, 0x97, 0x08, 0xc1, 0x2d, 0xf9, 0x43, 0xf6,
+ 0xe4, 0x8b, 0x05, 0xa7, 0x35, 0xa9, 0x75, 0x20, 0xda, 0xd2, 0x0f, 0x19,
+ 0x2f, 0xc5, 0xbc, 0xaf, 0x35, 0x50, 0x99, 0x0e, 0xde, 0x34, 0x79, 0x56,
+ 0xc6, 0x48, 0xef, 0xad, 0x9a, 0xb2, 0x9c, 0x8f, 0xce, 0x7c, 0xfc, 0xa1,
+ 0x78, 0xef, 0xc6, 0x2c, 0x35, 0x4b, 0x43, 0x91, 0xfd, 0x24, 0x98, 0xf1,
+ 0x3c, 0xa3, 0x98, 0x12, 0x02, 0x41, 0xf4, 0xca, 0x8e, 0xd8, 0x38, 0xc2,
+ 0x20, 0xb1, 0x5f, 0x00, 0x1e, 0xbc, 0xa4, 0xfc, 0x10, 0x40, 0xb2, 0xba,
+ 0x45, 0x8c, 0x44, 0x14, 0x1c, 0x99, 0x28, 0x23, 0x99, 0x1d, 0xc7, 0x57,
+ 0x39, 0x2f, 0xfa, 0x07, 0x7d, 0xd5, 0x9d, 0x46, 0x74, 0x5e, 0xd9, 0x21,
+ 0xc3, 0x82, 0xcc, 0x20, 0x68, 0x82, 0x10, 0x44, 0xfd, 0x2a, 0x10, 0x5c,
+ 0xde, 0xcf, 0x42, 0x4d, 0x7b, 0x4e, 0xd5, 0x66, 0xc2, 0xef, 0x75, 0x73,
+ 0x4c, 0xb2, 0x47, 0x61, 0x74, 0x08, 0xac, 0x4c, 0xa2, 0x59, 0x92, 0x0d,
+ 0xd1, 0x98, 0x8d, 0xff, 0x35, 0x33, 0x32, 0x10, 0xd2, 0x15, 0x61, 0xec,
+ 0x42, 0xa5, 0xc1, 0x53, 0xd9, 0xc2, 0xf8, 0x65, 0x75, 0xe5, 0x91, 0xcc,
+ 0x25, 0xe6, 0x9d, 0x10, 0x0d, 0x84, 0x81, 0xe4, 0x66, 0xd1, 0xd3, 0xd1,
+ 0x4d, 0x7e, 0x37, 0xa3, 0x80, 0x2d, 0x7b, 0xd6, 0x84, 0xfc, 0xe3, 0x6d,
+ 0x4f, 0xe6, 0x25, 0xd4, 0xb8, 0x1a, 0xa7, 0x5f, 0x12, 0x9a, 0x69, 0x7f,
+ 0x17, 0x4b, 0x10, 0xed, 0x7a, 0x15, 0xe7, 0xde, 0x06, 0x85, 0x03, 0xdc,
+ 0x3a, 0xb8, 0x4d, 0xac, 0x14, 0xe0, 0x79, 0xcb, 0x02, 0x56, 0x9f, 0xa0,
+ 0x54, 0x5c, 0x49, 0xd9, 0xe8, 0x0e, 0x80, 0x59, 0x1e, 0x9f, 0x31, 0x67,
+ 0x02, 0x62, 0xc5, 0x83, 0x70, 0x84, 0xbf, 0xbb, 0x40, 0x17, 0x16, 0x37,
+ 0x94, 0xc2, 0x89, 0xa6, 0x4c, 0xf7, 0x0c, 0xae, 0xfd, 0x47, 0x90, 0xa6,
+ 0x2e, 0x28, 0xa0, 0x0b, 0x0c, 0x81, 0x4d, 0x92, 0x64, 0xc0, 0xb6, 0xf1,
+ 0xf0, 0xa4, 0x6e, 0x46, 0xe1, 0x14, 0x0c, 0x76, 0x66, 0x5b, 0x28, 0x3d,
+ 0xd3, 0x0a, 0x0d, 0xf8, 0xb6, 0xc4, 0x27, 0x53, 0x47, 0x11, 0x0e, 0xe4,
+ 0x58, 0xd2, 0xeb, 0x07, 0x18, 0x59, 0xd9, 0x9f, 0x26, 0x6a, 0xf3, 0x3e,
+ 0x54, 0xdc, 0xa3, 0x6e, 0x33, 0x2a, 0xe7, 0x9c, 0x0d, 0x75, 0x80, 0x77,
+ 0x32, 0xda, 0xc6, 0x3b, 0x7b, 0xe3, 0x5c, 0x2f, 0xa9, 0x79, 0x14, 0x57,
+ 0x9e, 0x6b, 0x1a, 0xda, 0x96, 0xec, 0xe3, 0x8d, 0xd3, 0x44, 0x8e, 0x64,
+ 0x85, 0xf6, 0x6e, 0xbb, 0x21, 0xc7, 0x32, 0x5e, 0x28, 0x09, 0x61, 0x56,
+ 0x76, 0x8c, 0x0e, 0xf9, 0xa1, 0xe5, 0xbc, 0xbc, 0x7a, 0xb3, 0x79, 0xd9,
+ 0xeb, 0x26, 0xdb, 0x5b, 0x07, 0x7b, 0x07, 0x1a, 0x3d, 0xde, 0x88, 0x61,
+ 0x54, 0x74, 0x59, 0xdc, 0xd0, 0x54, 0xc0, 0x60, 0x6a, 0x66, 0xc5, 0xac,
+ 0x16, 0x94, 0xdf, 0x49, 0xfb, 0x68, 0x6c, 0x05, 0x1d, 0x81, 0xf2, 0x74,
+ 0xac, 0xca, 0x40, 0xe1, 0xb4, 0x83, 0xec, 0x43, 0xde, 0x8f, 0x71, 0xbc,
+ 0x39, 0x4e, 0xcd, 0xea, 0x68, 0xe3, 0x70, 0x04, 0x70, 0xe3, 0x3b, 0x85,
+ 0x30, 0xca, 0xdf, 0x3d, 0x07, 0x17, 0x3a, 0xf9, 0xd7, 0x92, 0x5f, 0xb7,
+ 0x5a, 0xc7, 0xbf, 0xfd, 0x2d, 0x59, 0x3b, 0xa9, 0xe2, 0xa0, 0x7f, 0x7d,
+ 0xdf, 0x9f, 0x14, 0x27, 0x74, 0x4b, 0xda, 0xba, 0xed, 0xb4, 0x2e, 0xe8,
+ 0x46, 0x57, 0xa0, 0x9d, 0x0e, 0xe3, 0xc7, 0xdb, 0x16, 0xe6, 0x2f, 0xc0,
+ 0xf4, 0xd4, 0x66, 0x81, 0x9b, 0xbb, 0xad, 0xbf, 0xc2, 0x7b, 0x80, 0x3d,
+ 0x14, 0x78, 0x21, 0xb1, 0x23, 0x74, 0x3e, 0x83, 0xae, 0x33, 0x2f, 0x09,
+ 0xab, 0xc2, 0xa3, 0x87, 0x58, 0x7e, 0x24, 0x76, 0xaf, 0x82, 0x0a, 0xe3,
+ 0xc0, 0x3d, 0x22, 0x65, 0xb2, 0x03, 0x1f, 0x4c, 0x05, 0xaa, 0x83, 0xfb,
+ 0xed, 0xd9, 0x72, 0x62, 0x61, 0xbf, 0x18, 0xd0, 0x2b, 0x00, 0xd2, 0x8c,
+ 0x38, 0x4e, 0x66, 0x2b, 0x8a, 0xa6, 0xb0, 0x91, 0x0e, 0xf4, 0x1b, 0x1b,
+ 0x73, 0x06, 0xf9, 0x5d, 0xce, 0xe5, 0x28, 0x87, 0xd9, 0x14, 0x07, 0x39,
+ 0x7b, 0x10, 0x55, 0x9c, 0x0b, 0x80, 0x52, 0x64, 0x17, 0x3e, 0x2d, 0xe6,
+ 0x2d, 0x87, 0xf3, 0x98, 0xdc, 0x1b, 0x02, 0x04, 0x5b, 0xce, 0x08, 0x58,
+ 0xbc, 0x11, 0x18, 0x29, 0x49, 0x87, 0x03, 0xdd, 0x83, 0xee, 0xae, 0x81,
+ 0x1c, 0x38, 0xc8, 0x58, 0xf2, 0x36, 0x24, 0xee, 0x91, 0x37, 0x5a, 0xcf,
+ 0xf3, 0x29, 0x8f, 0x64, 0x75, 0xe5, 0x3f, 0x61, 0x16, 0xeb, 0xc6, 0x13,
+ 0x0e, 0x27, 0x51, 0xa3, 0x59, 0x66, 0x04, 0x16, 0xd2, 0x83, 0x32, 0x2b,
+ 0xa1, 0xfb, 0xc9, 0x73, 0x7a, 0x3f, 0xa7, 0xac, 0xf5, 0x78, 0xaa, 0x18,
+ 0x44, 0xc8, 0x5c, 0x74, 0x39, 0xeb, 0x40, 0x5a, 0xb0, 0x47, 0xaf, 0x63,
+ 0x0d, 0xd3, 0xa0, 0xaa, 0x15, 0x32, 0xc0, 0x81, 0x8b, 0x47, 0xae, 0x3d,
+ 0xde, 0x7e, 0xc0, 0x8a, 0x34, 0x52, 0x79, 0x55, 0x0e, 0xf9, 0x6a, 0x67,
+ 0x1c, 0xd3, 0x83, 0xd7, 0xf1, 0xf9, 0x72, 0x17, 0xc8, 0x04, 0x70, 0x50,
+ 0x18, 0x81, 0x60, 0x04, 0xa5, 0x29, 0x80, 0x52, 0xd6, 0xd5, 0x42, 0x48,
+ 0x89, 0x12, 0xc1, 0x39, 0xcc, 0xfb, 0xc5, 0xd0, 0xcc, 0xdd, 0xba, 0x3f,
+ 0xdb, 0x1b, 0x14, 0xb5, 0x3f, 0xcc, 0x47, 0x88, 0x1e, 0x1a, 0xeb, 0x39,
+ 0x20, 0x82, 0xa9, 0x62, 0x3a, 0xe1, 0xe1, 0x5c, 0xb1, 0x46, 0xda, 0x38,
+ 0x94, 0xfa, 0x5b, 0x9c, 0x30, 0x03, 0x27, 0x9d, 0xe9, 0x3d, 0x28, 0x8c,
+ 0xad, 0x32, 0xbf, 0xb3, 0xfd, 0xfb, 0xeb, 0x9f, 0xed, 0xfe, 0x12, 0x40,
+ 0x2e, 0xfe, 0x94, 0xc7, 0xf9, 0xa5, 0x5a, 0x11, 0xe6, 0x98, 0xea, 0x81,
+ 0xa8, 0x2f, 0x98, 0xda, 0x45, 0x1e, 0x6b, 0x3f, 0xc6, 0xd0, 0x09, 0x2d,
+ 0x27, 0xb6, 0x2c, 0x38, 0x0a, 0x9a, 0xec, 0xa3, 0x86, 0xd8, 0xa6, 0x2d,
+ 0x66, 0x88, 0x7d, 0x43, 0xc0, 0xc0, 0xd7, 0xe6, 0xe2, 0x4c, 0x79, 0xbc,
+ 0x9a, 0x35, 0x0a, 0xc3, 0x7b, 0xb9, 0xf6, 0x39, 0xd8, 0xc0, 0x82, 0x72,
+ 0x14, 0xc1, 0x2f, 0x96, 0xc3, 0x83, 0x90, 0x01, 0xfa, 0xaf, 0xbe, 0x06,
+ 0x06, 0x62, 0x8c, 0xa3, 0x2d, 0xc6, 0x73, 0x42, 0x08, 0x90, 0x9a, 0x82,
+ 0xb9, 0x55, 0xd7, 0xf4, 0x80, 0xfe, 0xba, 0xec, 0x60, 0x6a, 0x3b, 0x4c,
+ 0xc7, 0x4c, 0xac, 0x7b, 0xee, 0x7a, 0x3e, 0x1e, 0x4c, 0x07, 0xcb, 0x9e,
+ 0x52, 0xba, 0x79, 0x1f, 0x1b, 0xec, 0x9c, 0x2f, 0x2b, 0xdf, 0xb6, 0x4e,
+ 0x01, 0xa7, 0x24, 0x49, 0x2c, 0x5d, 0x37, 0x7e, 0x02, 0xa1, 0xb0, 0xa9,
+ 0x7e, 0x24, 0xa6, 0x8a, 0x25, 0x01, 0xd2, 0xb1, 0x73, 0x04, 0x3b, 0x03,
+ 0x0f, 0x1b, 0x4e, 0x5c, 0x14, 0xf4, 0xb8, 0xa8, 0x9a, 0xfd, 0xdd, 0x36,
+ 0x43, 0x07, 0x6e, 0xd8, 0xbc, 0xc7, 0xb3, 0x21, 0xa1, 0x6e, 0x90, 0x9a,
+ 0x9d, 0x95, 0x7d, 0xb7, 0xf6, 0x94, 0x95, 0x6b, 0x15, 0xee, 0xfd, 0x25,
+ 0x45, 0xee, 0xdd, 0x3d, 0x10, 0xb9, 0x77, 0xf7, 0x58, 0xe4, 0x26, 0x70,
+ 0xfc, 0x48, 0x58, 0x37, 0x2a, 0xa8, 0x83, 0x22, 0x2b, 0x15, 0x92, 0x81,
+ 0x92, 0xac, 0x83, 0x48, 0xb4, 0xc4, 0x77, 0xdd, 0x8b, 0x14, 0xdb, 0x5c,
+ 0xaa, 0x8e, 0xfc, 0xd8, 0x61, 0x22, 0x04, 0x9d, 0x40, 0xd1, 0xa1, 0xaa,
+ 0x84, 0xa3, 0x30, 0xd1, 0x38, 0xc5, 0x3f, 0x1e, 0x4a, 0x43, 0x3a, 0x65,
+ 0xb4, 0xe3, 0x0a, 0x1e, 0x0b, 0x56, 0x4e, 0xc7, 0xe6, 0x5b, 0x84, 0x6d,
+ 0x20, 0x46, 0x35, 0x1f, 0xd9, 0xc0, 0x02, 0xb4, 0x7c, 0xc2, 0xf0, 0xb1,
+ 0xd4, 0xa8, 0x47, 0x15, 0xaa, 0x4c, 0x36, 0x5b, 0x27, 0xb1, 0x59, 0x15,
+ 0x13, 0x69, 0xc9, 0x04, 0x32, 0xa9, 0x33, 0x42, 0x8d, 0x60, 0x1a, 0x87,
+ 0x65, 0xb1, 0xc1, 0x19, 0xce, 0x5d, 0x20, 0xc7, 0xd0, 0x8b, 0xe4, 0xeb,
+ 0x51, 0x7a, 0x97, 0x03, 0x13, 0x2f, 0x4f, 0xbe, 0xac, 0x6b, 0x7b, 0x07,
+ 0xe1, 0xb2, 0x77, 0x8e, 0x95, 0xb3, 0x52, 0xcd, 0x1a, 0xf9, 0x2b, 0x6b,
+ 0x1c, 0x61, 0x46, 0x84, 0xe8, 0x67, 0x03, 0x02, 0x10, 0x56, 0xb4, 0x55,
+ 0x18, 0xc9, 0xa6, 0x9d, 0x5c, 0x99, 0x13, 0xc4, 0xb4, 0x32, 0x34, 0x64,
+ 0x62, 0x67, 0x0a, 0x4b, 0xb8, 0xe8, 0x90, 0x47, 0x42, 0x19, 0xf7, 0xd5,
+ 0xa0, 0x45, 0x4d, 0x4b, 0x34, 0x24, 0x55, 0x5a, 0x23, 0xa0, 0xce, 0x30,
+ 0x61, 0x3b, 0x02, 0x8a, 0x1d, 0x4b, 0x23, 0x0e, 0x12, 0x59, 0x3c, 0xad,
+ 0x3d, 0x44, 0x3b, 0x8a, 0x10, 0x45, 0xee, 0x62, 0x36, 0x2b, 0xe4, 0x91,
+ 0x23, 0x10, 0x73, 0xad, 0x87, 0x03, 0x43, 0x22, 0x42, 0x32, 0x66, 0xa7,
+ 0x60, 0x2b, 0xbf, 0x6d, 0x71, 0x0e, 0xb3, 0xa1, 0x18, 0xb3, 0x02, 0x37,
+ 0xc3, 0xfc, 0x8e, 0x10, 0xd5, 0x0a, 0x4d, 0xc5, 0x18, 0x29, 0x00, 0x87,
+ 0xb9, 0x4a, 0x2c, 0xca, 0x7d, 0xd0, 0xf5, 0x13, 0x94, 0xc2, 0x31, 0xeb,
+ 0xd1, 0xd2, 0x22, 0x8b, 0xc3, 0x08, 0x70, 0x2f, 0x86, 0xaa, 0xc0, 0xbd,
+ 0xe9, 0xc6, 0x8e, 0x19, 0x1e, 0x8e, 0xa2, 0xc7, 0xf0, 0x1a, 0x05, 0x4e,
+ 0x00, 0x8c, 0xd5, 0xac, 0xc0, 0x6d, 0x7c, 0x4b, 0x1a, 0xb9, 0xa1, 0x11,
+ 0xe1, 0x87, 0x76, 0x04, 0x31, 0xc1, 0xdf, 0x2f, 0x15, 0xf4, 0xc9, 0x87,
+ 0x02, 0x6e, 0x67, 0xe2, 0x7d, 0xd5, 0x75, 0xb3, 0x97, 0xaa, 0x6b, 0xb6,
+ 0x80, 0xa1, 0x8f, 0x8b, 0xb5, 0xb8, 0x72, 0xf1, 0x7f, 0x20, 0x17, 0x6c,
+ 0xd7, 0x80, 0xb8, 0x53, 0x7c, 0xb7, 0x63, 0x5d, 0x9c, 0x0f, 0x63, 0x19,
+ 0x97, 0x1d, 0x05, 0x4c, 0x97, 0x62, 0x53, 0x4d, 0x19, 0x22, 0x42, 0x5e,
+ 0xb8, 0x8c, 0xff, 0x68, 0xda, 0xaa, 0xd9, 0xdf, 0x54, 0x98, 0x66, 0xd0,
+ 0x22, 0x61, 0x87, 0xa1, 0xbb, 0x2b, 0xcc, 0xe1, 0x4f, 0x71, 0x9e, 0x2a,
+ 0xa8, 0xc5, 0x52, 0x0c, 0xa7, 0xc6, 0x94, 0x6d, 0xb4, 0x95, 0xcf, 0x10,
+ 0xd5, 0x87, 0x75, 0xb9, 0x8f, 0xa5, 0x2e, 0xf7, 0x1c, 0xb4, 0x7d, 0x91,
+ 0x49, 0xa8, 0x00, 0xb3, 0xcf, 0xe0, 0x38, 0x40, 0x86, 0x0c, 0x20, 0xc4,
+ 0x8a, 0xf8, 0xb3, 0x9f, 0x56, 0x87, 0xe4, 0xe2, 0x0f, 0xb7, 0x12, 0x36,
+ 0x11, 0x20, 0x64, 0x5e, 0x5c, 0xbe, 0xee, 0xbc, 0x4c, 0x7a, 0xe7, 0x97,
+ 0xd7, 0x2f, 0x28, 0xff, 0x19, 0xc2, 0xf8, 0x67, 0x2e, 0x27, 0x7a, 0x5a,
+ 0x14, 0x89, 0x61, 0x53, 0xa3, 0xf2, 0xe9, 0x7b, 0xf6, 0x81, 0x6a, 0x41,
+ 0x4e, 0xa4, 0x57, 0x29, 0x14, 0xab, 0x1d, 0x15, 0x1e, 0x16, 0x70, 0x74,
+ 0x1f, 0x80, 0xf4, 0x35, 0xf5, 0x5c, 0x4c, 0x7f, 0x12, 0x35, 0xd5, 0x50,
+ 0xd5, 0x4f, 0xa1, 0x55, 0x5a, 0xbc, 0x52, 0xda, 0x18, 0x4b, 0x95, 0x91,
+ 0xe3, 0x68, 0x49, 0x80, 0x27, 0xa1, 0xd0, 0x92, 0xc4, 0xad, 0xac, 0x36,
+ 0xe5, 0x9c, 0x2c, 0x87, 0x45, 0xd6, 0xed, 0x18, 0x0b, 0xd4, 0xf3, 0xa9,
+ 0x45, 0x6b, 0x57, 0x23, 0xed, 0x9d, 0x5c, 0x53, 0x53, 0x9a, 0xf8, 0xee,
+ 0x8e, 0xea, 0x74, 0xa6, 0x2e, 0x19, 0x2f, 0xdc, 0x33, 0x90, 0x12, 0xd9,
+ 0x14, 0x37, 0x9d, 0xb5, 0xaa, 0x29, 0xb2, 0x1a, 0x3e, 0x2d, 0xea, 0x28,
+ 0xc9, 0xfa, 0x02, 0xb4, 0x3c, 0x4e, 0x10, 0x83, 0xb6, 0xb6, 0x1c, 0xb0,
+ 0x36, 0x20, 0x81, 0x37, 0x87, 0x04, 0xf4, 0xf9, 0xd5, 0xda, 0x17, 0xc0,
+ 0xdb, 0x7a, 0xc6, 0x23, 0x8d, 0x44, 0xd1, 0xf7, 0x2c, 0xa0, 0x95, 0x0e,
+ 0xa8, 0x60, 0x1a, 0x80, 0xab, 0x4b, 0x20, 0x56, 0xe5, 0x7d, 0xf6, 0x74,
+ 0x6a, 0x9e, 0x2e, 0x5b, 0xe0, 0x5c, 0x82, 0x0b, 0x9b, 0x70, 0x25, 0x59,
+ 0x27, 0x2b, 0xdd, 0x6e, 0xf7, 0x64, 0x83, 0x2a, 0xfd, 0x7e, 0x90, 0xba,
+ 0xe9, 0x25, 0xb2, 0x2f, 0xd8, 0x29, 0xf6, 0xfc, 0x49, 0x11, 0x10, 0xeb,
+ 0x41, 0xb0, 0xd7, 0x28, 0x31, 0xa9, 0xe8, 0x1b, 0x41, 0x20, 0x3b, 0x21,
+ 0x67, 0x34, 0xb8, 0x0a, 0x87, 0x00, 0x26, 0x8b, 0x6c, 0x12, 0x6f, 0x28,
+ 0x61, 0x85, 0x80, 0x81, 0x0f, 0xb3, 0x0f, 0xd9, 0xf0, 0xa4, 0xed, 0x92,
+ 0xe0, 0x7a, 0x62, 0xfb, 0x9c, 0x5f, 0x81, 0x56, 0x8d, 0xe6, 0xdb, 0xbf,
+ 0xfc, 0x8a, 0x09, 0x5c, 0xbf, 0xe2, 0xb6, 0x66, 0x1a, 0x4d, 0xa2, 0x61,
+ 0x4d, 0x8d, 0xcb, 0xab, 0x37, 0x2f, 0xd3, 0xe9, 0x4e, 0xa3, 0xdd, 0x96,
+ 0x0a, 0xd0, 0x2e, 0x66, 0x88, 0x7f, 0x53, 0x60, 0x17, 0x57, 0xff, 0xbc,
+ 0xba, 0xee, 0xbd, 0x4a, 0x34, 0xdb, 0x33, 0xbc, 0xae, 0xdd, 0x2f, 0x46,
+ 0x9b, 0x79, 0x59, 0xc0, 0x7f, 0x43, 0xf3, 0x00, 0x78, 0x95, 0xdb, 0xb2,
+ 0xe9, 0x1a, 0x89, 0xf0, 0x17, 0x78, 0xc5, 0xb8, 0x78, 0xd4, 0x59, 0xfc,
+ 0x53, 0x7e, 0xe9, 0x5f, 0xf9, 0x55, 0x27, 0xbf, 0xfd, 0x76, 0x5a, 0x09,
+ 0xfe, 0xf1, 0x2c, 0xdd, 0xde, 0x31, 0x17, 0xd8, 0x1f, 0xe6, 0xd6, 0xb0,
+ 0xf3, 0x8d, 0x57, 0xba, 0xfe, 0x17, 0x4f, 0xc5, 0xc0, 0xab, 0xfb, 0xd5,
+ 0x8b, 0x49, 0x84, 0x70, 0xaa, 0xcc, 0xca, 0x17, 0xcf, 0xb7, 0x8c, 0x2c,
+ 0x57, 0xfb, 0xd3, 0x26, 0xc8, 0x1c, 0x45, 0x12, 0x64, 0xa8, 0x25, 0x0f,
+ 0x81, 0xcc, 0x5d, 0xaa, 0xb1, 0x9f, 0xfc, 0xd0, 0xa3, 0xfb, 0xe9, 0x2f,
+ 0x59, 0x45, 0xcc, 0x4a, 0xa8, 0xcc, 0x88, 0xaa, 0x67, 0x8c, 0x53, 0x1a,
+ 0xe0, 0x0e, 0x40, 0x94, 0xf2, 0x0d, 0x2d, 0x6f, 0xb9, 0xc1, 0xb7, 0xbd,
+ 0x6a, 0x6d, 0x2a, 0x68, 0x18, 0x1e, 0x7e, 0x5b, 0x11, 0xad, 0xa8, 0x51,
+ 0x0e, 0xaa, 0x89, 0xd9, 0x2f, 0xa4, 0x9f, 0x3c, 0x2e, 0xe9, 0x6e, 0x90,
+ 0x28, 0xc2, 0x35, 0x0f, 0x92, 0x2f, 0x52, 0xb8, 0x4b, 0xe6, 0xd2, 0x9a,
+ 0x9a, 0xa4, 0x20, 0x54, 0x7d, 0x55, 0xd3, 0x45, 0x05, 0xc8, 0xde, 0xfa,
+ 0xa3, 0x7a, 0xfb, 0x29, 0xa3, 0x0a, 0xed, 0x35, 0x35, 0xd5, 0xc3, 0x22,
+ 0x03, 0x5e, 0x30, 0x45, 0xd0, 0x9b, 0x5b, 0x5a, 0xc8, 0xdb, 0x79, 0x93,
+ 0xe4, 0x17, 0x5a, 0xfb, 0x13, 0x6b, 0xac, 0x26, 0x38, 0x20, 0xdf, 0xdb,
+ 0xb9, 0xd6, 0x3f, 0x86, 0x0f, 0x53, 0x5f, 0xb8, 0xbb, 0x96, 0x90, 0x1d,
+ 0xb5, 0xfe, 0xe1, 0xa7, 0x8a, 0xf4, 0x58, 0xda, 0xbf, 0x3c, 0x37, 0xcf,
+ 0xdb, 0xcf, 0x11, 0x72, 0x39, 0x37, 0x02, 0x1a, 0xad, 0x95, 0xfd, 0x48,
+ 0x83, 0xdf, 0xd0, 0x23, 0xb7, 0xcf, 0xac, 0xa9, 0xb6, 0x4d, 0xf7, 0xd7,
+ 0x4e, 0xd5, 0x17, 0xb5, 0x27, 0x92, 0x60, 0x36, 0x42, 0x19, 0xeb, 0x11,
+ 0x44, 0xb4, 0x7b, 0x04, 0xb0, 0x20, 0x09, 0xe2, 0x97, 0x8b, 0x32, 0x81,
+ 0x84, 0x7d, 0x11, 0xaf, 0x42, 0x62, 0xba, 0xf5, 0x68, 0xe9, 0xd3, 0xa6,
+ 0x2d, 0x80, 0xb9, 0xae, 0x9f, 0xa1, 0x65, 0x33, 0x64, 0x96, 0xa8, 0x3f,
+ 0xe7, 0xa0, 0x87, 0x95, 0x1e, 0x24, 0xaa, 0x4c, 0x58, 0x05, 0x94, 0x1c,
+ 0x0b, 0x56, 0x83, 0x09, 0x1c, 0x07, 0x28, 0x75, 0x15, 0x13, 0xab, 0x71,
+ 0x20, 0xca, 0x01, 0x49, 0x89, 0x81, 0x28, 0xd8, 0x0c, 0x63, 0x0e, 0x50,
+ 0x27, 0x7c, 0x5e, 0xdc, 0x81, 0x4d, 0x75, 0x40, 0xbf, 0xac, 0x74, 0xbc,
+ 0x54, 0xe7, 0x81, 0x0f, 0x02, 0x5a, 0x57, 0x22, 0xcd, 0x06, 0x92, 0x92,
+ 0x62, 0xcd, 0xe5, 0xd2, 0x4e, 0x82, 0x02, 0x59, 0x04, 0xf3, 0x5a, 0x53,
+ 0x48, 0x2f, 0xf1, 0xea, 0xe8, 0xc5, 0xed, 0x15, 0x23, 0xa3, 0x26, 0xe4,
+ 0x20, 0x2a, 0x60, 0xcc, 0x41, 0xb4, 0x4c, 0x95, 0xd8, 0x41, 0x5b, 0x5e,
+ 0xb5, 0xf1, 0x4b, 0xb1, 0x8e, 0xf6, 0xec, 0x6e, 0xae, 0x3f, 0x3d, 0xa9,
+ 0x09, 0x15, 0xa8, 0xe5, 0x3f, 0x0d, 0x6e, 0x00, 0x97, 0xa2, 0x73, 0x8d,
+ 0xf1, 0x43, 0x34, 0x8b, 0xd6, 0x07, 0xee, 0xd7, 0xe1, 0x82, 0x55, 0x59,
+ 0x96, 0x7c, 0x9b, 0x82, 0x47, 0x46, 0x19, 0x47, 0x6e, 0x45, 0x38, 0x86,
+ 0x4e, 0x28, 0xea, 0xd4, 0xda, 0x7b, 0xbd, 0x78, 0x28, 0xc1, 0xae, 0x47,
+ 0x08, 0x97, 0xa4, 0x04, 0x19, 0x0d, 0x2a, 0xd4, 0x4a, 0xf4, 0xe6, 0xea,
+ 0x8a, 0x44, 0x4f, 0x16, 0x37, 0xff, 0x69, 0x64, 0x5f, 0x02, 0x54, 0x09,
+ 0xdc, 0x53, 0x9a, 0x84, 0x4b, 0x5f, 0xc3, 0xf7, 0xed, 0x4c, 0x2e, 0x3c,
+ 0xc1, 0x99, 0x9a, 0x10, 0x97, 0x4a, 0x65, 0x08, 0x49, 0xa0, 0x02, 0xc5,
+ 0x05, 0x44, 0xdd, 0xac, 0x81, 0x50, 0xec, 0xec, 0x04, 0x50, 0xb8, 0x6b,
+ 0x3c, 0x45, 0x15, 0x45, 0x6a, 0x78, 0x71, 0x5b, 0x1f, 0x68, 0xbe, 0xec,
+ 0x7e, 0xb1, 0x6a, 0x0f, 0x23, 0x00, 0x52, 0x09, 0x3b, 0xc0, 0xb2, 0x92,
+ 0xc4, 0x9d, 0x09, 0x6a, 0x90, 0xcb, 0x05, 0xc9, 0x25, 0x7e, 0x34, 0xd8,
+ 0x0b, 0x33, 0x8f, 0x99, 0xd5, 0xf3, 0x71, 0xc3, 0x82, 0x4e, 0x00, 0xd3,
+ 0xdf, 0x52, 0x4f, 0x49, 0xc1, 0x03, 0x09, 0x68, 0x0f, 0x16, 0x88, 0xec,
+ 0x4d, 0xb1, 0x52, 0xf0, 0x1c, 0x14, 0x78, 0x5a, 0xa7, 0xe7, 0xb9, 0xd8,
+ 0x43, 0x25, 0x27, 0x57, 0xdb, 0x57, 0x6b, 0x53, 0x13, 0x44, 0xff, 0x76,
+ 0x76, 0xd3, 0xba, 0x9a, 0x1a, 0xfd, 0xbe, 0x4c, 0x1a, 0xd7, 0x5c, 0xf6,
+ 0x2d, 0x05, 0x49, 0xde, 0x0c, 0x03, 0x82, 0x8f, 0x25, 0x99, 0xda, 0x88,
+ 0xc3, 0x5e, 0xf0, 0x4f, 0x7b, 0x1e, 0xc8, 0x1b, 0x8a, 0xac, 0x1f, 0x63,
+ 0x7b, 0x4e, 0xd8, 0xed, 0x52, 0x7b, 0x8e, 0x75, 0x6b, 0x71, 0xb7, 0x7a,
+ 0x8f, 0x3e, 0xc9, 0xfe, 0x52, 0x53, 0x89, 0xb5, 0x33, 0x79, 0x06, 0x0c,
+ 0x5b, 0x21, 0x04, 0x4a, 0xbb, 0x39, 0xac, 0x15, 0xcc, 0xdb, 0x1c, 0x4d,
+ 0x85, 0x65, 0x58, 0xb2, 0x65, 0xfa, 0x79, 0xb2, 0xae, 0xdf, 0xad, 0xb8,
+ 0xd0, 0x4b, 0x91, 0xfc, 0x72, 0xb2, 0x55, 0x4e, 0x52, 0x12, 0x0c, 0xf4,
+ 0x71, 0x3a, 0x74, 0x27, 0x3c, 0x1f, 0x45, 0x91, 0xd3, 0x51, 0x9f, 0x63,
+ 0x22, 0x5d, 0xa8, 0xe3, 0xcc, 0x89, 0x5c, 0xa4, 0xc0, 0x2c, 0x23, 0x43,
+ 0x5e, 0x21, 0x9e, 0xfd, 0x4b, 0xda, 0x59, 0xe6, 0x0e, 0xfd, 0xd5, 0x3f,
+ 0x20, 0x39, 0x90, 0xe3, 0xed, 0x4f, 0x67, 0x2f, 0x2f, 0xbb, 0xcb, 0x34,
+ 0x6d, 0x28, 0x2d, 0x1f, 0xd8, 0x96, 0xf5, 0xb7, 0xa5, 0xc5, 0xd5, 0x85,
+ 0xbd, 0x5b, 0x54, 0xa3, 0xc2, 0x89, 0x3c, 0x52, 0xa0, 0xc2, 0x49, 0x3e,
+ 0x0b, 0x4a, 0xe4, 0xae, 0xbd, 0xc6, 0x82, 0x6b, 0x9f, 0x20, 0x97, 0x56,
+ 0xeb, 0x44, 0xb4, 0x7c, 0xc7, 0x62, 0xb4, 0xb0, 0xc1, 0x65, 0x04, 0x36,
+ 0xbc, 0x4e, 0x62, 0xa3, 0x44, 0x36, 0x8c, 0x6f, 0x68, 0xda, 0xe2, 0x8d,
+ 0xce, 0xee, 0x57, 0xe5, 0xa2, 0x4b, 0x98, 0x92, 0x4e, 0x28, 0xde, 0xf4,
+ 0x31, 0x2f, 0x33, 0xc6, 0x72, 0x4d, 0x7d, 0x93, 0x4b, 0xbc, 0x1c, 0x41,
+ 0x2b, 0xb4, 0x5f, 0x5b, 0x74, 0xf8, 0xaa, 0x05, 0x7b, 0x81, 0x08, 0x55,
+ 0xa9, 0xb5, 0x63, 0x77, 0xaa, 0xb5, 0x92, 0x3d, 0xaf, 0xa6, 0x43, 0x1c,
+ 0x47, 0x3d, 0x62, 0xfc, 0x0c, 0xf8, 0x50, 0x69, 0x0e, 0x4a, 0x1b, 0x8d,
+ 0x4c, 0x44, 0x97, 0x5c, 0xda, 0x98, 0xd6, 0x86, 0x8c, 0x43, 0x51, 0xef,
+ 0x42, 0x3a, 0x75, 0x87, 0xb7, 0x63, 0x61, 0x6b, 0x1c, 0x73, 0x7d, 0x4a,
+ 0x45, 0x25, 0x6c, 0x1d, 0x35, 0x4c, 0x79, 0xe1, 0x93, 0xfc, 0x92, 0x57,
+ 0xe2, 0x0b, 0x46, 0x1f, 0x1f, 0x51, 0x89, 0x49, 0x41, 0xf8, 0xff, 0xe9,
+ 0xdd, 0xa5, 0x27, 0x8f, 0x8a, 0x31, 0xb5, 0x9a, 0x50, 0xf8, 0xd9, 0x52,
+ 0x2c, 0x28, 0xc7, 0x42, 0x92, 0x2c, 0x56, 0x57, 0xd6, 0x31, 0x44, 0xe3,
+ 0x56, 0xb2, 0xa2, 0xbf, 0xbd, 0xc9, 0x6f, 0xac, 0x71, 0x7d, 0x72, 0xdb,
+ 0xdf, 0xd9, 0x3d, 0x3e, 0x40, 0x34, 0xc8, 0xd9, 0xc3, 0x00, 0xdd, 0x46,
+ 0x37, 0x4f, 0xd5, 0x7b, 0x0e, 0x77, 0x77, 0xcc, 0x3d, 0x1b, 0xca, 0x89,
+ 0xf9, 0xd9, 0x4c, 0xdc, 0x87, 0xd8, 0xdf, 0x43, 0xe9, 0x2f, 0x20, 0x6c,
+ 0x4f, 0xd1, 0x1a, 0x8d, 0x9e, 0x25, 0x85, 0xca, 0x06, 0x86, 0xd7, 0x1b,
+ 0xb4, 0x4d, 0x52, 0x98, 0x9e, 0xc4, 0x42, 0xfb, 0xc2, 0xef, 0x54, 0x62,
+ 0x9b, 0x67, 0xfd, 0xa9, 0x16, 0x20, 0xd7, 0xca, 0x58, 0x1a, 0xb8, 0x0d,
+ 0xb6, 0xb9, 0x94, 0xd3, 0x0e, 0xab, 0xb5, 0x72, 0xfa, 0xf9, 0xad, 0x91,
+ 0xeb, 0xa8, 0xfa, 0x99, 0x25, 0x25, 0x33, 0x9d, 0x01, 0x40, 0x64, 0xca,
+ 0xf1, 0x53, 0x12, 0x78, 0xe5, 0x24, 0xb2, 0x0d, 0xb6, 0xf0, 0x4a, 0x24,
+ 0x7f, 0x2a, 0xf5, 0x4e, 0x5c, 0x73, 0x3a, 0x5d, 0xf6, 0xa7, 0x31, 0x18,
+ 0x11, 0x15, 0xdf, 0xb0, 0xa5, 0x95, 0x20, 0x6d, 0x50, 0x65, 0x86, 0x15,
+ 0xb3, 0x29, 0x64, 0x0c, 0x90, 0x92, 0xd1, 0x2f, 0x1e, 0x5c, 0x7d, 0x41,
+ 0x4f, 0xc6, 0x30, 0x5d, 0xcd, 0xda, 0x77, 0x6d, 0x89, 0xa2, 0x34, 0x9c,
+ 0x0c, 0x66, 0xca, 0xab, 0xa9, 0x21, 0x64, 0x81, 0x88, 0x65, 0xd0, 0xcd,
+ 0xbc, 0x3f, 0x33, 0x3c, 0x82, 0xc2, 0x22, 0xc8, 0x8d, 0x6f, 0xe5, 0x4e,
+ 0x70, 0x9d, 0xda, 0xd4, 0xf4, 0xda, 0x27, 0x35, 0x1e, 0xaa, 0xd7, 0x9b,
+ 0x0d, 0xc0, 0x9d, 0x1c, 0x9a, 0x8f, 0x1f, 0xb2, 0xc4, 0x6c, 0x8a, 0x92,
+ 0xe2, 0xa8, 0xed, 0x25, 0x0e, 0xe9, 0x32, 0x14, 0xe0, 0x85, 0x98, 0xb9,
+ 0x2c, 0x04, 0xf2, 0xb7, 0xbb, 0x1a, 0x2f, 0x55, 0x11, 0x6d, 0x75, 0x85,
+ 0x92, 0x86, 0xa1, 0x66, 0xa3, 0x79, 0x43, 0x32, 0x42, 0xf0, 0x2c, 0x30,
+ 0xbe, 0x91, 0x20, 0xeb, 0xbf, 0x69, 0x61, 0xd6, 0x8c, 0x10, 0x8e, 0x8e,
+ 0xe9, 0xe7, 0x67, 0xf9, 0xdd, 0xca, 0xe3, 0xb2, 0x5c, 0xa6, 0xd0, 0xea,
+ 0x4a, 0x2c, 0x55, 0x08, 0x67, 0x1a, 0x0c, 0xc4, 0x0e, 0x7f, 0xb6, 0xaa,
+ 0xe1, 0xb2, 0x9f, 0xa4, 0xea, 0x8b, 0xac, 0x76, 0xd3, 0x4a, 0xb7, 0x5f,
+ 0x82, 0xbd, 0x1d, 0x22, 0x7b, 0x3b, 0x8c, 0xb3, 0x37, 0x5b, 0xc8, 0x01,
+ 0x95, 0x57, 0x0b, 0x42, 0x99, 0x95, 0xfd, 0xf4, 0x81, 0x35, 0x97, 0x7e,
+ 0x36, 0xc1, 0x2d, 0xec, 0x52, 0x93, 0xa9, 0xd4, 0xf0, 0x20, 0x2f, 0x53,
+ 0x10, 0x1e, 0x11, 0xe9, 0xc0, 0xc5, 0x95, 0x4a, 0xe2, 0x2b, 0xd5, 0xbf,
+ 0x19, 0xb7, 0x3a, 0x57, 0xdd, 0xcb, 0x4b, 0x0f, 0xbe, 0xf2, 0x61, 0x38,
+ 0x63, 0x13, 0x81, 0x60, 0x1b, 0x69, 0x94, 0x4a, 0x70, 0x93, 0x11, 0xdb,
+ 0x63, 0xf0, 0x8b, 0x64, 0xa7, 0xbd, 0x87, 0xb9, 0x04, 0x75, 0x5c, 0x30,
+ 0x48, 0x1d, 0x1b, 0xcf, 0x46, 0x37, 0x00, 0xfc, 0x96, 0xdf, 0xc1, 0x7e,
+ 0xf2, 0x77, 0x3a, 0xc5, 0xc6, 0x71, 0xf4, 0x5c, 0x12, 0x8f, 0x9e, 0xd3,
+ 0x29, 0xd8, 0xac, 0x17, 0x96, 0xff, 0x9a, 0xa1, 0x67, 0xf4, 0xc6, 0xfc,
+ 0xf0, 0x3e, 0x9b, 0xea, 0x5b, 0x8c, 0xde, 0xc0, 0xb3, 0x10, 0xe5, 0xd4,
+ 0xc4, 0x85, 0xdb, 0xc9, 0xb9, 0x9d, 0x2c, 0x6f, 0xb0, 0xe2, 0x8f, 0xc7,
+ 0xf9, 0x0e, 0x25, 0x72, 0x07, 0x36, 0xac, 0x0f, 0x1d, 0x85, 0x95, 0x8a,
+ 0x69, 0x30, 0x83, 0x48, 0xcb, 0x9c, 0xa4, 0xf4, 0xc1, 0xac, 0x1c, 0x71,
+ 0xe1, 0x9f, 0xae, 0x2f, 0x5a, 0x47, 0xd5, 0xde, 0xed, 0x1c, 0x1e, 0xa3,
+ 0x40, 0xc6, 0x99, 0x6a, 0x02, 0x7e, 0x71, 0xf3, 0x24, 0xb9, 0x18, 0x55,
+ 0x7c, 0xd6, 0x0e, 0x44, 0xb5, 0x98, 0x77, 0x60, 0x4e, 0xb4, 0xd1, 0x27,
+ 0xcb, 0x87, 0x82, 0x8a, 0xc2, 0x63, 0xf0, 0x77, 0xb4, 0x33, 0x98, 0x7d,
+ 0xc1, 0x03, 0x24, 0xaf, 0x3d, 0xcc, 0x29, 0xec, 0x77, 0x4b, 0x66, 0xa3,
+ 0xcc, 0xdc, 0x3e, 0xce, 0xcb, 0x51, 0xb2, 0x4e, 0x0e, 0x70, 0xc4, 0xda,
+ 0x50, 0x03, 0xf0, 0x17, 0xe9, 0xdb, 0x0f, 0xe9, 0xe4, 0xf4, 0xc7, 0x1f,
+ 0x8d, 0x5c, 0x63, 0xfe, 0x36, 0x31, 0x77, 0xc2, 0xbc, 0xe3, 0xc7, 0x1f,
+ 0x05, 0xcf, 0x59, 0xc5, 0xf1, 0xba, 0x64, 0x1b, 0xe6, 0x4f, 0x30, 0x38,
+ 0x52, 0x9d, 0x37, 0x6a, 0x86, 0x08, 0xc4, 0x5d, 0x4c, 0xf2, 0x3b, 0x4c,
+ 0xa5, 0x8e, 0x03, 0x57, 0x32, 0x34, 0xb4, 0x19, 0x3e, 0xd8, 0x62, 0xbc,
+ 0xd0, 0x69, 0x01, 0x1c, 0xac, 0xa2, 0xd0, 0x2a, 0xc8, 0xd9, 0x4a, 0x56,
+ 0x1c, 0x28, 0x07, 0x36, 0x4e, 0x34, 0x2c, 0xaa, 0xd5, 0x38, 0x85, 0x7c,
+ 0x14, 0xb3, 0xfa, 0x39, 0x3b, 0x68, 0xed, 0xb9, 0xa4, 0x45, 0x26, 0xac,
+ 0xce, 0x6e, 0xb9, 0x8d, 0xbb, 0x4e, 0xc6, 0x25, 0xd9, 0x95, 0x92, 0x60,
+ 0x17, 0xbe, 0x43, 0x04, 0x2e, 0x6d, 0xd0, 0xe8, 0x84, 0x66, 0xaa, 0x74,
+ 0x3a, 0x05, 0xcc, 0x67, 0x5e, 0xee, 0x49, 0x36, 0x9d, 0xe4, 0xd9, 0x87,
+ 0xcc, 0x97, 0xe8, 0xc4, 0x86, 0x02, 0x6f, 0x85, 0x50, 0x55, 0xf4, 0x47,
+ 0xe1, 0xdb, 0x74, 0x67, 0x91, 0x2f, 0x4f, 0x30, 0x33, 0x99, 0x84, 0xf6,
+ 0x69, 0x86, 0x11, 0x3d, 0x43, 0xec, 0x3e, 0x72, 0xfd, 0xa5, 0x25, 0xbe,
+ 0x4f, 0x88, 0x89, 0xaa, 0x8a, 0x7c, 0x49, 0x55, 0xe2, 0x6b, 0x23, 0x1e,
+ 0x86, 0x97, 0xea, 0x0f, 0x44, 0x30, 0x1b, 0x4b, 0x8a, 0xf7, 0x00, 0x4e,
+ 0x00, 0x97, 0x27, 0x2e, 0xa3, 0xfd, 0x92, 0xd1, 0x05, 0xcb, 0xc9, 0xaa,
+ 0x7e, 0x70, 0x06, 0x72, 0x30, 0x12, 0x63, 0xd8, 0x82, 0x04, 0x69, 0x6d,
+ 0x88, 0x63, 0x90, 0xb2, 0xb2, 0x41, 0x45, 0xd7, 0x60, 0x6d, 0xb3, 0x41,
+ 0x93, 0x32, 0x72, 0x09, 0xd6, 0x1b, 0x1d, 0xac, 0x1a, 0xc8, 0x95, 0xdb,
+ 0xab, 0xd0, 0x8f, 0x0d, 0x2d, 0x52, 0x68, 0xad, 0xd3, 0x62, 0x75, 0xc5,
+ 0xc3, 0x1b, 0x56, 0x7c, 0x53, 0x60, 0x7e, 0x29, 0x5a, 0xbf, 0x0a, 0x7f,
+ 0xec, 0xbd, 0x54, 0x61, 0xa7, 0x8c, 0x8a, 0x0f, 0xae, 0x36, 0x98, 0xef,
+ 0x07, 0x0e, 0xec, 0x1d, 0xc9, 0x12, 0x98, 0xa6, 0x46, 0x12, 0x1b, 0xb7,
+ 0xee, 0xa9, 0x74, 0xd5, 0x3c, 0xef, 0x27, 0xc8, 0x9e, 0x90, 0xc3, 0x65,
+ 0x94, 0x40, 0x70, 0x82, 0xde, 0x14, 0xf9, 0x30, 0x9b, 0x18, 0x5e, 0x30,
+ 0xcd, 0x36, 0xdf, 0x98, 0x26, 0x7e, 0x84, 0x16, 0xc0, 0x45, 0x1a, 0x62,
+ 0x9f, 0x46, 0xdb, 0x27, 0x0b, 0x42, 0xd2, 0x68, 0x6d, 0x6e, 0x5e, 0xdb,
+ 0x76, 0xcd, 0xe7, 0xde, 0x3f, 0xae, 0x93, 0x2b, 0x8c, 0x45, 0x02, 0x68,
+ 0x0b, 0xfb, 0x64, 0xa2, 0xdf, 0xb6, 0xd9, 0x7b, 0xdd, 0x50, 0x4d, 0x7d,
+ 0x8e, 0x3e, 0xe2, 0x4b, 0x5a, 0x0f, 0xb0, 0x3f, 0x2b, 0x53, 0xd0, 0x6e,
+ 0x6f, 0xde, 0x4d, 0xd2, 0xdb, 0xfc, 0xa3, 0x6a, 0xe2, 0x2e, 0xbf, 0xd5,
+ 0x5d, 0x40, 0x2b, 0x41, 0x62, 0x2e, 0x26, 0x55, 0xfb, 0x58, 0xd5, 0xb7,
+ 0x0b, 0x03, 0x16, 0x4b, 0x98, 0x4a, 0x9f, 0x57, 0x51, 0x24, 0x9e, 0x89,
+ 0xcc, 0x33, 0xb0, 0xc1, 0xb3, 0xe7, 0x9e, 0x43, 0x18, 0x38, 0x35, 0xe6,
+ 0x0f, 0xc7, 0x1d, 0xaf, 0xce, 0x54, 0x15, 0x46, 0x88, 0x7c, 0x41, 0x6d,
+ 0x72, 0x7b, 0x0b, 0x6b, 0xe7, 0x99, 0x3f, 0xbc, 0x47, 0x29, 0xbc, 0x4a,
+ 0xf6, 0xe6, 0xea, 0xca, 0x29, 0xc1, 0xe1, 0xdf, 0x68, 0xb0, 0x7d, 0x62,
+ 0xca, 0x08, 0xa3, 0x55, 0xa9, 0xd5, 0x75, 0xba, 0xb8, 0x04, 0xd6, 0x9c,
+ 0x39, 0x08, 0x0b, 0x60, 0xed, 0xb4, 0xf7, 0x6d, 0x09, 0xac, 0xdd, 0x8a,
+ 0xf7, 0xd9, 0x9b, 0x62, 0xb0, 0x0f, 0xc9, 0x05, 0x65, 0x2d, 0xfa, 0xfa,
+ 0x21, 0x2f, 0x4e, 0x3c, 0x33, 0xc6, 0xcf, 0x19, 0xc6, 0xaa, 0x5c, 0x1a,
+ 0x85, 0xa7, 0x71, 0xaa, 0xbe, 0xc4, 0x0a, 0x8e, 0xf6, 0x58, 0xcc, 0xa4,
+ 0xb7, 0xe8, 0x6f, 0xf3, 0xdc, 0xb0, 0x89, 0x79, 0x69, 0xff, 0xe4, 0x79,
+ 0xbe, 0xaa, 0x70, 0x36, 0x2d, 0x87, 0xb2, 0x4a, 0x1a, 0x73, 0x43, 0x88,
+ 0x60, 0xc5, 0xc4, 0xe8, 0x20, 0xd4, 0x8c, 0x42, 0x82, 0x95, 0xfd, 0x27,
+ 0x79, 0x5d, 0x44, 0x5a, 0x4d, 0x6d, 0x60, 0x4b, 0x4a, 0x11, 0xea, 0x0f,
+ 0x45, 0x49, 0x07, 0xb5, 0xc2, 0x36, 0x47, 0xb5, 0xd6, 0xa9, 0xa1, 0x64,
+ 0xbc, 0xce, 0x62, 0xe4, 0xf9, 0x14, 0x46, 0x03, 0xcf, 0x31, 0x35, 0x7c,
+ 0x0a, 0x74, 0x11, 0x06, 0x90, 0x1f, 0xef, 0xa9, 0x68, 0xe0, 0x70, 0x48,
+ 0x14, 0x71, 0x5b, 0xd7, 0x3d, 0xb1, 0x3b, 0xab, 0x24, 0x78, 0xd1, 0x96,
+ 0x3f, 0x3d, 0x03, 0xbf, 0x1a, 0xb3, 0x56, 0x31, 0xb1, 0x53, 0x06, 0x41,
+ 0xc0, 0x38, 0x7e, 0x81, 0xc8, 0xd5, 0x0b, 0x8a, 0xc5, 0xae, 0x65, 0x22,
+ 0x5c, 0x02, 0xc8, 0x87, 0x56, 0x80, 0x61, 0xe8, 0x48, 0xee, 0x1c, 0xd3,
+ 0xb5, 0xf0, 0x34, 0x64, 0x07, 0xa6, 0xca, 0x74, 0x1b, 0xa6, 0x37, 0x19,
+ 0x82, 0x5d, 0x68, 0x4a, 0x96, 0x06, 0x9d, 0xfe, 0x89, 0xb4, 0x6a, 0x74,
+ 0x59, 0x35, 0x75, 0x62, 0x91, 0xac, 0x4c, 0xa1, 0x7a, 0x37, 0xc6, 0xd7,
+ 0x2e, 0xf5, 0x72, 0x0d, 0x27, 0x4a, 0xc3, 0xed, 0xb1, 0x8a, 0x69, 0xbf,
+ 0x71, 0x1f, 0xbe, 0x64, 0x0e, 0xc2, 0xf6, 0xd6, 0x31, 0x71, 0x38, 0x09,
+ 0x29, 0xef, 0x0c, 0x21, 0x23, 0x7a, 0x4e, 0xcc, 0x2d, 0x68, 0x00, 0x7a,
+ 0xb2, 0x6f, 0xb4, 0x73, 0xb0, 0xb2, 0xf6, 0xf5, 0x7c, 0x4e, 0x2f, 0xb7,
+ 0xe5, 0xed, 0xb1, 0x10, 0xc4, 0x80, 0xad, 0xf9, 0xd3, 0xc5, 0xac, 0xcd,
+ 0x9f, 0xb5, 0xa8, 0x31, 0xdc, 0xb1, 0x43, 0xc7, 0x07, 0x2b, 0x15, 0x7f,
+ 0x59, 0xe0, 0x6d, 0x38, 0x7c, 0x93, 0x85, 0x59, 0x49, 0xf0, 0xea, 0x5e,
+ 0x43, 0x47, 0xfb, 0xab, 0x3e, 0xf5, 0xfe, 0x4c, 0x67, 0x16, 0xe2, 0xcc,
+ 0xda, 0x8e, 0x7d, 0x4e, 0xc0, 0xd4, 0x0a, 0x45, 0xd8, 0xf8, 0xa2, 0x78,
+ 0x09, 0x63, 0xe5, 0xb7, 0x5b, 0x66, 0x83, 0xd0, 0xe6, 0xac, 0x5a, 0x03,
+ 0x01, 0x3f, 0x68, 0xe9, 0x2d, 0x13, 0x5d, 0x26, 0xb3, 0x59, 0x8d, 0xa8,
+ 0x2b, 0x9d, 0x89, 0xc5, 0xf8, 0x2f, 0xa6, 0x5d, 0x29, 0xcb, 0x0c, 0x0c,
+ 0x91, 0x75, 0x3f, 0x14, 0x9a, 0x83, 0xa0, 0xfa, 0x7c, 0xec, 0xda, 0xcc,
+ 0x55, 0xf5, 0x3a, 0x01, 0x73, 0x46, 0xc3, 0x84, 0xf2, 0x50, 0x0b, 0x8e,
+ 0x10, 0x47, 0x50, 0x78, 0xd0, 0x32, 0x98, 0x3f, 0x2f, 0x38, 0x7e, 0x84,
+ 0x1b, 0x88, 0x55, 0x05, 0x2b, 0xcc, 0xb7, 0x9c, 0xa6, 0x77, 0x18, 0xa1,
+ 0x4f, 0x98, 0x56, 0xda, 0x82, 0x55, 0xf5, 0x91, 0x64, 0x78, 0x73, 0x36,
+ 0x1e, 0xd4, 0xdd, 0xea, 0x6c, 0x5b, 0x58, 0x73, 0xf7, 0x14, 0xff, 0xb4,
+ 0xac, 0x79, 0x72, 0x61, 0xfb, 0x74, 0xa3, 0x79, 0x4e, 0xaa, 0xe5, 0xce,
+ 0x79, 0x05, 0x23, 0x92, 0xc1, 0x72, 0x8d, 0xea, 0x6e, 0x76, 0x4d, 0x3f,
+ 0xe4, 0x8d, 0xd3, 0x38, 0x22, 0xe7, 0xfc, 0x97, 0x70, 0x02, 0xfc, 0x9c,
+ 0xe4, 0x76, 0x6b, 0xee, 0x5b, 0x10, 0xc2, 0x92, 0x44, 0x9e, 0x03, 0xcc,
+ 0x9f, 0x31, 0x0b, 0x7a, 0xf9, 0x58, 0x81, 0x01, 0x09, 0xde, 0x1e, 0xad,
+ 0x2d, 0x8a, 0x09, 0xf5, 0xc5, 0x61, 0xa1, 0x6f, 0x62, 0x9c, 0x8b, 0xa5,
+ 0xaf, 0x8b, 0x0c, 0x05, 0x8d, 0xc5, 0x0e, 0x3f, 0xb4, 0x12, 0xd5, 0x9d,
+ 0xe5, 0x55, 0xda, 0x12, 0xbd, 0x3d, 0x55, 0x68, 0x07, 0xf2, 0x7a, 0x42,
+ 0xc3, 0x44, 0x3c, 0x3c, 0x65, 0x0c, 0x84, 0x2d, 0xe4, 0xd9, 0x09, 0x4a,
+ 0x2b, 0x6a, 0x89, 0xa6, 0x8c, 0x99, 0x2c, 0x8e, 0xfc, 0xc7, 0x5f, 0xf4,
+ 0x7c, 0xda, 0x47, 0xf7, 0xc4, 0xbe, 0xb8, 0x27, 0x00, 0x48, 0x92, 0x4d,
+ 0x4e, 0x68, 0x05, 0x83, 0xb9, 0x87, 0x4f, 0xdb, 0x07, 0x76, 0x5c, 0x0a,
+ 0x6a, 0xf0, 0x8b, 0x0a, 0x5f, 0x87, 0x54, 0x56, 0xfb, 0xd0, 0x13, 0xbe,
+ 0x00, 0xa9, 0x82, 0xf3, 0x51, 0xb0, 0x83, 0x92, 0x78, 0x42, 0xf0, 0x3b,
+ 0xea, 0x97, 0xed, 0x03, 0xf9, 0xc9, 0xd6, 0xf2, 0xf2, 0xec, 0xf5, 0x60,
+ 0x8f, 0xc0, 0x32, 0x34, 0x82, 0xf9, 0xa6, 0xa8, 0xda, 0x8e, 0x94, 0x35,
+ 0x0e, 0xb0, 0xe2, 0xa1, 0x74, 0x8a, 0xac, 0xb2, 0x6c, 0x32, 0x80, 0xa9,
+ 0x04, 0x18, 0xc8, 0xcd, 0x85, 0xdc, 0x80, 0x2c, 0xe7, 0x43, 0x36, 0x79,
+ 0x02, 0x8d, 0x1e, 0xb3, 0x2f, 0x9c, 0x59, 0xd1, 0xdc, 0x44, 0xdd, 0x8b,
+ 0x00, 0x36, 0xda, 0xf8, 0x5a, 0x6c, 0x93, 0xec, 0x11, 0x3c, 0xf9, 0x4c,
+ 0x23, 0x56, 0x0b, 0x82, 0x37, 0x9f, 0x81, 0x71, 0xee, 0x0d, 0x02, 0xa3,
+ 0xbe, 0x4a, 0x27, 0xef, 0x75, 0x71, 0xb4, 0x9b, 0xa7, 0x2f, 0x8a, 0x72,
+ 0x86, 0x2b, 0x73, 0x20, 0x2b, 0xd3, 0x19, 0x8f, 0xb3, 0x8f, 0xab, 0x2b,
+ 0x17, 0x15, 0xbb, 0xf3, 0xe5, 0xd5, 0x1b, 0xcc, 0xef, 0x47, 0xc3, 0x33,
+ 0xde, 0x95, 0xfc, 0x58, 0x7b, 0x53, 0x6b, 0x67, 0x6b, 0x6b, 0x8b, 0xca,
+ 0xb6, 0x91, 0x29, 0x7b, 0x75, 0x25, 0x66, 0xcb, 0xfe, 0x69, 0x9c, 0xc3,
+ 0xdc, 0xe0, 0x8d, 0x94, 0xba, 0x2d, 0x76, 0xef, 0xc3, 0xba, 0x7b, 0x77,
+ 0x21, 0x0d, 0xd7, 0xf9, 0xa1, 0xd6, 0x61, 0xee, 0xfe, 0x67, 0xef, 0xdd,
+ 0x9b, 0xe4, 0x97, 0xcb, 0xf3, 0xeb, 0x1f, 0x93, 0xd7, 0x6f, 0x5a, 0x67,
+ 0xef, 0x7a, 0x9d, 0x7f, 0x4b, 0xae, 0xde, 0x76, 0xba, 0x3d, 0x5d, 0x47,
+ 0xeb, 0xab, 0x8f, 0x17, 0xbd, 0x8b, 0x0b, 0x29, 0x86, 0xc4, 0xfe, 0x33,
+ 0x61, 0x20, 0x60, 0x0f, 0x4f, 0xe1, 0xd0, 0x69, 0x52, 0x62, 0x81, 0xc8,
+ 0xf5, 0x9c, 0x37, 0x40, 0xf0, 0x9f, 0x93, 0xf7, 0x46, 0x99, 0x64, 0x53,
+ 0xbb, 0xb3, 0x7a, 0x0e, 0xcc, 0x2c, 0x8a, 0x85, 0x55, 0xb3, 0x93, 0x36,
+ 0x7c, 0xb3, 0x88, 0x9e, 0x31, 0xd6, 0x40, 0x56, 0xb3, 0xbc, 0xf4, 0xeb,
+ 0x7a, 0x59, 0xde, 0x03, 0x48, 0x4e, 0xe6, 0xf6, 0xe9, 0x23, 0x94, 0xef,
+ 0x41, 0x7a, 0xa3, 0x7d, 0xa1, 0x77, 0xb0, 0x4e, 0xc4, 0xd4, 0xc5, 0x81,
+ 0xb8, 0xfc, 0x6a, 0x25, 0xda, 0x4e, 0x95, 0xaf, 0xb6, 0xcc, 0x09, 0x13,
+ 0x14, 0x34, 0x87, 0xb2, 0x0c, 0xa3, 0xfa, 0x3e, 0xd8, 0x1a, 0x52, 0xef,
+ 0x55, 0xe1, 0x97, 0xe2, 0x91, 0x4e, 0xbb, 0xca, 0xed, 0x20, 0xd8, 0x37,
+ 0x33, 0xe0, 0xb8, 0xe9, 0x04, 0x40, 0x51, 0x89, 0x11, 0x3d, 0x16, 0x93,
+ 0xa1, 0x54, 0xce, 0x9e, 0x4a, 0xdc, 0x96, 0xa1, 0xf5, 0x5c, 0x90, 0x14,
+ 0x03, 0x76, 0x5a, 0xe1, 0xa0, 0x04, 0x4d, 0xcc, 0x06, 0xc7, 0xd1, 0x33,
+ 0x34, 0xc6, 0xe7, 0xef, 0x8c, 0x3d, 0xdc, 0x19, 0x7b, 0xb2, 0x33, 0x2e,
+ 0xb9, 0xfa, 0x2f, 0xd6, 0xea, 0x26, 0x49, 0xc7, 0x9e, 0x2d, 0x6e, 0x05,
+ 0x33, 0x77, 0x26, 0x39, 0x27, 0xe8, 0x3a, 0xa6, 0x29, 0xa6, 0x65, 0xf2,
+ 0xea, 0xf2, 0x55, 0x2f, 0x81, 0x03, 0xca, 0x1c, 0x1f, 0x1b, 0x4d, 0x45,
+ 0xc7, 0xa1, 0x99, 0xc6, 0x95, 0xc5, 0x80, 0x88, 0xbd, 0x8c, 0xcf, 0x4b,
+ 0xd7, 0xba, 0x52, 0xb0, 0x03, 0x56, 0x64, 0x5d, 0x2b, 0xca, 0xc8, 0x52,
+ 0x51, 0xdd, 0x23, 0xb3, 0xb6, 0xae, 0xa3, 0xdc, 0x5c, 0x36, 0x9b, 0x95,
+ 0xbd, 0x37, 0x4f, 0x37, 0x5c, 0xb6, 0xab, 0xf3, 0x26, 0x72, 0x12, 0x36,
+ 0x77, 0x2b, 0x12, 0x84, 0x36, 0x2f, 0x75, 0x80, 0x9f, 0xaa, 0xb5, 0xdf,
+ 0xb8, 0xd0, 0x6a, 0x6d, 0x3a, 0xb1, 0xd1, 0xd5, 0xda, 0x82, 0xb2, 0x28,
+ 0xa4, 0x47, 0xba, 0xe8, 0x47, 0xf5, 0xf4, 0xfe, 0xd5, 0x38, 0xed, 0xfd,
+ 0x8b, 0x43, 0x50, 0xd6, 0xd7, 0x1a, 0xc1, 0xaf, 0xe3, 0x3e, 0xc5, 0xa9,
+ 0xf0, 0x07, 0x6e, 0xaa, 0x01, 0x38, 0xfc, 0x8d, 0xb5, 0xc6, 0xe2, 0x7b,
+ 0x57, 0x57, 0xe0, 0xb6, 0x8d, 0x64, 0x11, 0x52, 0x03, 0x3f, 0xea, 0x06,
+ 0x46, 0x2d, 0xd8, 0x31, 0xfd, 0xda, 0x69, 0xfd, 0xcf, 0xb4, 0xf5, 0xfb,
+ 0x6f, 0xc9, 0x3a, 0x7f, 0xda, 0x6a, 0x1d, 0xb7, 0xff, 0xe3, 0x37, 0x28,
+ 0x07, 0xd0, 0x5a, 0x93, 0xda, 0x04, 0xa8, 0xd7, 0xf4, 0xac, 0xbc, 0x82,
+ 0x81, 0x33, 0xb6, 0x98, 0x19, 0x6e, 0xf2, 0x97, 0x90, 0xa9, 0xab, 0x04,
+ 0x98, 0xf9, 0xba, 0xca, 0xe5, 0xf8, 0x93, 0x11, 0x1b, 0xf5, 0x51, 0x5a,
+ 0x29, 0xb6, 0xac, 0xb1, 0x02, 0x63, 0x70, 0x8d, 0x94, 0xf9, 0x82, 0xac,
+ 0x34, 0x34, 0x08, 0x72, 0xde, 0x5b, 0x18, 0x4c, 0x14, 0x5f, 0x27, 0xf6,
+ 0x88, 0x49, 0x00, 0x91, 0xee, 0x13, 0xf2, 0x25, 0xe1, 0x97, 0x61, 0xd4,
+ 0x3a, 0x16, 0x75, 0xb5, 0x8f, 0x5d, 0x76, 0x5e, 0x77, 0x6c, 0xec, 0x2a,
+ 0x24, 0xd9, 0x12, 0x38, 0x2b, 0x47, 0xe8, 0x71, 0x89, 0xf8, 0x18, 0xfd,
+ 0x37, 0x5d, 0x6c, 0x76, 0xe9, 0x67, 0xdd, 0xb2, 0xac, 0x13, 0x62, 0x27,
+ 0x84, 0xb7, 0x80, 0xd0, 0x33, 0xef, 0x1e, 0x73, 0xd6, 0xb6, 0xe8, 0xb0,
+ 0xfd, 0xa9, 0x7b, 0xd5, 0xda, 0xa1, 0x9b, 0x57, 0x57, 0xd4, 0xed, 0x4a,
+ 0x8a, 0x8a, 0x3d, 0xb2, 0x17, 0xb4, 0xaf, 0xca, 0xc3, 0xcd, 0x4a, 0xa9,
+ 0x6a, 0x4b, 0x83, 0x98, 0xe4, 0xc5, 0xac, 0xd4, 0xbc, 0x9d, 0xfc, 0x15,
+ 0xe3, 0xd2, 0xf2, 0x38, 0xf4, 0x43, 0xf0, 0x19, 0x9d, 0x6c, 0xfa, 0x90,
+ 0x40, 0x9c, 0xac, 0x1a, 0x9b, 0x0b, 0xe8, 0xd1, 0xd1, 0xd1, 0xfe, 0x71,
+ 0x6b, 0x7b, 0xf1, 0x60, 0xf1, 0xbe, 0x9d, 0x6a, 0x92, 0x32, 0xa4, 0x5d,
+ 0x7d, 0x3e, 0x7d, 0xfe, 0x80, 0xf4, 0x79, 0x91, 0xa1, 0xa3, 0xe2, 0x7a,
+ 0xb4, 0x67, 0xda, 0x43, 0x3b, 0x26, 0x07, 0xad, 0x9d, 0xd9, 0x75, 0xf2,
+ 0xd3, 0xea, 0xdf, 0x30, 0x49, 0x8e, 0x53, 0xd6, 0xa6, 0xec, 0xba, 0xdf,
+ 0x50, 0x7e, 0x2c, 0x6f, 0x2d, 0xac, 0x8b, 0x1f, 0x6e, 0xc6, 0xa9, 0x36,
+ 0xaf, 0x4d, 0xe0, 0xb5, 0x4d, 0x87, 0xfe, 0x5a, 0x37, 0xbf, 0x3b, 0x5b,
+ 0x3b, 0x3b, 0xad, 0xbf, 0xbf, 0x9d, 0x3f, 0xc1, 0x57, 0xf7, 0xf9, 0xed,
+ 0xf4, 0x3f, 0xfe, 0x7e, 0x79, 0x55, 0x9d, 0xdf, 0x0a, 0x19, 0xf5, 0x7e,
+ 0xea, 0x56, 0xdb, 0xab, 0xeb, 0xb1, 0x47, 0x3c, 0x4c, 0x55, 0x84, 0x50,
+ 0x67, 0x5e, 0x96, 0xfc, 0xa3, 0xb5, 0xb5, 0xb3, 0x75, 0x04, 0xeb, 0x70,
+ 0xf8, 0x45, 0xb1, 0x7c, 0xf7, 0xf1, 0x2c, 0xdf, 0xb7, 0x67, 0xf9, 0x14,
+ 0xa7, 0x1f, 0x44, 0x18, 0xd0, 0xb1, 0x07, 0x22, 0xc3, 0x54, 0xcf, 0x71,
+ 0xb8, 0xe9, 0x0e, 0x02, 0x33, 0xe0, 0x10, 0x86, 0xe8, 0x34, 0x82, 0x30,
+ 0x64, 0x6e, 0xc0, 0x18, 0x86, 0xe5, 0x86, 0x2a, 0x67, 0x4f, 0xd9, 0x02,
+ 0x86, 0x53, 0x74, 0x4a, 0x10, 0x2b, 0xcd, 0x63, 0xaf, 0x71, 0x71, 0xcb,
+ 0xa4, 0x33, 0x33, 0x72, 0xd9, 0x04, 0x91, 0x75, 0xbf, 0xa0, 0x87, 0x77,
+ 0x1f, 0x1d, 0xa5, 0xfb, 0xe2, 0x28, 0xf5, 0xe5, 0x73, 0xc3, 0xcd, 0xb4,
+ 0x00, 0x6d, 0x56, 0xd7, 0x33, 0xd5, 0x03, 0x7a, 0x2a, 0x02, 0x76, 0x51,
+ 0x2c, 0x4a, 0x33, 0x4c, 0x26, 0x26, 0xb4, 0x34, 0x02, 0x63, 0x50, 0xf3,
+ 0x82, 0x3c, 0xf1, 0x44, 0xda, 0x72, 0x53, 0xc7, 0x24, 0x01, 0xd2, 0x1a,
+ 0xb1, 0x4d, 0x8b, 0xda, 0xcb, 0xba, 0x98, 0xd0, 0xd5, 0xc7, 0x96, 0x25,
+ 0xa3, 0x07, 0xf3, 0xbe, 0xfc, 0xa3, 0xe1, 0xf2, 0x81, 0x24, 0xc8, 0x6d,
+ 0x91, 0xd7, 0x36, 0x22, 0x6f, 0xd1, 0x0b, 0x30, 0x19, 0x18, 0x72, 0x66,
+ 0x5a, 0xe6, 0xd4, 0xcb, 0xc6, 0xe0, 0x8e, 0xf8, 0x60, 0x36, 0xef, 0x63,
+ 0x4a, 0x96, 0x07, 0x6e, 0x84, 0xc5, 0x7a, 0xb4, 0x7e, 0x99, 0xf7, 0x21,
+ 0x4e, 0x04, 0x4c, 0x4d, 0x2b, 0x18, 0x53, 0x92, 0x96, 0xfe, 0xb9, 0xe1,
+ 0x7e, 0x47, 0x58, 0x74, 0x3c, 0x1c, 0x88, 0xd0, 0xd3, 0x29, 0x1f, 0x19,
+ 0x13, 0xaa, 0xad, 0x09, 0xe2, 0x6d, 0x0a, 0x2e, 0x73, 0x02, 0x24, 0x5f,
+ 0x57, 0x23, 0x49, 0x01, 0x5c, 0x11, 0xc2, 0x8b, 0x8a, 0x99, 0xa1, 0x21,
+ 0xf4, 0xc0, 0x80, 0xf1, 0xc5, 0x89, 0xe5, 0x80, 0x19, 0x5f, 0x18, 0xa6,
+ 0x00, 0xce, 0xe8, 0xb0, 0x5b, 0x76, 0x72, 0x37, 0x62, 0x45, 0x02, 0xe8,
+ 0xc8, 0x56, 0x12, 0xaa, 0x96, 0x42, 0x75, 0x88, 0x9e, 0x76, 0x72, 0x20,
+ 0x23, 0xc7, 0x17, 0x9a, 0x3b, 0xa6, 0x45, 0xbf, 0x18, 0x4a, 0x34, 0xde,
+ 0x8f, 0xd7, 0xd7, 0x6f, 0x61, 0x44, 0x20, 0xb6, 0x6e, 0x88, 0xdc, 0x1f,
+ 0x4d, 0x6a, 0x82, 0x40, 0xc4, 0xc6, 0x29, 0xfe, 0x51, 0x79, 0x19, 0x01,
+ 0x48, 0x0f, 0x85, 0x62, 0x90, 0xbf, 0x3b, 0x7a, 0x66, 0x4a, 0x0c, 0x22,
+ 0xc5, 0x37, 0xbb, 0xb2, 0xeb, 0x1e, 0x29, 0x58, 0x27, 0x4d, 0x44, 0x16,
+ 0xb6, 0xeb, 0x30, 0x88, 0xa4, 0xac, 0x34, 0xeb, 0xc0, 0x66, 0x3e, 0x4b,
+ 0x7c, 0x02, 0x02, 0xf9, 0xee, 0x57, 0xd0, 0x89, 0xe2, 0x83, 0x24, 0x5c,
+ 0x1e, 0xd5, 0x71, 0x36, 0x89, 0xd6, 0xf9, 0xc9, 0x1c, 0x2e, 0x91, 0x5d,
+ 0x74, 0x09, 0xfc, 0xb4, 0xb3, 0x4b, 0x2a, 0x83, 0x06, 0x10, 0x1c, 0x33,
+ 0x9d, 0xa7, 0xa1, 0x75, 0x01, 0xcb, 0x72, 0xcf, 0x5b, 0x04, 0x34, 0x83,
+ 0xcd, 0x51, 0x37, 0xc0, 0x21, 0x68, 0xeb, 0xc4, 0x18, 0x9e, 0x60, 0x88,
+ 0x8d, 0xa2, 0xdd, 0x30, 0x62, 0x59, 0xe0, 0x48, 0x6e, 0xe9, 0x66, 0x30,
+ 0x22, 0x9a, 0x56, 0xd2, 0xc9, 0x13, 0xdf, 0x64, 0xb5, 0x1c, 0x36, 0xdb,
+ 0x40, 0xc0, 0x05, 0x24, 0xe2, 0x9b, 0x6e, 0x65, 0x94, 0xe3, 0x14, 0xeb,
+ 0x57, 0x18, 0x2a, 0xf8, 0x59, 0x75, 0x3d, 0x6f, 0xf5, 0xf8, 0x74, 0xf8,
+ 0x82, 0xc7, 0xd1, 0x2e, 0x4a, 0x19, 0xbb, 0x22, 0x64, 0xa4, 0xe6, 0x54,
+ 0x34, 0xd7, 0x87, 0xee, 0xf8, 0xd7, 0x91, 0xbd, 0x4b, 0xb8, 0x42, 0x02,
+ 0x9a, 0x42, 0x98, 0xe6, 0x85, 0x44, 0x15, 0x04, 0xf7, 0x1b, 0xf6, 0x31,
+ 0xad, 0xc9, 0x52, 0xc2, 0xce, 0x35, 0x4e, 0xf1, 0x4f, 0x12, 0x6e, 0xf2,
+ 0xc7, 0x58, 0x69, 0x09, 0xb2, 0xbb, 0x49, 0x6d, 0x89, 0xb1, 0x87, 0x03,
+ 0xab, 0xd7, 0x97, 0x62, 0xde, 0xa6, 0x7e, 0x74, 0x91, 0x54, 0x41, 0x09,
+ 0x6d, 0xa5, 0x9f, 0x75, 0xc5, 0x0f, 0xd1, 0x71, 0x73, 0x78, 0xec, 0xaf,
+ 0x79, 0x9a, 0xa8, 0x41, 0x82, 0x55, 0x90, 0x07, 0xa6, 0x53, 0x23, 0x09,
+ 0x8e, 0x12, 0xc4, 0x81, 0x0f, 0xb9, 0x45, 0x2f, 0x69, 0xc6, 0x95, 0x00,
+ 0xac, 0x5b, 0x70, 0x9f, 0xdf, 0x99, 0x45, 0x21, 0xe0, 0x03, 0xcb, 0x63,
+ 0x25, 0xe0, 0x9a, 0x4e, 0x2c, 0x8e, 0x34, 0xb5, 0x6d, 0x40, 0x09, 0x52,
+ 0xa7, 0xbc, 0x41, 0xd4, 0xa1, 0xab, 0xe7, 0x2b, 0x20, 0xdc, 0x52, 0x37,
+ 0x0a, 0x21, 0x4f, 0x73, 0x66, 0x7e, 0xd2, 0x82, 0xcd, 0x1f, 0x80, 0xea,
+ 0xd9, 0xf3, 0x47, 0x45, 0x85, 0xb2, 0xf0, 0x4d, 0xe3, 0x22, 0xce, 0x12,
+ 0xc8, 0x5e, 0xe3, 0x42, 0xdc, 0xd8, 0x13, 0x4e, 0xaf, 0x5e, 0xc2, 0x16,
+ 0xaa, 0x62, 0x95, 0xbe, 0xa0, 0xc1, 0x66, 0x07, 0x51, 0x99, 0x77, 0x04,
+ 0x95, 0x99, 0x1c, 0x65, 0x3a, 0x16, 0x4a, 0x47, 0x41, 0xdb, 0x5e, 0xc6,
+ 0x06, 0x1c, 0x46, 0x4d, 0x7d, 0x6f, 0xde, 0x67, 0x67, 0xe6, 0xbb, 0x35,
+ 0x1c, 0xf1, 0xda, 0xf7, 0x1c, 0x4e, 0x14, 0xfc, 0x48, 0xd2, 0xb1, 0xf9,
+ 0x75, 0x89, 0xa0, 0x20, 0x33, 0x97, 0x54, 0x9c, 0x60, 0x89, 0xfa, 0x2e,
+ 0x0e, 0xb0, 0xc1, 0x2c, 0x46, 0x1c, 0xe6, 0x18, 0xcd, 0xea, 0x54, 0x45,
+ 0x19, 0x0b, 0x45, 0x97, 0xb3, 0xd1, 0xc8, 0x88, 0xdf, 0xbf, 0xb3, 0x9f,
+ 0x50, 0x70, 0x9e, 0x13, 0x1b, 0x9c, 0x1e, 0x4b, 0xc8, 0x6c, 0xda, 0xb4,
+ 0x53, 0x8d, 0x0d, 0x88, 0x14, 0x30, 0xfe, 0x50, 0xf4, 0x9d, 0xb6, 0x37,
+ 0xab, 0xc2, 0xcf, 0x60, 0x14, 0xbb, 0xc4, 0x84, 0x50, 0x08, 0xb1, 0x12,
+ 0x6d, 0x6e, 0xb2, 0xfb, 0xf4, 0x43, 0x6e, 0xc6, 0x55, 0x83, 0x7a, 0xb3,
+ 0x44, 0xad, 0x06, 0xd8, 0x23, 0xe0, 0xd5, 0x01, 0x11, 0x8f, 0x82, 0xb1,
+ 0xd9, 0x4a, 0xaf, 0x8a, 0x65, 0x63, 0x35, 0x30, 0xae, 0x72, 0x2d, 0x66,
+ 0x74, 0x0e, 0x5a, 0x45, 0x8b, 0xa5, 0x45, 0x20, 0x32, 0x73, 0xf1, 0x22,
+ 0xf9, 0xf6, 0x4e, 0x82, 0x53, 0xef, 0x28, 0x0c, 0x16, 0x1b, 0x74, 0xc8,
+ 0x9d, 0xd0, 0x72, 0x57, 0x1c, 0xa7, 0xf4, 0x1b, 0xac, 0x20, 0xf6, 0xc6,
+ 0x4c, 0x79, 0x4a, 0xf5, 0x07, 0x1c, 0xd6, 0xf6, 0x13, 0xa9, 0x7a, 0x58,
+ 0xc3, 0x2a, 0x6e, 0xe3, 0xa8, 0x75, 0x4d, 0x92, 0xaa, 0xa5, 0x0a, 0x2d,
+ 0x55, 0xe5, 0xac, 0xb8, 0xa3, 0x52, 0x18, 0x3b, 0x79, 0x17, 0x4f, 0x54,
+ 0x7c, 0x72, 0x69, 0xf1, 0xf5, 0xc7, 0x05, 0x57, 0xdf, 0x83, 0x2c, 0xb1,
+ 0x85, 0xde, 0x61, 0xeb, 0x93, 0xc3, 0xbc, 0xc8, 0x3b, 0x89, 0xe4, 0xad,
+ 0x9f, 0x22, 0x57, 0x8d, 0x9b, 0x93, 0x99, 0x17, 0x4e, 0x15, 0x67, 0x49,
+ 0x28, 0x13, 0xbb, 0x05, 0xcf, 0xd7, 0x08, 0x77, 0xc4, 0x20, 0x9f, 0xe1,
+ 0xdf, 0x45, 0x96, 0x1b, 0x87, 0xcd, 0x8b, 0x61, 0x20, 0x91, 0xb9, 0xc9,
+ 0xbd, 0x2e, 0x6a, 0x74, 0x3a, 0x01, 0x1e, 0x69, 0xe7, 0x34, 0x59, 0x30,
+ 0xa5, 0x66, 0x2e, 0x38, 0xbd, 0x5b, 0x3e, 0x2d, 0x3f, 0xa9, 0x6f, 0xa8,
+ 0x96, 0x9c, 0x99, 0xab, 0x65, 0x67, 0x74, 0x4e, 0x5a, 0x1d, 0x45, 0x77,
+ 0xa5, 0x5e, 0x25, 0x4a, 0xdc, 0x9c, 0x08, 0xc8, 0xc8, 0xc2, 0x61, 0xa9,
+ 0xac, 0x07, 0x95, 0xc9, 0x27, 0x36, 0x01, 0x05, 0x26, 0x6e, 0xc0, 0x0d,
+ 0xa1, 0x13, 0x68, 0x63, 0x40, 0x50, 0x3c, 0xf9, 0x1c, 0x54, 0xcf, 0xd0,
+ 0x02, 0x10, 0xc8, 0xda, 0x92, 0x5c, 0x74, 0x90, 0xe9, 0xdf, 0x67, 0xae,
+ 0xba, 0xfd, 0x9c, 0xd7, 0x1a, 0xdd, 0x77, 0xf1, 0x7b, 0x2b, 0x68, 0x53,
+ 0x4b, 0x53, 0x2c, 0x27, 0xf1, 0x3e, 0x93, 0x5c, 0x35, 0x6c, 0x9b, 0x60,
+ 0xcc, 0x39, 0x59, 0x6a, 0x2d, 0x12, 0x06, 0x56, 0x4d, 0x63, 0xb7, 0x0c,
+ 0x36, 0xcc, 0x63, 0xf7, 0x80, 0xf4, 0xd6, 0x4a, 0x4d, 0x8b, 0xde, 0xa6,
+ 0xae, 0x21, 0x40, 0x1d, 0x6b, 0x38, 0x07, 0x63, 0xe0, 0xf9, 0x53, 0x85,
+ 0xb0, 0x54, 0x95, 0x19, 0xfa, 0x12, 0x82, 0x71, 0x50, 0x5f, 0x10, 0x88,
+ 0x73, 0x3e, 0xcf, 0xb0, 0x0b, 0xa0, 0xc1, 0x0f, 0xb9, 0xf6, 0x69, 0x68,
+ 0x65, 0x76, 0x51, 0x13, 0x71, 0xc0, 0xad, 0x26, 0x8a, 0x5d, 0x92, 0xb1,
+ 0xc6, 0x87, 0xd4, 0xf2, 0xc8, 0x0d, 0xde, 0x0a, 0xd4, 0xf0, 0x80, 0xa6,
+ 0x9f, 0x27, 0x7d, 0xd9, 0x38, 0x7d, 0x7b, 0x19, 0xf9, 0xa1, 0x2b, 0x31,
+ 0x20, 0x5d, 0x89, 0x01, 0xa9, 0xbe, 0x61, 0x61, 0xe6, 0x69, 0xf3, 0x39,
+ 0x39, 0xd9, 0xb4, 0x73, 0xc3, 0xd2, 0x2a, 0x0b, 0xca, 0x39, 0xd6, 0xf8,
+ 0x8c, 0x82, 0x5a, 0xf6, 0x9b, 0xa7, 0x1b, 0x4e, 0xc7, 0xa8, 0x23, 0xbe,
+ 0x4d, 0x3a, 0x86, 0xf9, 0x57, 0x16, 0x62, 0xb0, 0x50, 0xe8, 0x77, 0x8d,
+ 0xed, 0x06, 0x64, 0x37, 0x8e, 0x0c, 0x6d, 0xd1, 0x95, 0x86, 0x91, 0x97,
+ 0x87, 0xc3, 0x07, 0x48, 0x0b, 0x01, 0xaf, 0xd2, 0x21, 0xa4, 0xf1, 0x42,
+ 0xb5, 0x3d, 0x23, 0xec, 0x9a, 0xde, 0x1a, 0x8a, 0x04, 0xe3, 0x01, 0x94,
+ 0x04, 0x98, 0x4e, 0xb0, 0xb1, 0x81, 0xa1, 0xcc, 0x47, 0xc3, 0x86, 0xcc,
+ 0x4f, 0x3b, 0x0d, 0x90, 0x0c, 0xe8, 0xf3, 0x36, 0xe0, 0x1a, 0x4c, 0x07,
+ 0xa7, 0x70, 0x83, 0xbd, 0xb8, 0xd7, 0x08, 0x5a, 0x41, 0xd0, 0x48, 0xf8,
+ 0x7e, 0x53, 0x4c, 0xa7, 0xc5, 0x48, 0x16, 0x7e, 0x75, 0x05, 0x20, 0xd5,
+ 0xec, 0xf3, 0xfa, 0x05, 0x41, 0x2f, 0x54, 0x31, 0x02, 0xb8, 0x79, 0xd3,
+ 0x74, 0xca, 0x74, 0x2c, 0xb8, 0x0b, 0xa1, 0xf7, 0xbc, 0xd7, 0x98, 0x56,
+ 0x1d, 0x0a, 0x91, 0xbc, 0xc7, 0x01, 0x99, 0x30, 0xae, 0x95, 0xfd, 0x21,
+ 0x08, 0x0a, 0x5c, 0x5d, 0x09, 0x6f, 0x10, 0xb0, 0xc0, 0x79, 0xbd, 0xb0,
+ 0x63, 0x1d, 0xe5, 0x83, 0xc1, 0x30, 0xc3, 0x4e, 0xc8, 0x2d, 0x13, 0x90,
+ 0xed, 0x14, 0xd4, 0x3c, 0xca, 0x62, 0x56, 0x30, 0xe2, 0x97, 0x54, 0x80,
+ 0x3b, 0x21, 0x4d, 0xdc, 0x39, 0x8a, 0x1b, 0x90, 0x22, 0xae, 0x1c, 0xc7,
+ 0x0a, 0xb2, 0x13, 0x9b, 0xc0, 0xc5, 0x3a, 0xad, 0x03, 0x8f, 0x35, 0x8f,
+ 0x5f, 0xf2, 0xa7, 0xf0, 0xc1, 0x79, 0x8f, 0x29, 0xcc, 0x59, 0x79, 0x1c,
+ 0xe3, 0x4e, 0x1d, 0x76, 0xed, 0x52, 0xad, 0x19, 0xa1, 0xcc, 0x6c, 0x99,
+ 0x41, 0x36, 0x6e, 0x9c, 0x5e, 0xc8, 0xc7, 0xcf, 0xd7, 0xff, 0x45, 0x54,
+ 0xb1, 0xc4, 0x82, 0x44, 0xa5, 0xb0, 0x70, 0x34, 0x62, 0x4f, 0x7e, 0xe6,
+ 0xc2, 0xd4, 0x0c, 0x6b, 0x28, 0xec, 0x44, 0x4d, 0xec, 0x58, 0x82, 0xcb,
+ 0x3f, 0xf7, 0xac, 0x7e, 0x2e, 0x4b, 0xcf, 0x36, 0x9a, 0x7a, 0xb6, 0x6d,
+ 0xe9, 0x1e, 0x3b, 0x33, 0xee, 0x38, 0x7b, 0x4e, 0xef, 0x3e, 0x71, 0xc5,
+ 0x81, 0xe5, 0x7d, 0xea, 0x1e, 0x8c, 0xc8, 0x88, 0xab, 0x2b, 0x35, 0x0b,
+ 0xfe, 0x59, 0x37, 0xe2, 0xd2, 0xf3, 0xf1, 0xd9, 0x7c, 0x19, 0xff, 0x15,
+ 0x8b, 0x65, 0xa6, 0x26, 0xbf, 0x7d, 0xc2, 0x29, 0x31, 0x7f, 0xff, 0xfb,
+ 0x50, 0xdf, 0x33, 0xb7, 0xe8, 0x67, 0x62, 0x21, 0x9e, 0x5c, 0x53, 0xcb,
+ 0x3e, 0x22, 0x7b, 0x3f, 0x79, 0xe6, 0xd6, 0xbf, 0x79, 0x82, 0x0a, 0xb7,
+ 0x8d, 0xd3, 0x33, 0xfc, 0xbb, 0x34, 0x0d, 0x2e, 0x7a, 0xec, 0xff, 0x5c,
+ 0xe6, 0x4d, 0xb2, 0x68, 0xcd, 0x08, 0xd2, 0x12, 0x8a, 0x9d, 0x29, 0x46,
+ 0x6b, 0x76, 0x3f, 0x04, 0xcc, 0x7f, 0xd9, 0xc1, 0x7f, 0xf2, 0x9e, 0xfa,
+ 0xd2, 0xef, 0xc4, 0x29, 0xdf, 0x44, 0xa9, 0x0f, 0xfe, 0x82, 0xb8, 0xe8,
+ 0x85, 0x0e, 0x87, 0x7b, 0x47, 0xec, 0x6b, 0xb0, 0x87, 0xde, 0xa9, 0x3d,
+ 0xe4, 0x6c, 0x67, 0x6f, 0x14, 0x50, 0x05, 0x42, 0x4a, 0xa0, 0xe6, 0xe0,
+ 0x25, 0x5f, 0x2b, 0x73, 0x19, 0x68, 0xa6, 0x80, 0xb0, 0xc6, 0x60, 0x15,
+ 0xe0, 0xe8, 0xc5, 0x68, 0x54, 0xb3, 0x94, 0x27, 0x04, 0xa2, 0xda, 0x24,
+ 0xf8, 0xc3, 0x47, 0x71, 0x8a, 0xcf, 0xa9, 0xbc, 0x91, 0xb8, 0xaa, 0x6f,
+ 0x91, 0xea, 0xe0, 0xb8, 0xd4, 0x1c, 0x7d, 0x98, 0x8f, 0x97, 0x89, 0xec,
+ 0x57, 0xf5, 0x09, 0xbc, 0x72, 0xc2, 0xd5, 0x42, 0x89, 0xb1, 0x62, 0xe4,
+ 0x0c, 0x2a, 0xc0, 0x55, 0xf9, 0xb2, 0x10, 0xbc, 0xd8, 0x53, 0xd8, 0x1f,
+ 0x20, 0x16, 0x7f, 0x02, 0x91, 0x8a, 0xc3, 0x27, 0x55, 0x12, 0xd9, 0xe1,
+ 0x0b, 0xd6, 0xc6, 0x76, 0xbb, 0x6d, 0xe5, 0x30, 0xfa, 0x64, 0x7b, 0xcd,
+ 0x83, 0xe6, 0xc3, 0x7b, 0x1c, 0x30, 0x1f, 0x7d, 0x55, 0xa8, 0xdb, 0x52,
+ 0xcd, 0xf4, 0x34, 0x77, 0xbb, 0x95, 0xaa, 0x07, 0xe1, 0x80, 0x96, 0x4f,
+ 0xd4, 0x4a, 0xaa, 0xd5, 0x4f, 0x25, 0xed, 0x7b, 0x40, 0x86, 0x3a, 0x36,
+ 0x50, 0x82, 0x9b, 0xdc, 0xcc, 0x0d, 0x3e, 0xe8, 0xa0, 0x40, 0x1c, 0x02,
+ 0x30, 0x21, 0x50, 0xa3, 0x27, 0x19, 0x83, 0x32, 0xa1, 0xcc, 0x43, 0x36,
+ 0xb1, 0x48, 0x2b, 0x0c, 0xe4, 0x6e, 0x13, 0x1c, 0xa6, 0x3e, 0xb6, 0x88,
+ 0xdf, 0x1a, 0x40, 0x2f, 0xbb, 0xa5, 0xd2, 0x98, 0x30, 0xd7, 0xf7, 0x59,
+ 0x52, 0x49, 0x33, 0xf3, 0xca, 0xda, 0x42, 0x34, 0x78, 0x3c, 0x11, 0x00,
+ 0x42, 0x58, 0x55, 0x26, 0x00, 0x86, 0xb4, 0x86, 0x56, 0x49, 0x5d, 0xa6,
+ 0xb8, 0x9a, 0x2b, 0xb2, 0x51, 0x6d, 0x98, 0x28, 0x16, 0x60, 0xfe, 0xe1,
+ 0xaf, 0x67, 0x9f, 0x23, 0xa3, 0x92, 0x2b, 0x38, 0x6f, 0x49, 0x8f, 0x49,
+ 0x6c, 0x56, 0xce, 0xcc, 0x9e, 0x7a, 0x4c, 0x9f, 0xbe, 0x64, 0x71, 0x90,
+ 0x03, 0x74, 0xf9, 0x1d, 0x88, 0xcf, 0xcf, 0xab, 0x74, 0xc2, 0x65, 0x24,
+ 0x02, 0x62, 0x08, 0xab, 0x2e, 0xa2, 0x7b, 0x9a, 0xe0, 0x1d, 0x64, 0x7f,
+ 0xba, 0xea, 0x52, 0xc9, 0x7a, 0x5d, 0x31, 0x81, 0x0d, 0x72, 0x34, 0x0d,
+ 0xcd, 0xf8, 0x4a, 0x8a, 0x15, 0x20, 0xbb, 0x16, 0xcd, 0xba, 0x64, 0xe0,
+ 0x27, 0xeb, 0xd7, 0x58, 0xe5, 0x18, 0x4d, 0x75, 0x5e, 0xf4, 0x4d, 0xe7,
+ 0x1a, 0xf1, 0xb4, 0xe1, 0xbf, 0xeb, 0x93, 0x20, 0x08, 0x07, 0x92, 0xd1,
+ 0x8c, 0x1a, 0x4a, 0x16, 0xa2, 0xd8, 0x53, 0x95, 0x27, 0x2c, 0xd2, 0xc7,
+ 0x24, 0x1b, 0x09, 0x22, 0xbf, 0x94, 0x08, 0xc3, 0x8e, 0x06, 0xdc, 0x21,
+ 0x55, 0xee, 0x3c, 0x57, 0x95, 0xd1, 0x0d, 0xbc, 0xbd, 0x91, 0x74, 0x62,
+ 0x6e, 0x05, 0xf2, 0xa8, 0xc6, 0x76, 0xa6, 0xe5, 0x34, 0x08, 0xc9, 0xde,
+ 0xc7, 0xe9, 0xf0, 0xb0, 0x27, 0xec, 0x3e, 0xb3, 0xdb, 0x0c, 0x4b, 0xb7,
+ 0xc4, 0xf6, 0x59, 0x3b, 0x59, 0xc4, 0x70, 0x94, 0x36, 0x18, 0x32, 0x1e,
+ 0xc0, 0x42, 0xfd, 0x59, 0x29, 0x85, 0x8e, 0x0d, 0xfd, 0x12, 0x73, 0x71,
+ 0xba, 0x59, 0xf1, 0x0d, 0x85, 0x08, 0x52, 0x51, 0x45, 0x6a, 0x45, 0xcb,
+ 0x05, 0x5a, 0xe3, 0x2b, 0x5b, 0x85, 0xfb, 0xc3, 0x0a, 0x69, 0xe6, 0xd5,
+ 0xc4, 0x70, 0xac, 0xa1, 0xe9, 0x03, 0x32, 0x70, 0x9c, 0x6f, 0xa5, 0x31,
+ 0x61, 0x91, 0x32, 0xcd, 0x9a, 0x85, 0x45, 0x32, 0xc9, 0x00, 0x01, 0x56,
+ 0x15, 0xbe, 0x40, 0x06, 0x2a, 0x76, 0x34, 0x07, 0x0f, 0xea, 0x45, 0x90,
+ 0xa3, 0x4d, 0xd9, 0xc3, 0xc3, 0x90, 0x9e, 0x93, 0xbf, 0x47, 0x47, 0xc1,
+ 0x07, 0x9d, 0x8e, 0xb1, 0x89, 0x27, 0xe0, 0x11, 0x4f, 0xa1, 0x15, 0x0e,
+ 0x22, 0x01, 0x30, 0x16, 0xbf, 0x69, 0x11, 0x3c, 0x3c, 0xd3, 0x68, 0x6c,
+ 0x1c, 0xd5, 0xa2, 0x34, 0x5f, 0xb4, 0xdc, 0x05, 0x32, 0x90, 0x63, 0x61,
+ 0x20, 0xca, 0x5d, 0x65, 0xa3, 0xba, 0x6d, 0x1d, 0x26, 0x3d, 0x84, 0xb0,
+ 0xe7, 0x0e, 0x46, 0x83, 0x82, 0x75, 0xc2, 0x6a, 0xc8, 0xcc, 0x91, 0x72,
+ 0xbd, 0x0d, 0x69, 0x8e, 0x06, 0xf9, 0x80, 0xb7, 0x67, 0x3a, 0x68, 0xaa,
+ 0xe9, 0x71, 0xd6, 0x36, 0xcc, 0x75, 0xc0, 0x72, 0x38, 0x80, 0xca, 0x9b,
+ 0x96, 0x04, 0xd8, 0x1f, 0xfa, 0xc2, 0x6c, 0x46, 0x5e, 0x3a, 0x9b, 0x16,
+ 0x10, 0x2c, 0xd4, 0xa7, 0x0e, 0x97, 0x3a, 0x6a, 0x08, 0xf3, 0x50, 0xe0,
+ 0xa6, 0xab, 0x1f, 0xcc, 0xfa, 0x02, 0x61, 0x28, 0xbf, 0xb8, 0x45, 0xb1,
+ 0x69, 0x9a, 0xfb, 0x73, 0xf0, 0x39, 0x0e, 0x9f, 0x30, 0xac, 0xff, 0x6e,
+ 0xec, 0x87, 0x34, 0x8d, 0x8a, 0x01, 0x40, 0x6f, 0xa1, 0x01, 0x0d, 0xac,
+ 0xe9, 0x14, 0x11, 0x37, 0xbe, 0x6b, 0x0a, 0x61, 0x8d, 0x33, 0x98, 0x45,
+ 0x6a, 0x40, 0x89, 0x17, 0x78, 0xee, 0x50, 0x14, 0x8a, 0x9a, 0x9a, 0x92,
+ 0x4e, 0x5e, 0x8b, 0xe8, 0x05, 0x33, 0xce, 0xe7, 0xe8, 0x0d, 0x58, 0xe4,
+ 0xd0, 0x0f, 0x7e, 0x06, 0x9f, 0x10, 0x7e, 0x49, 0x15, 0x5a, 0x6d, 0x12,
+ 0xd7, 0xb1, 0x41, 0x0a, 0x12, 0x94, 0xe4, 0x27, 0x8b, 0x55, 0x3d, 0xa1,
+ 0x4d, 0xf6, 0x71, 0xf6, 0xef, 0x0b, 0x88, 0x95, 0xa3, 0x60, 0x05, 0x2e,
+ 0x40, 0xf9, 0x21, 0xc7, 0x73, 0x8b, 0xb9, 0x98, 0x02, 0xde, 0x11, 0xa2,
+ 0x85, 0x6c, 0x90, 0xac, 0xb4, 0x35, 0x79, 0x2d, 0x8a, 0x4c, 0x4e, 0xc7,
+ 0xea, 0x20, 0x2f, 0x0d, 0x65, 0x3c, 0x51, 0xac, 0x36, 0xc2, 0x96, 0x8d,
+ 0xcc, 0x6d, 0xf5, 0x22, 0x94, 0x12, 0x94, 0x85, 0x95, 0x29, 0x81, 0xd9,
+ 0xf7, 0x0a, 0xbb, 0x3a, 0x5c, 0x20, 0xf1, 0xd9, 0x27, 0x69, 0x87, 0x23,
+ 0x06, 0x5d, 0x3e, 0x05, 0xb3, 0xd1, 0xdc, 0xd0, 0x0f, 0x2d, 0x13, 0x60,
+ 0x28, 0x81, 0x75, 0x93, 0xcf, 0xc4, 0x87, 0x2a, 0x48, 0x42, 0x4c, 0xc3,
+ 0x46, 0x6e, 0x4c, 0x39, 0x12, 0x2d, 0x64, 0x91, 0x4b, 0x55, 0x3d, 0xa9,
+ 0x01, 0x0c, 0xab, 0x22, 0x17, 0x45, 0xde, 0x37, 0x7e, 0x52, 0xc7, 0x88,
+ 0x99, 0x5e, 0xce, 0xb7, 0xad, 0xd4, 0x95, 0x60, 0xa9, 0x83, 0xf0, 0xce,
+ 0x44, 0xf8, 0x65, 0x67, 0xcf, 0x33, 0xec, 0xff, 0x98, 0x29, 0xf9, 0x0c,
+ 0x27, 0x60, 0x38, 0x82, 0xea, 0xfc, 0x84, 0xa8, 0x2e, 0x41, 0xe9, 0x2f,
+ 0x92, 0xc4, 0x83, 0xf9, 0xd8, 0xb4, 0x2b, 0x11, 0x3b, 0x01, 0xad, 0xce,
+ 0x5e, 0x39, 0xfa, 0x4c, 0xdb, 0xd6, 0x1b, 0x50, 0x3d, 0xf7, 0x3e, 0x21,
+ 0x03, 0x54, 0x8a, 0x98, 0x99, 0x96, 0x31, 0x12, 0x2e, 0xe8, 0x76, 0x33,
+ 0x28, 0xbc, 0x57, 0x2d, 0x9a, 0xe3, 0x9e, 0x37, 0xf7, 0xf9, 0xf8, 0xcf,
+ 0x5c, 0xa7, 0xa6, 0xf9, 0xe7, 0xa4, 0x79, 0x2b, 0x56, 0x20, 0x27, 0x9a,
+ 0x2b, 0xbe, 0xd7, 0x4b, 0xef, 0x49, 0x20, 0xbc, 0xd3, 0x51, 0xba, 0x94,
+ 0xf4, 0xee, 0xd7, 0xd6, 0x4b, 0x13, 0xc6, 0x0b, 0x02, 0x46, 0x50, 0xcc,
+ 0x8c, 0x3e, 0xbb, 0xba, 0x82, 0x12, 0x5a, 0xb5, 0x9a, 0x74, 0x45, 0x2e,
+ 0x8d, 0x8a, 0x93, 0x29, 0xe3, 0x11, 0xa1, 0x5c, 0xa9, 0x70, 0xea, 0x70,
+ 0xc7, 0x3f, 0xe6, 0x88, 0x51, 0x37, 0xb5, 0xa5, 0x75, 0xe9, 0x68, 0xb2,
+ 0x20, 0x49, 0x17, 0x9a, 0x53, 0x0a, 0xca, 0xac, 0xca, 0xeb, 0x76, 0xe1,
+ 0x31, 0xfa, 0x68, 0x45, 0x6c, 0x1d, 0x28, 0x23, 0xf0, 0xb9, 0x12, 0xb0,
+ 0x30, 0xff, 0x8a, 0xcf, 0x57, 0x29, 0xde, 0x62, 0x2b, 0xbf, 0xd8, 0x2a,
+ 0x2e, 0xff, 0x7c, 0x9d, 0xac, 0x35, 0xfe, 0x99, 0x95, 0x8d, 0xb5, 0x44,
+ 0x97, 0x77, 0xf9, 0xc5, 0x4c, 0xeb, 0x8f, 0xd9, 0x55, 0x6a, 0x0e, 0xc9,
+ 0xc6, 0x8f, 0x80, 0x70, 0x6f, 0x3e, 0xfc, 0xf5, 0x9f, 0xaf, 0x4f, 0x1a,
+ 0xc9, 0xa9, 0x2a, 0xc2, 0xf2, 0x70, 0x6a, 0xb4, 0x91, 0x61, 0x66, 0x07,
+ 0x69, 0x26, 0xa5, 0x06, 0x31, 0xa9, 0x37, 0x1e, 0x80, 0xb9, 0x35, 0x69,
+ 0xec, 0x1c, 0xae, 0x61, 0xcd, 0x17, 0xf8, 0x51, 0x52, 0xc0, 0x2d, 0x79,
+ 0x7f, 0xb7, 0x96, 0xb6, 0x50, 0xd2, 0xe6, 0xdb, 0x4f, 0xe6, 0x60, 0x67,
+ 0x8b, 0xe1, 0x51, 0x19, 0x27, 0xd0, 0x00, 0x19, 0x6c, 0xc0, 0xcf, 0x50,
+ 0x2c, 0xca, 0x6c, 0x41, 0xde, 0x4e, 0x48, 0x19, 0xe8, 0x82, 0x9f, 0xef,
+ 0x81, 0x2f, 0x6e, 0x55, 0xed, 0xa7, 0x88, 0xa7, 0x1f, 0xdd, 0x85, 0x15,
+ 0x2f, 0x3c, 0xd4, 0x05, 0x8c, 0xd6, 0x04, 0x9c, 0x27, 0xdf, 0x88, 0x0e,
+ 0x5c, 0x8d, 0xf1, 0x40, 0x30, 0x5e, 0xc6, 0xc8, 0xd5, 0xac, 0x05, 0x12,
+ 0x12, 0x2a, 0x48, 0xea, 0x08, 0x24, 0xc7, 0xf0, 0x6e, 0x7a, 0xe4, 0xeb,
+ 0x18, 0xef, 0xf6, 0xb4, 0xa1, 0x20, 0xbb, 0x4a, 0x3c, 0x6f, 0x51, 0x21,
+ 0x56, 0x92, 0xaf, 0x04, 0xb9, 0xa5, 0xa6, 0xc7, 0xfd, 0x1c, 0xf7, 0xd1,
+ 0xa7, 0x61, 0x0e, 0x57, 0x16, 0x5a, 0x6c, 0x96, 0xb2, 0xd0, 0xce, 0x76,
+ 0x19, 0xf2, 0xda, 0xb0, 0x80, 0x5b, 0x94, 0x1f, 0x4e, 0x2b, 0xf9, 0x4f,
+ 0x73, 0xce, 0x25, 0x17, 0x2e, 0x1d, 0x42, 0x83, 0x49, 0x40, 0xf7, 0x0d,
+ 0xf7, 0x86, 0x11, 0xc9, 0x6e, 0x31, 0x70, 0x3d, 0x2f, 0xeb, 0x87, 0xc3,
+ 0xb6, 0xc8, 0xca, 0x21, 0xc2, 0x26, 0x49, 0x37, 0xa6, 0xbf, 0xc3, 0xaa,
+ 0xa7, 0x1c, 0x8d, 0x9c, 0xd5, 0x40, 0x52, 0x35, 0x63, 0xb8, 0x29, 0x18,
+ 0x08, 0x8c, 0x82, 0xd0, 0x4d, 0x96, 0xc4, 0xcc, 0xcf, 0xa1, 0x32, 0x97,
+ 0xdb, 0x93, 0xac, 0xc6, 0xb3, 0xd7, 0x4e, 0x78, 0x86, 0xc3, 0x0a, 0x53,
+ 0x0a, 0xf8, 0x20, 0x48, 0x6b, 0xd5, 0x66, 0x39, 0x0c, 0x7f, 0xa3, 0x57,
+ 0x34, 0xff, 0x04, 0xdc, 0x0f, 0xaa, 0x57, 0x63, 0xb3, 0x02, 0x77, 0x0e,
+ 0x4b, 0xd1, 0x6c, 0xba, 0xb4, 0x7f, 0x2f, 0x61, 0x7e, 0x10, 0x39, 0xa3,
+ 0x61, 0xe1, 0xe0, 0xbb, 0x95, 0xde, 0x56, 0x57, 0x08, 0x16, 0x8e, 0x30,
+ 0xe4, 0xdc, 0xd1, 0x70, 0x62, 0x63, 0x21, 0x28, 0x38, 0xd3, 0x02, 0x0b,
+ 0xa7, 0x75, 0x67, 0x06, 0x6c, 0xba, 0xc8, 0xbc, 0xd3, 0x83, 0x54, 0x54,
+ 0x8d, 0xb0, 0x4a, 0xee, 0x80, 0x1a, 0x19, 0x59, 0xd4, 0x74, 0xcf, 0x7c,
+ 0x1d, 0xa1, 0x8a, 0x00, 0x89, 0x03, 0x12, 0xc9, 0x43, 0xfb, 0xd7, 0xcc,
+ 0xd3, 0x17, 0xcd, 0xc7, 0x3d, 0xc6, 0xa0, 0xe9, 0xe3, 0x03, 0x8b, 0x21,
+ 0x90, 0x97, 0x80, 0x2c, 0xc5, 0x31, 0x85, 0x56, 0xd7, 0xb2, 0x20, 0x00,
+ 0xf3, 0x2c, 0xae, 0x12, 0x48, 0xa2, 0xe2, 0x70, 0x4a, 0x34, 0xdc, 0x66,
+ 0x10, 0xf9, 0x8e, 0x35, 0x47, 0x38, 0xff, 0xbe, 0x5a, 0xe4, 0xd1, 0xc9,
+ 0x51, 0x9b, 0x73, 0xe0, 0x9b, 0xaa, 0xc1, 0x9e, 0x91, 0x9a, 0x11, 0x0e,
+ 0xd4, 0xa2, 0x50, 0x78, 0xc5, 0x90, 0xde, 0xb5, 0xa0, 0xe4, 0x88, 0xde,
+ 0x65, 0x97, 0x63, 0x50, 0x1d, 0xfa, 0xb3, 0x52, 0x92, 0x73, 0x48, 0x0c,
+ 0x10, 0x82, 0xf2, 0x43, 0x94, 0x70, 0xc3, 0x71, 0xc0, 0x75, 0x99, 0xdd,
+ 0xce, 0x86, 0x94, 0x73, 0x5e, 0xc2, 0x6e, 0x99, 0xe5, 0x25, 0xe0, 0x45,
+ 0x3c, 0x16, 0x89, 0xcd, 0xd1, 0xf2, 0x74, 0x6e, 0x12, 0x38, 0x2b, 0x55,
+ 0xea, 0x5d, 0x80, 0x13, 0x9b, 0x65, 0x59, 0x92, 0xf4, 0x22, 0xac, 0x18,
+ 0x3a, 0x1d, 0x2d, 0x3e, 0x73, 0xc2, 0xa0, 0x6c, 0xda, 0x26, 0xca, 0x3e,
+ 0x03, 0x31, 0x80, 0x19, 0x22, 0x9f, 0x01, 0x5c, 0x99, 0xa4, 0x86, 0x04,
+ 0x25, 0x47, 0xfd, 0x88, 0xeb, 0x0a, 0x3a, 0x2b, 0x87, 0x4a, 0xb5, 0xa2,
+ 0xc1, 0x7a, 0x8b, 0x42, 0xa5, 0xea, 0x4b, 0xdc, 0xdb, 0x0d, 0xcf, 0xc3,
+ 0xae, 0x96, 0x85, 0x71, 0x43, 0x8e, 0x8b, 0xa2, 0x2e, 0x09, 0x30, 0x5a,
+ 0x7f, 0xa5, 0xc9, 0x51, 0xa4, 0xfa, 0x61, 0xaf, 0xea, 0x9f, 0x22, 0x68,
+ 0x34, 0xd7, 0xd5, 0x17, 0xcf, 0x8b, 0x54, 0xbb, 0x27, 0xc5, 0x30, 0x56,
+ 0x59, 0x05, 0x58, 0xb6, 0xad, 0xfb, 0x32, 0xbf, 0xd4, 0x08, 0xd6, 0xa3,
+ 0x5a, 0x32, 0xee, 0x6c, 0xc3, 0x33, 0x47, 0x2b, 0x68, 0x86, 0xb0, 0xdb,
+ 0x9c, 0x73, 0x58, 0xa7, 0xb0, 0x95, 0xed, 0xe4, 0x0a, 0xf2, 0xe9, 0x75,
+ 0xa5, 0x45, 0xb6, 0x25, 0x73, 0xe3, 0x7c, 0xba, 0x4c, 0xd0, 0x2b, 0xa1,
+ 0xaa, 0x5f, 0xc7, 0x06, 0x4b, 0x51, 0xc4, 0x44, 0x60, 0x55, 0x36, 0xc9,
+ 0x98, 0xbc, 0x91, 0x10, 0xb2, 0xd0, 0xce, 0x36, 0xd0, 0x02, 0x4a, 0xa9,
+ 0xf8, 0x47, 0x7a, 0x53, 0x7c, 0xe0, 0x5a, 0xb8, 0xba, 0xfc, 0x27, 0xe5,
+ 0x11, 0x46, 0x8e, 0x0a, 0xbc, 0x2e, 0x1a, 0x6c, 0x84, 0x45, 0xab, 0x7c,
+ 0x3c, 0x52, 0xdf, 0x2b, 0x4d, 0x87, 0x98, 0x3e, 0x72, 0xb3, 0x56, 0x73,
+ 0x7c, 0xf5, 0xb8, 0xea, 0x8b, 0x8a, 0x4d, 0x95, 0x61, 0x90, 0xf7, 0xc5,
+ 0x63, 0xf6, 0x01, 0xd6, 0xac, 0x76, 0x71, 0xec, 0x5a, 0xb0, 0x24, 0xd1,
+ 0x02, 0x44, 0xe3, 0xd9, 0x98, 0xec, 0xd2, 0xd9, 0xc0, 0xd7, 0x2d, 0x56,
+ 0x57, 0x88, 0xce, 0xfc, 0x52, 0xe1, 0x35, 0x81, 0xf8, 0x31, 0xd9, 0xdf,
+ 0x88, 0x7b, 0x88, 0x06, 0xfa, 0xf5, 0x57, 0x1f, 0xfb, 0xc7, 0x27, 0x14,
+ 0x75, 0x56, 0x26, 0x3f, 0x18, 0x5e, 0x01, 0x56, 0xa8, 0x41, 0xc3, 0xd3,
+ 0x08, 0x92, 0x04, 0xdd, 0xae, 0x65, 0xd2, 0x00, 0xe0, 0x1e, 0xfe, 0x0c,
+ 0x0c, 0x65, 0xf2, 0x21, 0xab, 0xdc, 0x7a, 0x53, 0x14, 0xef, 0xa1, 0xe5,
+ 0x97, 0x69, 0xf2, 0x16, 0x70, 0xa6, 0x5e, 0x24, 0x9d, 0xa1, 0x39, 0x03,
+ 0xa7, 0x49, 0x37, 0x35, 0x23, 0x34, 0x3d, 0x37, 0xaf, 0xec, 0x1c, 0x9f,
+ 0x24, 0xdb, 0xc7, 0x7b, 0x87, 0xc9, 0x5f, 0x4d, 0x3f, 0x4e, 0xda, 0xc9,
+ 0xd7, 0xd4, 0x66, 0x45, 0xc5, 0x98, 0x8a, 0x18, 0x5f, 0xa1, 0x2f, 0xc9,
+ 0x92, 0xe5, 0x69, 0xf4, 0x4c, 0xf6, 0xd0, 0x83, 0x8a, 0x7d, 0x3f, 0xd7,
+ 0x33, 0x52, 0xdb, 0xb7, 0xff, 0x27, 0x75, 0xeb, 0xff, 0x55, 0x99, 0x90,
+ 0x36, 0x15, 0xe3, 0xe4, 0x7e, 0xba, 0x1e, 0xc2, 0x1e, 0xa8, 0x35, 0x90,
+ 0x78, 0xbd, 0xf2, 0x9f, 0xf7, 0x7d, 0x09, 0xe8, 0xec, 0x44, 0xb8, 0x5a,
+ 0x59, 0x6e, 0xc9, 0xb8, 0xf4, 0x15, 0xe1, 0x6a, 0x83, 0x30, 0xd6, 0xaa,
+ 0x6b, 0x02, 0x45, 0x5e, 0x14, 0x60, 0xb5, 0x9a, 0xad, 0xa0, 0x96, 0x29,
+ 0x8b, 0x2d, 0x66, 0x12, 0x91, 0x51, 0x99, 0xe3, 0xbc, 0xcc, 0xb1, 0x6c,
+ 0x12, 0x98, 0x41, 0xa9, 0x42, 0xee, 0x3d, 0x54, 0x37, 0xed, 0x17, 0x70,
+ 0xf5, 0x23, 0x31, 0xb7, 0xb4, 0xaf, 0x6a, 0x8a, 0x43, 0xec, 0xb8, 0xd9,
+ 0x4b, 0x00, 0xa3, 0x26, 0xe7, 0xaa, 0xad, 0x16, 0x0f, 0x62, 0x0d, 0xd8,
+ 0x1a, 0xa7, 0x4e, 0x3d, 0x8e, 0xc7, 0x40, 0x42, 0x0c, 0x00, 0xce, 0x81,
+ 0xaa, 0x0b, 0x15, 0x2f, 0xf8, 0x19, 0xd4, 0x8b, 0x76, 0xd0, 0xb0, 0xf6,
+ 0xfa, 0x72, 0x15, 0x94, 0xd0, 0x11, 0x65, 0x4b, 0x7e, 0xd2, 0x37, 0x29,
+ 0xcf, 0x59, 0x5b, 0x7c, 0xab, 0x9f, 0x9a, 0x91, 0xa1, 0x22, 0x24, 0x79,
+ 0xdb, 0xe2, 0xa0, 0x38, 0xa5, 0x26, 0xe4, 0x58, 0x96, 0xe4, 0x0a, 0xd3,
+ 0x14, 0x58, 0x29, 0x18, 0x0f, 0xbe, 0xe9, 0x9c, 0x45, 0x9c, 0x88, 0x4e,
+ 0x36, 0x5a, 0xe7, 0x07, 0x83, 0x02, 0x07, 0x9c, 0x0c, 0x78, 0x17, 0x94,
+ 0xe2, 0x4c, 0xd6, 0xb5, 0x57, 0x2c, 0x71, 0xa0, 0x4e, 0x94, 0x3d, 0x0e,
+ 0xd2, 0x18, 0x98, 0x69, 0x66, 0x93, 0x87, 0x02, 0x92, 0x3d, 0x5e, 0x9b,
+ 0xc5, 0x9f, 0xe4, 0xfd, 0xf8, 0x38, 0x10, 0x8b, 0x14, 0x52, 0x9d, 0x78,
+ 0x18, 0x27, 0xec, 0xba, 0x9e, 0x38, 0x52, 0x34, 0x74, 0x34, 0x1a, 0x65,
+ 0x03, 0x72, 0x56, 0x93, 0xf9, 0x57, 0xfb, 0xb5, 0x84, 0x91, 0xde, 0x64,
+ 0xda, 0x8a, 0xe2, 0x3b, 0x45, 0xcd, 0x62, 0x17, 0x64, 0x2b, 0x1c, 0xcf,
+ 0xeb, 0x4c, 0x95, 0xbc, 0xbf, 0x3a, 0xd8, 0x8a, 0x3a, 0xde, 0x22, 0x77,
+ 0xee, 0x1e, 0x55, 0x9d, 0x7a, 0x8c, 0x93, 0x13, 0xf8, 0x1c, 0xf9, 0xa9,
+ 0xe1, 0x54, 0x1e, 0xa0, 0x26, 0x5d, 0x5b, 0x72, 0xd9, 0xb9, 0xf2, 0x31,
+ 0x47, 0x10, 0x37, 0x94, 0x3f, 0xb0, 0x98, 0x74, 0x50, 0x07, 0x6e, 0x66,
+ 0x27, 0x2d, 0x21, 0x69, 0x59, 0x61, 0xd6, 0x64, 0x12, 0x96, 0xfd, 0x14,
+ 0x54, 0x95, 0x35, 0xbb, 0xca, 0x88, 0xe6, 0xed, 0x98, 0xb7, 0x0a, 0x6b,
+ 0xb4, 0x63, 0xa8, 0x47, 0xa5, 0x60, 0xbb, 0xf6, 0x09, 0x51, 0xe9, 0x76,
+ 0x84, 0x54, 0xaa, 0xab, 0xdf, 0x1e, 0xf4, 0xa7, 0x69, 0xce, 0xb0, 0xf7,
+ 0x99, 0x03, 0xfc, 0x2a, 0x9b, 0x92, 0x5a, 0x63, 0xb3, 0xd8, 0x47, 0x5f,
+ 0x16, 0x2e, 0xf4, 0x08, 0x83, 0xd9, 0x8f, 0x24, 0x98, 0xdd, 0x73, 0xb4,
+ 0x21, 0x16, 0x33, 0x2e, 0xcf, 0x70, 0x2a, 0xeb, 0x04, 0x16, 0x15, 0xfc,
+ 0x64, 0x16, 0xcf, 0x2e, 0xa9, 0x9a, 0xc7, 0x26, 0x4d, 0x2d, 0x93, 0xa9,
+ 0x8e, 0xb7, 0x28, 0xab, 0x52, 0xbe, 0x59, 0x0e, 0xf0, 0x50, 0x44, 0x8d,
+ 0x85, 0x71, 0x07, 0xad, 0x14, 0x1b, 0xf9, 0x92, 0x08, 0xd1, 0xbb, 0x84,
+ 0xae, 0x21, 0x29, 0x7a, 0x20, 0xa7, 0x43, 0x2c, 0x39, 0xe4, 0xe8, 0xbb,
+ 0x3e, 0xad, 0xdb, 0x02, 0xd5, 0x54, 0xa8, 0x02, 0x78, 0xb2, 0xb0, 0x19,
+ 0x05, 0x91, 0x71, 0x93, 0x61, 0x1a, 0x0b, 0xd5, 0x57, 0x38, 0xe1, 0x23,
+ 0x82, 0x2c, 0xa7, 0xb6, 0xbc, 0x82, 0x06, 0xbc, 0xe2, 0xb3, 0x56, 0x93,
+ 0x6c, 0xc9, 0x75, 0xe4, 0xd5, 0xe6, 0xa5, 0x59, 0x18, 0xb9, 0x02, 0x82,
+ 0xa9, 0x07, 0x82, 0x49, 0x85, 0x0f, 0x6c, 0xdd, 0xcc, 0x60, 0x2d, 0xef,
+ 0x64, 0x2d, 0x9b, 0xb2, 0x92, 0x86, 0x77, 0xc9, 0x25, 0x32, 0x99, 0xe1,
+ 0x67, 0xd8, 0xd8, 0x8b, 0x57, 0x38, 0x99, 0xbb, 0xc0, 0x10, 0x47, 0x51,
+ 0xb7, 0xc2, 0x98, 0x77, 0x43, 0xf6, 0x64, 0x37, 0xad, 0xde, 0x7c, 0x25,
+ 0xeb, 0x78, 0xd2, 0xc5, 0xe0, 0x1f, 0x69, 0x0a, 0x34, 0x1a, 0x86, 0x9e,
+ 0x5c, 0x57, 0xba, 0x42, 0x2a, 0x4d, 0xce, 0xc6, 0xe2, 0xb4, 0x7b, 0x42,
+ 0xb7, 0xa4, 0x79, 0x6a, 0x04, 0x2b, 0xb8, 0xd1, 0x5e, 0x5d, 0x51, 0xc2,
+ 0xde, 0x8b, 0x50, 0x55, 0x8e, 0x8a, 0x74, 0xe6, 0x64, 0x65, 0x81, 0xce,
+ 0x30, 0x42, 0x60, 0x9b, 0x0d, 0x2d, 0x96, 0xdd, 0xd9, 0x5f, 0x0f, 0x76,
+ 0xfc, 0x5f, 0xcc, 0x2b, 0xd4, 0x73, 0xe6, 0x3f, 0xff, 0x57, 0xb3, 0x0c,
+ 0xfc, 0xeb, 0xb1, 0xff, 0x0b, 0xac, 0x04, 0xff, 0xb2, 0x67, 0x7e, 0xd1,
+ 0x62, 0x9b, 0x0e, 0x3b, 0x71, 0x15, 0x2e, 0x5d, 0x58, 0xd8, 0x12, 0x9c,
+ 0x57, 0x57, 0x3c, 0xa9, 0x02, 0x12, 0x50, 0x3e, 0xac, 0x3e, 0x02, 0x2c,
+ 0x2f, 0xa8, 0x3f, 0x25, 0x1c, 0x6f, 0x50, 0x70, 0x89, 0x13, 0x5e, 0x9d,
+ 0x27, 0xbb, 0xbc, 0x66, 0x0d, 0x47, 0x59, 0x36, 0x65, 0xc1, 0x0b, 0x77,
+ 0x00, 0x51, 0x08, 0x25, 0x09, 0xb3, 0x84, 0xe7, 0x28, 0xe7, 0xc6, 0xc3,
+ 0x7a, 0xad, 0x97, 0x58, 0xa4, 0xc6, 0x5b, 0xe9, 0x99, 0xad, 0x75, 0xd9,
+ 0xb7, 0xc5, 0xe5, 0xc9, 0xad, 0x11, 0x95, 0x85, 0x95, 0xd7, 0xd6, 0xa8,
+ 0x4a, 0x92, 0x87, 0x7d, 0x87, 0xb5, 0x09, 0x90, 0xe5, 0xf6, 0x09, 0x7d,
+ 0xd0, 0x68, 0x0a, 0x27, 0x85, 0x01, 0x90, 0x2d, 0x70, 0x0e, 0xeb, 0x4a,
+ 0x10, 0x55, 0x52, 0x54, 0xbd, 0x38, 0x24, 0xbf, 0x11, 0x36, 0xe5, 0x97,
+ 0x16, 0x48, 0x01, 0x72, 0x58, 0x5d, 0x11, 0x15, 0x2b, 0x64, 0x36, 0x05,
+ 0x03, 0x50, 0xd9, 0xb0, 0x91, 0x79, 0x32, 0x66, 0x5b, 0xc4, 0x34, 0xbd,
+ 0x04, 0x46, 0x2b, 0xf2, 0xe5, 0xc1, 0x60, 0x82, 0x1e, 0xa9, 0xd8, 0x71,
+ 0x1c, 0x99, 0x44, 0x5d, 0xe3, 0x3d, 0xb6, 0x08, 0x0d, 0x36, 0x5a, 0xb8,
+ 0x15, 0x1a, 0x78, 0x2b, 0xc4, 0x26, 0x08, 0xe7, 0xc1, 0xc6, 0xa9, 0xb5,
+ 0xd5, 0x84, 0xf8, 0x21, 0xf2, 0x9b, 0x03, 0x22, 0x84, 0x33, 0x98, 0x01,
+ 0x55, 0xda, 0x09, 0x69, 0x51, 0xa1, 0x1e, 0xd5, 0x34, 0xe9, 0xef, 0xb9,
+ 0x96, 0xcc, 0x3d, 0xbc, 0x4e, 0xce, 0x27, 0xae, 0xa9, 0xda, 0x12, 0x76,
+ 0xc0, 0x06, 0x8c, 0xa1, 0x8c, 0x07, 0x79, 0xcd, 0x95, 0x50, 0x1c, 0xc1,
+ 0x66, 0x1d, 0xe6, 0xe8, 0x8c, 0xd1, 0xc1, 0x13, 0x05, 0x79, 0xe3, 0x60,
+ 0x78, 0xf7, 0xd9, 0xf0, 0x01, 0x38, 0x9d, 0xfe, 0xdd, 0xec, 0x16, 0xcc,
+ 0x35, 0x32, 0x04, 0xa0, 0x96, 0x08, 0x41, 0x1d, 0x79, 0xc3, 0x92, 0x86,
+ 0x2a, 0x9d, 0x69, 0x3f, 0xa3, 0x5e, 0xe8, 0xa2, 0x8d, 0xa1, 0xcb, 0x55,
+ 0xf2, 0xad, 0x7e, 0xc5, 0x4a, 0x75, 0xb1, 0x52, 0x56, 0xfd, 0xf5, 0x9b,
+ 0xeb, 0xce, 0xf5, 0xe5, 0x9b, 0xd7, 0x9f, 0xb1, 0x5c, 0xfc, 0xd2, 0xb5,
+ 0xc5, 0xff, 0x08, 0x33, 0xcb, 0xcc, 0x74, 0xc2, 0x7d, 0xf2, 0x89, 0xcd,
+ 0x3d, 0x0b, 0x0b, 0xae, 0xdb, 0x42, 0x99, 0x3f, 0x8d, 0xf3, 0x7f, 0xcd,
+ 0x32, 0x19, 0x2f, 0x76, 0x57, 0x59, 0x90, 0x37, 0xeb, 0x2b, 0xd0, 0xdb,
+ 0x57, 0x4b, 0xdd, 0x70, 0xdb, 0x03, 0x37, 0x5d, 0x9f, 0xb1, 0x6e, 0x69,
+ 0xb5, 0x0c, 0x83, 0x05, 0xcc, 0x53, 0xb5, 0x31, 0xe7, 0x8f, 0x86, 0x8b,
+ 0x65, 0x7e, 0x36, 0xd0, 0x83, 0x1d, 0x04, 0x3d, 0xd8, 0x91, 0xba, 0x38,
+ 0xf8, 0x6e, 0x2c, 0xc9, 0x4c, 0xb4, 0x47, 0xab, 0x2e, 0x75, 0x38, 0xdf,
+ 0x50, 0x6c, 0x89, 0xdb, 0x5c, 0x9e, 0x31, 0x0f, 0x40, 0x9b, 0x45, 0x98,
+ 0x4e, 0x99, 0xf0, 0xe7, 0x95, 0x3b, 0x8d, 0x56, 0xd9, 0x8c, 0xe9, 0x0c,
+ 0x96, 0xc5, 0xa8, 0xd8, 0x1d, 0x87, 0x7d, 0x4b, 0x50, 0x4b, 0x00, 0x0c,
+ 0x5d, 0xe5, 0x06, 0xeb, 0x80, 0xad, 0xc5, 0xf6, 0xaa, 0xa0, 0xcf, 0xac,
+ 0xb5, 0x69, 0x7c, 0xaa, 0x68, 0x88, 0x44, 0xd3, 0x5d, 0xc0, 0x91, 0x30,
+ 0x82, 0x39, 0xf2, 0xf1, 0xaa, 0x45, 0x13, 0xed, 0x81, 0x4f, 0xc4, 0x6c,
+ 0x06, 0x92, 0xf1, 0x38, 0x7c, 0xc2, 0xea, 0x7e, 0x43, 0x29, 0xf9, 0x64,
+ 0x61, 0x79, 0x14, 0xdb, 0x32, 0x02, 0x5a, 0x4d, 0xb5, 0x3e, 0xcf, 0x8f,
+ 0x59, 0xa9, 0x3c, 0x45, 0xfa, 0xcd, 0x6d, 0x0e, 0x72, 0x2b, 0xcc, 0x04,
+ 0xf6, 0xab, 0x60, 0x80, 0x2a, 0x87, 0xde, 0x04, 0x1e, 0x31, 0x1a, 0x24,
+ 0xf1, 0xc0, 0x4a, 0x94, 0x58, 0x81, 0x65, 0x46, 0x5d, 0x19, 0x44, 0xd0,
+ 0xa0, 0x31, 0xac, 0x48, 0xf1, 0x32, 0x35, 0x83, 0x6c, 0x9e, 0x6c, 0x27,
+ 0xeb, 0x97, 0x16, 0xcf, 0x43, 0x4a, 0x4a, 0x36, 0x13, 0x6b, 0xe7, 0x63,
+ 0x4c, 0x56, 0xad, 0x75, 0x81, 0xc3, 0x40, 0x88, 0x44, 0xe6, 0x1f, 0x2e,
+ 0x4a, 0xe3, 0xe4, 0x5d, 0x25, 0x9e, 0x2d, 0xd7, 0x5a, 0xc2, 0xff, 0x3d,
+ 0x12, 0x20, 0xc9, 0x05, 0xdf, 0xfc, 0x21, 0xcd, 0x87, 0xc4, 0x88, 0xbd,
+ 0xb2, 0x4d, 0x04, 0xa6, 0x50, 0xad, 0x9c, 0x59, 0xf8, 0xd5, 0x1b, 0xc1,
+ 0x13, 0x34, 0x99, 0x21, 0xc8, 0x4d, 0x7b, 0x63, 0xae, 0xb5, 0xc5, 0x0c,
+ 0x83, 0x0d, 0x5c, 0x8e, 0x4f, 0x9f, 0x4b, 0xfc, 0x46, 0xa5, 0x92, 0x42,
+ 0xe5, 0xd4, 0x65, 0xf0, 0x4b, 0x3e, 0x74, 0x83, 0x07, 0xb5, 0xc1, 0x3f,
+ 0x8a, 0x8e, 0x69, 0xda, 0x44, 0x63, 0x63, 0x29, 0xc0, 0x62, 0x93, 0xa2,
+ 0x08, 0x6b, 0xae, 0x4f, 0x27, 0x19, 0xcd, 0x6b, 0x6a, 0xd1, 0xd2, 0x5a,
+ 0x0f, 0x85, 0x21, 0x2e, 0x81, 0x7b, 0xaa, 0x9a, 0xa2, 0x17, 0xe2, 0x66,
+ 0xf8, 0x81, 0xe2, 0x11, 0xf4, 0x6c, 0xd0, 0x26, 0x10, 0x89, 0x09, 0xaf,
+ 0x3f, 0xc1, 0xf2, 0xfb, 0x91, 0x2d, 0x2e, 0x38, 0x94, 0x50, 0x6b, 0xe8,
+ 0x4c, 0x15, 0x28, 0x31, 0xef, 0xb5, 0x27, 0xab, 0x2b, 0xb3, 0x31, 0xaa,
+ 0xde, 0x02, 0x07, 0x27, 0xfa, 0x78, 0xac, 0x45, 0x4e, 0xa4, 0xb0, 0x2c,
+ 0x80, 0xc2, 0xeb, 0x40, 0x14, 0xb5, 0xe6, 0xbf, 0x62, 0xac, 0x89, 0x9a,
+ 0x0b, 0xaa, 0x96, 0x60, 0xa4, 0x19, 0x21, 0x0f, 0x29, 0x66, 0x54, 0x7d,
+ 0x46, 0x36, 0x56, 0x5f, 0x04, 0x36, 0xd8, 0x29, 0x15, 0x49, 0x16, 0x3e,
+ 0x6c, 0x0b, 0xee, 0xe7, 0xd7, 0xdd, 0x82, 0xb6, 0x18, 0xe4, 0x6d, 0x70,
+ 0x84, 0x09, 0xfc, 0x6e, 0xc9, 0xa5, 0xef, 0x7e, 0xf7, 0x9c, 0x75, 0x72,
+ 0xd1, 0x2b, 0xd8, 0x44, 0x54, 0x06, 0x3d, 0x6d, 0x41, 0xc8, 0x84, 0x12,
+ 0x91, 0x5d, 0x58, 0x31, 0x0e, 0xf2, 0xb5, 0xd9, 0x10, 0xea, 0x92, 0x05,
+ 0x7c, 0xf1, 0xa4, 0x66, 0x7e, 0x0b, 0x86, 0xb1, 0x2e, 0x89, 0x94, 0x52,
+ 0x6a, 0xec, 0xb5, 0x94, 0xea, 0x3b, 0x14, 0xe4, 0xd1, 0x33, 0xfb, 0xd5,
+ 0x48, 0x96, 0xe5, 0x0b, 0x1d, 0x9e, 0x01, 0x5d, 0xf1, 0x03, 0x66, 0x9d,
+ 0xe9, 0xf4, 0xe7, 0x79, 0xb7, 0x69, 0xfe, 0x9e, 0xe2, 0x52, 0xb3, 0x65,
+ 0x08, 0x63, 0x3c, 0x3f, 0xe4, 0xc5, 0xd0, 0xea, 0x37, 0x6c, 0xc5, 0xf3,
+ 0x08, 0x6e, 0xad, 0xac, 0xd4, 0x88, 0xb0, 0xde, 0xea, 0xa9, 0xf5, 0x40,
+ 0x04, 0x2e, 0xb1, 0x68, 0x12, 0xff, 0x7c, 0x20, 0x5a, 0x16, 0x32, 0x9f,
+ 0xea, 0x0a, 0x95, 0x92, 0x6e, 0x80, 0x6d, 0x84, 0x89, 0x31, 0x5e, 0x0c,
+ 0x36, 0x69, 0x7d, 0x4f, 0x18, 0x67, 0xdb, 0xae, 0x15, 0xc8, 0xdd, 0xf4,
+ 0x08, 0x7b, 0x88, 0x2d, 0xb1, 0xe8, 0x38, 0xee, 0x37, 0x8d, 0x11, 0x2e,
+ 0x0a, 0x0f, 0x4c, 0xe7, 0x97, 0x04, 0x4a, 0xc2, 0x2c, 0xc4, 0x1d, 0xc9,
+ 0x42, 0x6c, 0x22, 0x98, 0xa1, 0x91, 0xf0, 0x0d, 0x5f, 0x7d, 0xc0, 0xa3,
+ 0xd1, 0x19, 0x59, 0x62, 0x6b, 0x2a, 0xcb, 0x63, 0x57, 0x2c, 0xfb, 0xf8,
+ 0x40, 0x8a, 0x8b, 0xe1, 0x07, 0x9c, 0xcf, 0xa2, 0xb5, 0xdc, 0x7c, 0xbc,
+ 0xa0, 0xe6, 0x6c, 0x80, 0xc2, 0x00, 0xcb, 0x76, 0x6b, 0xce, 0x03, 0x28,
+ 0x02, 0x82, 0x9a, 0xd5, 0xed, 0x6c, 0x78, 0x0b, 0x11, 0x6b, 0x1c, 0xae,
+ 0x94, 0x0f, 0xb8, 0xa2, 0xad, 0xed, 0x80, 0xf5, 0x56, 0x56, 0x89, 0xcd,
+ 0xab, 0xeb, 0x78, 0x6d, 0x4e, 0xcf, 0x3e, 0x5a, 0xfe, 0xf3, 0xf2, 0x1e,
+ 0x6f, 0x6e, 0xea, 0x0d, 0x11, 0x37, 0x77, 0xa6, 0x24, 0x67, 0xf0, 0x0f,
+ 0x96, 0x57, 0x4f, 0x38, 0x64, 0x14, 0x89, 0xcc, 0x74, 0xae, 0x2e, 0xbe,
+ 0x25, 0x51, 0x65, 0xa1, 0x03, 0x4f, 0x86, 0x23, 0xa6, 0xd7, 0xf5, 0xfb,
+ 0x6b, 0x92, 0x79, 0x98, 0xed, 0x04, 0x4f, 0x8c, 0xa1, 0x31, 0x9f, 0x5c,
+ 0x1a, 0xd8, 0x01, 0x31, 0xba, 0xc1, 0x38, 0x03, 0x93, 0xab, 0xfb, 0x4b,
+ 0xc7, 0x7f, 0xb0, 0x57, 0xdb, 0x55, 0x4f, 0xb8, 0x21, 0x9d, 0xd6, 0x48,
+ 0x6b, 0xa3, 0x4c, 0xee, 0x9e, 0xe2, 0x63, 0xb4, 0xd1, 0x5f, 0x38, 0xd4,
+ 0x8e, 0xed, 0xc3, 0x14, 0xbb, 0x4e, 0x43, 0xc3, 0x75, 0xa6, 0xb1, 0x79,
+ 0xc7, 0x04, 0x74, 0x40, 0x96, 0xbc, 0xe9, 0x1e, 0xd5, 0x33, 0xc2, 0x75,
+ 0x3d, 0xe9, 0x95, 0xf6, 0xa0, 0x4d, 0x99, 0x5e, 0x3c, 0x4a, 0xb4, 0xdb,
+ 0x58, 0x56, 0x22, 0x32, 0xe8, 0x44, 0x74, 0x57, 0xed, 0x7e, 0xb5, 0xb1,
+ 0x0a, 0x3e, 0x37, 0x80, 0x42, 0xe4, 0x12, 0x61, 0x70, 0x9b, 0x4f, 0xca,
+ 0x69, 0x24, 0x0f, 0xc4, 0x8f, 0x41, 0xb1, 0xe9, 0x45, 0x4f, 0x80, 0x7e,
+ 0x48, 0x4e, 0xe0, 0x71, 0x61, 0xdd, 0xbe, 0xd0, 0xe8, 0x89, 0xf5, 0x3a,
+ 0x43, 0xe0, 0x7c, 0xfa, 0xa4, 0x8d, 0x82, 0x52, 0x69, 0x53, 0x49, 0x86,
+ 0x6c, 0x59, 0x02, 0x53, 0xa0, 0x3f, 0xd6, 0x22, 0xa9, 0xe4, 0x56, 0x76,
+ 0x7e, 0x7e, 0x2d, 0x45, 0x2a, 0x21, 0x82, 0x8d, 0x3f, 0xaa, 0x28, 0x29,
+ 0xe0, 0x04, 0x9e, 0xf0, 0x5c, 0x36, 0x93, 0x39, 0x29, 0xb1, 0x2e, 0xc7,
+ 0x44, 0x1a, 0x08, 0xdd, 0x9c, 0x9c, 0x88, 0x16, 0x8f, 0x43, 0x41, 0x48,
+ 0xd6, 0x19, 0xc6, 0xeb, 0x54, 0x5e, 0x02, 0xa7, 0x2f, 0xf4, 0xa5, 0xc5,
+ 0x40, 0x4e, 0x86, 0x7e, 0xf8, 0x53, 0xb5, 0x8f, 0x3a, 0xcc, 0x4b, 0x47,
+ 0x6c, 0x7c, 0xc1, 0x82, 0x26, 0xbb, 0x68, 0xc9, 0xde, 0x15, 0x43, 0x76,
+ 0x4f, 0x25, 0x4d, 0x92, 0x9d, 0xae, 0xc4, 0x7a, 0x96, 0x43, 0xa3, 0x6b,
+ 0x7d, 0xd7, 0x78, 0x32, 0xb2, 0x80, 0x33, 0x0c, 0x0b, 0x6f, 0x85, 0x55,
+ 0xe5, 0x2c, 0x1e, 0xd8, 0x09, 0xd5, 0xb8, 0x4e, 0xbb, 0xab, 0x7c, 0xe2,
+ 0x9e, 0xd8, 0x68, 0x94, 0x20, 0x24, 0x9b, 0xee, 0x95, 0xa8, 0xb6, 0xaa,
+ 0xad, 0x87, 0xa0, 0xc2, 0x26, 0xcb, 0xc0, 0x60, 0x55, 0x6d, 0x3a, 0x5e,
+ 0xf0, 0xbf, 0xa4, 0x4d, 0x80, 0x0a, 0x86, 0x21, 0x2a, 0xe9, 0x52, 0x84,
+ 0x9f, 0xd8, 0x7c, 0x32, 0xd8, 0x3a, 0x88, 0x1b, 0xea, 0xe5, 0x1e, 0x29,
+ 0xe7, 0xac, 0xc4, 0x71, 0x14, 0x46, 0x0b, 0x99, 0xe4, 0x15, 0x7c, 0xbe,
+ 0x39, 0x2e, 0xd5, 0xf4, 0x36, 0x6b, 0x49, 0x54, 0x98, 0x93, 0xc0, 0x7e,
+ 0x2a, 0x85, 0xc1, 0xc7, 0xa5, 0xad, 0x6b, 0x04, 0xca, 0x54, 0xf8, 0x74,
+ 0xb5, 0xe7, 0x02, 0x0c, 0x02, 0x10, 0x1d, 0x29, 0x1a, 0x69, 0x90, 0xf7,
+ 0x31, 0xfb, 0xf8, 0x44, 0xb2, 0x78, 0xc0, 0x90, 0x0e, 0x05, 0x2b, 0xa0,
+ 0x64, 0x4c, 0xf2, 0x90, 0x67, 0x92, 0xfd, 0xe0, 0x82, 0xc4, 0x51, 0x67,
+ 0xb2, 0x00, 0xbf, 0xa1, 0x24, 0x04, 0x3f, 0x0b, 0xc3, 0x5b, 0x5d, 0x71,
+ 0xe7, 0x6e, 0x3b, 0x79, 0x89, 0xc5, 0xb4, 0x94, 0x43, 0xa3, 0x88, 0x64,
+ 0x3c, 0x39, 0x31, 0x1c, 0x3a, 0x84, 0x61, 0x94, 0x32, 0xe3, 0x60, 0x95,
+ 0x7b, 0x8a, 0x07, 0xae, 0xfb, 0xf5, 0x1a, 0x43, 0x21, 0x9d, 0x6b, 0xa6,
+ 0x80, 0xa8, 0x0e, 0xa2, 0x64, 0x76, 0x7b, 0x9b, 0xf5, 0xa7, 0x02, 0x43,
+ 0xc9, 0xbe, 0xc9, 0x7c, 0x04, 0x23, 0x4a, 0xc1, 0xc2, 0x8c, 0xf0, 0xb1,
+ 0x13, 0x14, 0x14, 0xfc, 0x03, 0xb5, 0x36, 0x5b, 0xa4, 0xcb, 0xf0, 0x97,
+ 0xe1, 0x5c, 0x50, 0x92, 0x49, 0xd3, 0x1d, 0xe8, 0x43, 0x3c, 0xf5, 0x30,
+ 0xf3, 0x86, 0xdc, 0x36, 0x54, 0xc1, 0x7d, 0x42, 0xf1, 0x92, 0xaa, 0x14,
+ 0x9f, 0xe3, 0x31, 0xd0, 0x3f, 0xac, 0x71, 0x99, 0x21, 0x74, 0x67, 0x5f,
+ 0xb4, 0x96, 0xda, 0x89, 0x6b, 0x27, 0x02, 0x57, 0x09, 0x9c, 0xd5, 0xe5,
+ 0x6d, 0x79, 0x02, 0xcf, 0x18, 0x19, 0xce, 0xa0, 0xca, 0xb6, 0xa8, 0x58,
+ 0xa3, 0x18, 0x28, 0xac, 0x03, 0xfe, 0x9c, 0x2f, 0x28, 0x4e, 0xd5, 0x8c,
+ 0xc4, 0xb5, 0x4e, 0xc5, 0x70, 0x1d, 0x94, 0xf6, 0x53, 0x0f, 0x51, 0xf0,
+ 0x73, 0x05, 0xc2, 0x62, 0x92, 0x01, 0x26, 0x08, 0x1a, 0x7d, 0x5f, 0x1b,
+ 0x91, 0xff, 0x9d, 0x7c, 0xf5, 0x9f, 0x2d, 0x59, 0xb3, 0x02, 0xcf, 0x97,
+ 0x2b, 0x8b, 0x00, 0x60, 0x8a, 0x5e, 0xc4, 0x52, 0x19, 0xe9, 0x9a, 0xca,
+ 0x36, 0xba, 0x8d, 0xa4, 0xe5, 0x57, 0xc3, 0x24, 0x05, 0xdb, 0x72, 0xf3,
+ 0x74, 0x4e, 0xb5, 0x71, 0x0f, 0x9f, 0x9a, 0xa2, 0x90, 0x6f, 0x27, 0xc5,
+ 0x28, 0xc8, 0x1a, 0xe4, 0x13, 0x56, 0x6b, 0xfc, 0x66, 0x59, 0x21, 0x0d,
+ 0x64, 0x62, 0x4e, 0xc7, 0x41, 0xf6, 0x90, 0x51, 0xac, 0x5f, 0x31, 0xd6,
+ 0x4e, 0x68, 0x2f, 0x55, 0x33, 0x1d, 0x94, 0x8a, 0x27, 0x79, 0xc6, 0x26,
+ 0xa1, 0x15, 0xdf, 0x5d, 0xd5, 0x9c, 0x43, 0x22, 0x96, 0xa8, 0xfe, 0xbb,
+ 0x1f, 0xb0, 0xa6, 0xab, 0x9f, 0xf9, 0x7c, 0x6d, 0xb2, 0x49, 0x66, 0x50,
+ 0x60, 0xdd, 0xa4, 0x82, 0x67, 0x1f, 0x10, 0xff, 0x80, 0x75, 0x13, 0x48,
+ 0x7a, 0x3a, 0x08, 0xdc, 0x01, 0xb9, 0xb2, 0xf4, 0x47, 0x13, 0xc8, 0x6b,
+ 0xd3, 0x98, 0x1e, 0x30, 0x32, 0x60, 0x94, 0x7e, 0xcc, 0x47, 0xb3, 0x91,
+ 0x69, 0x7a, 0x98, 0x73, 0x70, 0x40, 0x92, 0x8f, 0x55, 0xc0, 0x00, 0xae,
+ 0x8f, 0x14, 0x4b, 0x72, 0xe5, 0xdb, 0x7c, 0xfe, 0xd3, 0xf4, 0x4c, 0xff,
+ 0xe2, 0xe8, 0x41, 0x74, 0xfa, 0x5a, 0xf1, 0x9b, 0x43, 0x0c, 0x88, 0x87,
+ 0x52, 0x5e, 0x1e, 0x70, 0x51, 0x39, 0x2a, 0xd8, 0x6e, 0xa2, 0x59, 0x32,
+ 0xd6, 0xfa, 0x71, 0x2d, 0xb4, 0x93, 0x4e, 0xf5, 0x9d, 0xc2, 0xb8, 0x6e,
+ 0xd3, 0x3e, 0x0c, 0x06, 0x5d, 0xd1, 0x33, 0x40, 0x3c, 0x64, 0xbb, 0x10,
+ 0xf4, 0x09, 0x33, 0x30, 0x08, 0xc3, 0xd2, 0xae, 0x47, 0x59, 0xc5, 0x1c,
+ 0xf4, 0xab, 0x05, 0x59, 0xcb, 0x28, 0x04, 0x65, 0x57, 0x28, 0x5c, 0x03,
+ 0xf2, 0xd7, 0xaa, 0x3d, 0xf5, 0x16, 0x13, 0xcf, 0x32, 0xe2, 0x32, 0x21,
+ 0x42, 0x77, 0x47, 0x35, 0xf7, 0x10, 0xf3, 0x90, 0x28, 0x72, 0x7c, 0x22,
+ 0xc7, 0x42, 0x3e, 0x57, 0x6b, 0xe3, 0x18, 0x8d, 0x94, 0x83, 0xb7, 0x56,
+ 0x57, 0xc0, 0x05, 0x81, 0x01, 0x65, 0x67, 0x69, 0xff, 0xfd, 0xac, 0x6c,
+ 0xbd, 0x4e, 0x67, 0x13, 0x08, 0x25, 0x1c, 0x25, 0xeb, 0xbd, 0xb3, 0xd7,
+ 0x17, 0x1b, 0xce, 0x41, 0x93, 0x60, 0xd9, 0x3f, 0x4a, 0x7a, 0x65, 0x0f,
+ 0x0e, 0xbf, 0x99, 0xc2, 0xa9, 0x4a, 0xb0, 0x28, 0x81, 0x81, 0x71, 0x74,
+ 0x53, 0x0c, 0x9b, 0x72, 0x0f, 0x74, 0xd2, 0xf9, 0xa5, 0xe9, 0xc7, 0xe4,
+ 0xc5, 0x8b, 0xef, 0x44, 0xb7, 0xc5, 0x71, 0x49, 0xb4, 0xdc, 0x15, 0xfe,
+ 0xcc, 0x15, 0x32, 0x27, 0xf9, 0xd4, 0x74, 0xcd, 0x42, 0x5b, 0xa3, 0x75,
+ 0x19, 0x4a, 0x42, 0xa5, 0x0f, 0x39, 0x60, 0x2e, 0x0f, 0xb3, 0x29, 0xe6,
+ 0x6e, 0xdd, 0x3a, 0xe5, 0xe5, 0x4b, 0xc6, 0x9c, 0xec, 0xa1, 0x3b, 0x60,
+ 0x4f, 0xdc, 0x01, 0x18, 0xac, 0x84, 0x76, 0x44, 0x1e, 0xb0, 0xa4, 0x62,
+ 0xde, 0x41, 0xbe, 0x2c, 0x7a, 0xad, 0x66, 0xe9, 0x5d, 0xa6, 0x14, 0x7e,
+ 0x14, 0x05, 0x1e, 0xf3, 0x32, 0xab, 0x8c, 0x68, 0x58, 0x3c, 0x82, 0x22,
+ 0x04, 0xa7, 0x05, 0x8f, 0xaa, 0x2d, 0x49, 0x83, 0x1c, 0xa7, 0x4d, 0x33,
+ 0x42, 0xa1, 0xdb, 0x4e, 0xb7, 0xfd, 0xc5, 0x05, 0xe0, 0xba, 0xc9, 0xb4,
+ 0x79, 0xc8, 0x60, 0xef, 0x6b, 0xdd, 0xa3, 0x26, 0x20, 0xa8, 0x8b, 0xb8,
+ 0x78, 0xcd, 0x20, 0x28, 0xd4, 0x3d, 0xca, 0x66, 0x63, 0x89, 0x86, 0xa2,
+ 0x8a, 0x10, 0xd2, 0x01, 0xce, 0xa0, 0x00, 0x9e, 0x01, 0xa1, 0x3e, 0xce,
+ 0x01, 0x5f, 0x8b, 0xf4, 0x4b, 0xe2, 0xfa, 0x57, 0x1f, 0x5f, 0x5b, 0xb7,
+ 0x7a, 0x15, 0x0b, 0x94, 0xcb, 0xb7, 0xe0, 0xef, 0x72, 0x1f, 0x45, 0xd2,
+ 0xdc, 0x9b, 0xe3, 0xc2, 0x6c, 0xba, 0x7c, 0x94, 0x52, 0x35, 0xd5, 0x3b,
+ 0x30, 0x9a, 0x07, 0x43, 0x55, 0xb5, 0x5a, 0x75, 0x98, 0x8b, 0x99, 0x13,
+ 0xaf, 0x4c, 0x0e, 0x47, 0xec, 0xf4, 0x53, 0xc3, 0x8d, 0x30, 0xbf, 0x62,
+ 0x1d, 0xab, 0xf4, 0x6c, 0x24, 0x58, 0x53, 0x87, 0x5d, 0x19, 0x84, 0x62,
+ 0x22, 0x85, 0x2b, 0x18, 0x1d, 0xc6, 0x2c, 0xd2, 0x6c, 0xcc, 0xc9, 0xd6,
+ 0x37, 0x84, 0xb4, 0x4f, 0x19, 0x1b, 0x4d, 0x12, 0xda, 0x6c, 0x96, 0x97,
+ 0x45, 0x58, 0xa0, 0xa8, 0x67, 0x97, 0xd6, 0x31, 0x14, 0x09, 0xea, 0x77,
+ 0xc3, 0x50, 0x9d, 0xc5, 0x26, 0x98, 0x1a, 0xdc, 0x25, 0x30, 0xee, 0x7c,
+ 0xec, 0x10, 0x6f, 0xa6, 0x14, 0x1d, 0xb2, 0xa8, 0x2d, 0x3f, 0x2a, 0xdf,
+ 0x0d, 0x09, 0x19, 0x01, 0x48, 0xf9, 0x63, 0x97, 0x11, 0x53, 0x2d, 0xef,
+ 0x81, 0x47, 0x08, 0x55, 0x25, 0x18, 0x88, 0x16, 0xa1, 0xba, 0x20, 0x6e,
+ 0x8a, 0xa5, 0xa0, 0x4d, 0x69, 0x54, 0xbf, 0xa6, 0xad, 0xdf, 0x3b, 0xad,
+ 0xff, 0xf9, 0x5b, 0x10, 0xb0, 0xf3, 0xab, 0x19, 0x6d, 0xcb, 0xfc, 0xf7,
+ 0xdb, 0x1c, 0x6a, 0x90, 0xf5, 0x84, 0x83, 0xe0, 0x0b, 0x46, 0x4b, 0x1d,
+ 0xa3, 0x8a, 0x79, 0x2c, 0x2a, 0xa6, 0xe7, 0x88, 0x03, 0x50, 0x49, 0x82,
+ 0x96, 0xe4, 0xda, 0xc6, 0xb2, 0x7d, 0xb9, 0xe2, 0x9b, 0x45, 0x3d, 0xc6,
+ 0x3d, 0x66, 0x76, 0x79, 0xb6, 0x5e, 0x6e, 0x28, 0x80, 0x8d, 0x75, 0x4e,
+ 0xf0, 0xff, 0x90, 0x6d, 0xcc, 0x9d, 0x33, 0x5f, 0x77, 0xa6, 0xe9, 0xfb,
+ 0x5c, 0x35, 0x10, 0x50, 0x81, 0x96, 0xc1, 0xf1, 0x9a, 0xdc, 0xf4, 0x63,
+ 0x0b, 0x42, 0xff, 0xff, 0x4d, 0x95, 0xb8, 0x5a, 0xb0, 0x28, 0x1a, 0x4a,
+ 0xd5, 0x9f, 0x29, 0x7f, 0x82, 0xd2, 0x51, 0xc1, 0x46, 0x30, 0x1d, 0xa9,
+ 0x93, 0x61, 0x74, 0x27, 0x6d, 0x93, 0x1e, 0x7f, 0xc6, 0xc3, 0x1b, 0x55,
+ 0x37, 0x98, 0x4c, 0x0c, 0x9c, 0x05, 0x95, 0x62, 0x94, 0x7f, 0x24, 0xb3,
+ 0x1e, 0x1e, 0x29, 0x14, 0xe7, 0xca, 0xb1, 0xb1, 0xe5, 0x73, 0x88, 0xf1,
+ 0xdf, 0xa1, 0xbc, 0x5b, 0x38, 0xf2, 0x7f, 0xff, 0xff, 0x27, 0x5a, 0x24,
+ 0x53, 0x17, 0x83, 0xeb, 0x8a, 0xb9, 0xcb, 0x52, 0x27, 0xec, 0x6f, 0x61,
+ 0x4d, 0xcf, 0x9a, 0xb6, 0x08, 0xc1, 0xfc, 0x7b, 0x48, 0x31, 0xff, 0x67,
+ 0x4f, 0x1c, 0xba, 0x47, 0x23, 0x74, 0x4a, 0xe2, 0xd3, 0x97, 0x2d, 0x92,
+ 0xe1, 0xed, 0x51, 0xbd, 0x15, 0x28, 0xc2, 0x87, 0xf7, 0x82, 0xa1, 0x79,
+ 0xab, 0x12, 0x4a, 0x15, 0xb2, 0x25, 0xf7, 0x47, 0x90, 0x3b, 0xb7, 0x70,
+ 0xc5, 0x1b, 0x74, 0xce, 0x37, 0x96, 0x59, 0x58, 0x9b, 0xc3, 0x22, 0x28,
+ 0x4a, 0x55, 0xec, 0x19, 0x73, 0x67, 0x83, 0x1e, 0xa0, 0x64, 0x51, 0xed,
+ 0xf3, 0x91, 0xdc, 0x14, 0x38, 0xeb, 0xd8, 0x04, 0xc0, 0x11, 0x90, 0x28,
+ 0xe0, 0x3c, 0x67, 0x7b, 0xaf, 0x51, 0x0f, 0xd6, 0xfe, 0xf7, 0xf4, 0x9a,
+ 0x03, 0x41, 0xe7, 0xf7, 0x9a, 0xf1, 0x97, 0x13, 0x4e, 0x99, 0x60, 0x01,
+ 0x97, 0x8d, 0x3b, 0xfd, 0x62, 0x74, 0x93, 0x8f, 0xb5, 0xb8, 0x45, 0xc2,
+ 0x15, 0xa7, 0x50, 0x3c, 0x00, 0x1a, 0xd0, 0x64, 0x8c, 0x5e, 0x6d, 0x12,
+ 0xd8, 0x4a, 0x44, 0xf9, 0x72, 0x32, 0x53, 0xa7, 0x1a, 0x27, 0x79, 0x26,
+ 0x97, 0x8c, 0x2e, 0xcb, 0x49, 0x7d, 0x9c, 0xa8, 0xa1, 0x24, 0xbd, 0x5a,
+ 0xa1, 0x6d, 0x9d, 0x1a, 0xd1, 0xc2, 0x39, 0x5e, 0xd8, 0x88, 0xcd, 0x6d,
+ 0xcd, 0xbd, 0x68, 0x61, 0xd7, 0x80, 0x09, 0xb3, 0x71, 0x4e, 0xe6, 0xb9,
+ 0x70, 0xd8, 0x3a, 0x9f, 0x8b, 0xcd, 0xed, 0xe6, 0x59, 0xe8, 0xd8, 0x33,
+ 0x88, 0xa0, 0xf3, 0xfd, 0x12, 0xcb, 0x1f, 0x4c, 0x17, 0xc5, 0xcd, 0xc3,
+ 0x32, 0x9f, 0xb0, 0x6b, 0x0e, 0xb2, 0x17, 0xbd, 0x7b, 0x9e, 0xd3, 0x83,
+ 0xe4, 0xec, 0xf9, 0x5d, 0xa0, 0x05, 0x25, 0xd9, 0xcc, 0x5f, 0xb9, 0xda,
+ 0x64, 0xdf, 0xcf, 0x02, 0xaf, 0xb4, 0x83, 0xc1, 0xf3, 0x3b, 0x5b, 0x5e,
+ 0xb6, 0x2f, 0xe9, 0xfa, 0x05, 0xe1, 0x2f, 0x52, 0x59, 0x1d, 0x30, 0xc2,
+ 0xf6, 0xc1, 0x8b, 0xdb, 0xcf, 0xb8, 0x94, 0xd6, 0x10, 0xb5, 0x5e, 0x02,
+ 0xcd, 0x07, 0x24, 0xc6, 0xc4, 0x8e, 0x3e, 0xf9, 0x23, 0xe9, 0x26, 0xe7,
+ 0xdc, 0x7d, 0xcc, 0xbd, 0xa4, 0x98, 0x01, 0x4a, 0x66, 0xe6, 0xfb, 0xd6,
+ 0xcd, 0x8d, 0x1b, 0xe6, 0xce, 0x75, 0x73, 0xeb, 0x86, 0x9a, 0xe4, 0xe7,
+ 0xb2, 0xaa, 0x8e, 0x69, 0xe3, 0xec, 0x93, 0x96, 0x3c, 0xd8, 0x20, 0x08,
+ 0x87, 0x05, 0x16, 0x4c, 0x43, 0x09, 0xcf, 0x5a, 0xed, 0xd6, 0x52, 0xef,
+ 0x87, 0x03, 0x90, 0x79, 0x0d, 0x1b, 0x74, 0xa3, 0xfd, 0x42, 0xc0, 0x29,
+ 0xc9, 0xb1, 0x26, 0x26, 0x10, 0x90, 0xc3, 0x33, 0xba, 0xf6, 0xb7, 0x25,
+ 0xfa, 0xa5, 0xd5, 0x38, 0xcc, 0x5b, 0xe1, 0x00, 0x7d, 0x88, 0xf7, 0x0d,
+ 0x76, 0xc0, 0x7f, 0x1d, 0x19, 0x76, 0x8b, 0x31, 0x08, 0x29, 0x63, 0xf6,
+ 0xbc, 0x7d, 0x0a, 0x19, 0xfe, 0x0d, 0xe8, 0xe2, 0x6f, 0x8a, 0x07, 0x59,
+ 0x1a, 0x24, 0x74, 0x38, 0x26, 0xc2, 0xbf, 0x21, 0x0d, 0x9e, 0xfd, 0xed,
+ 0x4f, 0x91, 0xe0, 0x37, 0x4b, 0xcc, 0x33, 0x68, 0x69, 0x4b, 0x4e, 0x74,
+ 0xf2, 0x7f, 0xd6, 0x4c, 0x7f, 0x03, 0x33, 0xfd, 0xcd, 0xc2, 0x99, 0xfe,
+ 0x86, 0x66, 0xfa, 0x9b, 0xa5, 0x67, 0x5a, 0xce, 0xca, 0x37, 0x68, 0x69,
+ 0x76, 0x61, 0x6f, 0xb3, 0xd2, 0xb9, 0xf8, 0x29, 0x7d, 0x84, 0xd5, 0x86,
+ 0x49, 0xb6, 0xc0, 0xfa, 0xb0, 0xf9, 0x4d, 0x02, 0x55, 0x6c, 0xbf, 0xd9,
+ 0x9c, 0xb3, 0x5e, 0x54, 0xaa, 0xf4, 0x39, 0x27, 0xce, 0xaf, 0xc9, 0xe3,
+ 0x6d, 0xff, 0x05, 0xb6, 0x3c, 0x4f, 0x12, 0xae, 0x8f, 0xc5, 0x39, 0x61,
+ 0x58, 0x1c, 0x89, 0x58, 0x04, 0xac, 0x10, 0x0e, 0xd5, 0x52, 0x77, 0x81,
+ 0x29, 0xa7, 0x1a, 0x9d, 0x03, 0xad, 0x52, 0xa3, 0x0d, 0xfd, 0x06, 0x25,
+ 0xae, 0xb8, 0x88, 0x42, 0x85, 0xb8, 0xc2, 0xa2, 0xaf, 0x9b, 0xbe, 0x67,
+ 0x8d, 0xf7, 0xc3, 0x12, 0xc3, 0x8d, 0x04, 0x90, 0x3c, 0x7f, 0x9c, 0x51,
+ 0xec, 0x46, 0xed, 0x22, 0xfd, 0x73, 0x83, 0xf3, 0xab, 0x61, 0x58, 0x03,
+ 0xec, 0x26, 0xe1, 0x1d, 0xdf, 0x18, 0xf9, 0xd9, 0x46, 0xb0, 0x01, 0x1c,
+ 0x9f, 0x84, 0xae, 0xe1, 0x85, 0xb3, 0xfc, 0x66, 0x98, 0x17, 0xd1, 0x68,
+ 0xb6, 0x1b, 0xfc, 0xe9, 0x6e, 0x92, 0x3e, 0xdc, 0xab, 0xf0, 0xc7, 0x58,
+ 0x2d, 0x31, 0x2f, 0x66, 0x32, 0xfb, 0x48, 0xf8, 0x10, 0xad, 0x72, 0x3a,
+ 0xf0, 0xf2, 0x3e, 0xd0, 0x73, 0xf3, 0x21, 0x8b, 0x56, 0x23, 0xbb, 0x11,
+ 0x72, 0x87, 0x97, 0x62, 0x53, 0x58, 0x7c, 0x56, 0xe9, 0x58, 0xc9, 0xfb,
+ 0xec, 0x89, 0xae, 0xb6, 0xba, 0x3f, 0x76, 0xde, 0x5d, 0xf5, 0xae, 0xaf,
+ 0x3e, 0x63, 0x41, 0x47, 0xbf, 0x0a, 0xee, 0xba, 0x54, 0xe5, 0x5d, 0x5d,
+ 0xa9, 0x2f, 0xcb, 0xbb, 0xe1, 0xbc, 0x24, 0xa7, 0x6f, 0x20, 0xcf, 0x17,
+ 0xac, 0x9e, 0xaf, 0x11, 0x3d, 0x19, 0xec, 0x4b, 0xb6, 0x90, 0x47, 0x72,
+ 0x65, 0xb4, 0x17, 0xed, 0x13, 0x59, 0x5d, 0x01, 0x53, 0xc1, 0xbf, 0x65,
+ 0xc3, 0x01, 0x60, 0x2f, 0x17, 0x50, 0x79, 0x36, 0x81, 0x40, 0x92, 0x61,
+ 0xdb, 0xdc, 0x9a, 0x11, 0x1e, 0x16, 0x8d, 0xe0, 0x16, 0x07, 0x60, 0xfe,
+ 0x6d, 0xe7, 0x65, 0xde, 0xce, 0x06, 0xb3, 0xcd, 0x7c, 0x0c, 0xa6, 0xf4,
+ 0xac, 0xdc, 0xcc, 0xd3, 0x71, 0xba, 0x99, 0x62, 0xe7, 0x90, 0x70, 0x36,
+ 0xad, 0xaa, 0xd7, 0x82, 0x62, 0x36, 0x8d, 0xd3, 0x4f, 0x7f, 0x16, 0xe7,
+ 0x60, 0x75, 0x05, 0x18, 0xf8, 0x26, 0x2c, 0x87, 0xb7, 0x2c, 0xef, 0x2e,
+ 0xba, 0xdb, 0x87, 0x07, 0x07, 0x91, 0x39, 0xce, 0xb3, 0xe9, 0x2d, 0xce,
+ 0xf2, 0xe4, 0xb6, 0x0f, 0xff, 0xc1, 0x6d, 0xed, 0x29, 0x00, 0x5e, 0xd0,
+ 0xca, 0xf5, 0xae, 0x2f, 0x12, 0xf3, 0x74, 0x82, 0x8f, 0x9f, 0xc2, 0xd7,
+ 0xd5, 0x15, 0x3b, 0xd1, 0x49, 0x6f, 0x7c, 0x67, 0x84, 0x67, 0x82, 0x56,
+ 0xbc, 0x4e, 0xcb, 0xf7, 0x60, 0xad, 0xef, 0x67, 0x1b, 0x6d, 0x35, 0xc9,
+ 0xf2, 0xf0, 0x0b, 0x73, 0xc3, 0x5d, 0x69, 0x13, 0x3f, 0x2e, 0xbd, 0x40,
+ 0x4e, 0x0c, 0xff, 0x7e, 0xc9, 0x86, 0x6a, 0xdf, 0x15, 0x05, 0xb3, 0xfe,
+ 0x63, 0x3b, 0xe9, 0x0c, 0x3f, 0x64, 0xb0, 0x47, 0xc7, 0xe6, 0xab, 0x21,
+ 0x84, 0xfd, 0x76, 0x64, 0x94, 0x97, 0x57, 0x6f, 0x0e, 0x76, 0x8f, 0x5b,
+ 0xc5, 0x70, 0xd0, 0x50, 0x79, 0x5d, 0x3c, 0x90, 0xab, 0x37, 0x89, 0xf9,
+ 0xf1, 0x33, 0xaa, 0xcd, 0x48, 0x7c, 0xbb, 0x42, 0x7c, 0x76, 0x56, 0x52,
+ 0x96, 0xe0, 0xdf, 0x4c, 0xee, 0xd2, 0x71, 0xfe, 0x3b, 0x79, 0x3a, 0x60,
+ 0xd4, 0x57, 0x18, 0x2c, 0x32, 0x19, 0xf0, 0x35, 0x6f, 0x92, 0xb8, 0x77,
+ 0x2f, 0xb6, 0x8f, 0x8f, 0x8e, 0x92, 0xf5, 0x1e, 0x64, 0xd5, 0x75, 0xc1,
+ 0x7a, 0x2a, 0xb3, 0x65, 0xf5, 0x27, 0x8b, 0x39, 0x69, 0x01, 0xbf, 0xc5,
+ 0xbc, 0x8f, 0xe8, 0x1f, 0xd6, 0x81, 0xf8, 0x2b, 0x94, 0x86, 0xf9, 0x90,
+ 0xfe, 0xf6, 0x22, 0xf1, 0x7a, 0xb5, 0xba, 0xb2, 0xa8, 0x5b, 0xcd, 0x04,
+ 0xfa, 0x50, 0x33, 0xbb, 0xbb, 0xdb, 0x07, 0x07, 0xf5, 0xd3, 0x0b, 0xbf,
+ 0xfe, 0x37, 0x9e, 0x5f, 0xec, 0xfc, 0xf6, 0x0b, 0x28, 0x43, 0x6e, 0x1a,
+ 0x33, 0x73, 0x9c, 0xc0, 0x14, 0x97, 0xcb, 0xcc, 0x31, 0x46, 0xc2, 0x4c,
+ 0xa4, 0x2e, 0x23, 0x95, 0xc6, 0x2e, 0x67, 0x37, 0x86, 0x81, 0xe6, 0xa8,
+ 0xc2, 0x26, 0x5f, 0x8f, 0x06, 0x69, 0x79, 0x7f, 0xb2, 0xba, 0xf2, 0x16,
+ 0xbc, 0x30, 0xdb, 0x2f, 0x4c, 0xd3, 0xf0, 0xc4, 0x13, 0xda, 0xc0, 0xcb,
+ 0x25, 0x16, 0xa6, 0x32, 0x9c, 0xd5, 0x95, 0xc8, 0xc2, 0x1c, 0x1f, 0xd6,
+ 0x2c, 0x0c, 0xfa, 0x16, 0xdc, 0x52, 0x38, 0x7f, 0x43, 0x03, 0x87, 0xbe,
+ 0xfe, 0xcc, 0x77, 0x85, 0x73, 0xe7, 0xda, 0x83, 0x75, 0xda, 0x45, 0x0a,
+ 0x35, 0xfd, 0x77, 0x6e, 0xfd, 0x69, 0xd6, 0xbf, 0x1f, 0x17, 0xc3, 0xe2,
+ 0xee, 0xc9, 0x4d, 0xc5, 0x4f, 0x63, 0x73, 0x6c, 0x4c, 0x4a, 0xf3, 0xbe,
+ 0x57, 0xb3, 0xe1, 0x34, 0x37, 0x5a, 0x7f, 0xeb, 0x0d, 0x16, 0x39, 0x85,
+ 0x69, 0x1f, 0xf8, 0x9c, 0x16, 0xdd, 0x20, 0x1b, 0xf2, 0x6c, 0x22, 0xb3,
+ 0xd8, 0x99, 0xf4, 0xef, 0x73, 0x88, 0xe7, 0x98, 0x41, 0x20, 0x26, 0xcc,
+ 0xfd, 0x59, 0x5a, 0xe6, 0x7d, 0x6a, 0x70, 0x08, 0x68, 0x46, 0x50, 0x0c,
+ 0xc9, 0xec, 0x80, 0xac, 0xfd, 0xdc, 0x39, 0xa6, 0xbc, 0x89, 0xd8, 0x1c,
+ 0x9b, 0xe1, 0x3d, 0x0c, 0x8d, 0x80, 0x99, 0x42, 0xd1, 0x78, 0x3a, 0xde,
+ 0x3b, 0xaf, 0x92, 0x6d, 0xb3, 0xec, 0x13, 0x44, 0x87, 0x34, 0x5f, 0x0e,
+ 0x37, 0xe6, 0xad, 0x43, 0x6b, 0x67, 0x6b, 0x6b, 0x4b, 0x67, 0x03, 0x45,
+ 0xd6, 0x85, 0xee, 0xf9, 0x8c, 0x48, 0xe7, 0x87, 0x88, 0x74, 0x7e, 0x28,
+ 0x40, 0x8a, 0xd5, 0x55, 0x5f, 0xbc, 0xf5, 0xe7, 0xad, 0xfa, 0x0b, 0xe8,
+ 0xaf, 0xb7, 0xe6, 0x10, 0x93, 0x10, 0x2e, 0x7a, 0xf2, 0xe9, 0x6b, 0xee,
+ 0xb6, 0x8e, 0x5e, 0xf4, 0xe4, 0xcf, 0xae, 0xf9, 0x32, 0x0c, 0x0f, 0x87,
+ 0x16, 0x59, 0x4f, 0x33, 0x18, 0xd8, 0xbe, 0xbc, 0x7c, 0xf2, 0x0d, 0xdd,
+ 0xdd, 0xfc, 0x05, 0x6a, 0x63, 0x95, 0xc5, 0x64, 0x9a, 0xcf, 0x00, 0x65,
+ 0x00, 0xcd, 0xdd, 0xea, 0x57, 0xb7, 0xad, 0x9a, 0xc9, 0xcf, 0x19, 0x46,
+ 0xea, 0x24, 0x3b, 0x6d, 0x78, 0x15, 0x19, 0xc6, 0xdf, 0x91, 0x0f, 0xad,
+ 0x99, 0xbc, 0x32, 0xa7, 0x7a, 0xdb, 0x0c, 0x7c, 0x30, 0xc8, 0xcb, 0x62,
+ 0xdc, 0xfa, 0x25, 0x2b, 0x87, 0x19, 0x84, 0x13, 0x7d, 0xc8, 0x86, 0x60,
+ 0x0c, 0x29, 0x93, 0xb7, 0x60, 0xd4, 0x32, 0x12, 0x88, 0x59, 0xf6, 0x83,
+ 0x39, 0x3d, 0xdd, 0xad, 0x12, 0x9d, 0xfd, 0xe5, 0xb3, 0xf1, 0xe5, 0x80,
+ 0xd2, 0x56, 0x57, 0x96, 0x9e, 0x8f, 0xa4, 0x3a, 0x1d, 0xbb, 0x91, 0xe9,
+ 0x58, 0x5d, 0x59, 0x72, 0x3e, 0x12, 0xa6, 0xc9, 0xab, 0xb3, 0xd7, 0xc9,
+ 0x96, 0xd9, 0x50, 0xdb, 0xad, 0x83, 0xed, 0x83, 0xdd, 0xdd, 0x96, 0x96,
+ 0x0d, 0x36, 0x6f, 0x58, 0xc8, 0xae, 0xc4, 0x10, 0x8e, 0x67, 0x43, 0xca,
+ 0xc2, 0x34, 0x02, 0xf5, 0xea, 0xca, 0xe5, 0x79, 0x32, 0x4a, 0x4d, 0x17,
+ 0xe9, 0xb2, 0xb3, 0x81, 0x42, 0xc6, 0xa9, 0x39, 0x16, 0x3e, 0xe4, 0xc5,
+ 0xac, 0xf4, 0x1d, 0x6e, 0x17, 0x10, 0x0a, 0xbc, 0xba, 0xd2, 0xa3, 0xf4,
+ 0x31, 0x88, 0xc4, 0x5b, 0x33, 0x67, 0xc5, 0x80, 0x61, 0xbb, 0x29, 0x14,
+ 0x60, 0x92, 0xad, 0x51, 0x09, 0x91, 0x6c, 0x2a, 0xbe, 0x5d, 0x34, 0xd6,
+ 0x4e, 0x9f, 0x86, 0x59, 0x79, 0x0f, 0xa9, 0xdb, 0xab, 0x2b, 0xa4, 0x8b,
+ 0x4f, 0x87, 0x4f, 0x8c, 0x9d, 0x32, 0xc5, 0x53, 0x06, 0x5a, 0xf2, 0x2c,
+ 0x36, 0xb6, 0xc6, 0x08, 0x28, 0x06, 0x8f, 0x66, 0x12, 0x29, 0x72, 0xad,
+ 0x18, 0x3d, 0x18, 0x2a, 0x06, 0x83, 0x35, 0x7b, 0xf2, 0x9f, 0x7c, 0xc0,
+ 0xb0, 0x27, 0xb0, 0xb0, 0x50, 0xbe, 0x0d, 0x06, 0x5d, 0xe2, 0x20, 0x09,
+ 0x22, 0xc3, 0xc8, 0x18, 0xa4, 0x3e, 0xa0, 0x34, 0x4f, 0x7a, 0xee, 0x72,
+ 0x42, 0x7e, 0xe7, 0xbe, 0x60, 0xf2, 0x32, 0x9f, 0x36, 0x7f, 0x1a, 0x0e,
+ 0x47, 0xe9, 0xb8, 0x71, 0x6a, 0x3e, 0x37, 0x8d, 0x98, 0x76, 0x0b, 0x91,
+ 0x29, 0x3f, 0xb7, 0x9b, 0xc9, 0xbb, 0xf4, 0x43, 0x0e, 0xfb, 0xfc, 0x3e,
+ 0xa7, 0x80, 0xb6, 0xbf, 0x67, 0xb7, 0xe6, 0x37, 0xb3, 0x8e, 0xe6, 0xc5,
+ 0xf4, 0x8c, 0xe6, 0x37, 0x5d, 0x33, 0x92, 0x7c, 0x88, 0x3e, 0xfc, 0xb7,
+ 0x66, 0xd4, 0x7d, 0xe0, 0x1d, 0x66, 0x89, 0xaf, 0x81, 0xc7, 0x40, 0xb6,
+ 0x23, 0x47, 0x12, 0x5f, 0x17, 0xc5, 0xd0, 0x0b, 0x05, 0x86, 0x30, 0x38,
+ 0xa4, 0x9b, 0x90, 0x5e, 0x50, 0x90, 0x39, 0x68, 0x26, 0x93, 0x87, 0x69,
+ 0x1b, 0x1d, 0xd3, 0xed, 0x5a, 0xc9, 0xe6, 0x0c, 0x84, 0xd9, 0x49, 0xd9,
+ 0x7a, 0x99, 0xc9, 0x66, 0x57, 0x57, 0x58, 0xc8, 0x6f, 0x9c, 0x26, 0xea,
+ 0xa2, 0xe9, 0x18, 0x8c, 0xb0, 0x6d, 0xa8, 0xc0, 0x28, 0x04, 0x44, 0xb5,
+ 0xd0, 0xbd, 0x97, 0x6d, 0xd8, 0xcc, 0xe8, 0xba, 0xd7, 0x83, 0x33, 0x1b,
+ 0x00, 0xbd, 0xea, 0xef, 0xb2, 0xb2, 0x98, 0x19, 0x01, 0xd9, 0x4a, 0xbf,
+ 0x58, 0x44, 0xe2, 0xa7, 0x77, 0x97, 0x1b, 0x2f, 0xa8, 0xd8, 0x9f, 0xe1,
+ 0x73, 0x57, 0x4f, 0x46, 0x02, 0xf9, 0x48, 0xcd, 0x5d, 0x01, 0x3a, 0xf8,
+ 0x34, 0xef, 0x7b, 0x23, 0x26, 0x39, 0x20, 0x59, 0xff, 0xa5, 0x98, 0xbc,
+ 0x47, 0xb8, 0xaf, 0x89, 0xd1, 0xf6, 0xcc, 0x7e, 0x38, 0x41, 0x94, 0xa2,
+ 0xd9, 0xc3, 0x00, 0x49, 0xc8, 0x50, 0x30, 0x0a, 0xfd, 0xbb, 0x47, 0x90,
+ 0x2c, 0x57, 0x19, 0x72, 0xe7, 0xec, 0xdf, 0xaa, 0x6a, 0xda, 0xd9, 0xe4,
+ 0x7f, 0xdd, 0xdd, 0xc1, 0x2b, 0xc7, 0xad, 0x7f, 0x1b, 0x66, 0xf9, 0xf8,
+ 0x33, 0x26, 0xa3, 0xa0, 0xd9, 0x87, 0x59, 0x46, 0xf8, 0x1a, 0x33, 0x77,
+ 0x9d, 0xb1, 0x61, 0xe7, 0x18, 0xea, 0x03, 0x47, 0x87, 0xe1, 0x15, 0x54,
+ 0xed, 0xd9, 0xe6, 0xde, 0xbd, 0xb5, 0x69, 0xdb, 0x46, 0x19, 0xa0, 0xe0,
+ 0x30, 0xb2, 0xc7, 0x94, 0xfd, 0xfb, 0x49, 0x7e, 0x6b, 0x56, 0xf8, 0x22,
+ 0x05, 0xc4, 0xa6, 0x27, 0x54, 0x24, 0x5e, 0xa5, 0x80, 0xee, 0x01, 0x00,
+ 0x96, 0xa5, 0xd4, 0x5a, 0xe1, 0x83, 0x09, 0x4c, 0x02, 0xe6, 0x86, 0x8b,
+ 0x49, 0x96, 0xdf, 0xcc, 0x26, 0x77, 0x74, 0xde, 0x9b, 0xb9, 0xac, 0xd7,
+ 0xe0, 0xe4, 0xc0, 0x7b, 0xdf, 0x9e, 0x8d, 0xf3, 0xd6, 0x2d, 0x3f, 0xd8,
+ 0x1e, 0x64, 0x9b, 0x56, 0xfb, 0xdf, 0x7c, 0x48, 0x81, 0x2b, 0x6d, 0xde,
+ 0x4c, 0x66, 0x19, 0x0c, 0x6c, 0xf3, 0x1e, 0x7a, 0xd8, 0x7e, 0xf0, 0xd5,
+ 0xb9, 0x3f, 0xd3, 0x90, 0xd5, 0xed, 0x6a, 0x96, 0xf2, 0xfc, 0x97, 0xc5,
+ 0x8b, 0x89, 0xdb, 0xe7, 0x97, 0xa2, 0xf8, 0x9c, 0x01, 0xf2, 0xcb, 0x2c,
+ 0x2b, 0xed, 0xdb, 0x73, 0xa0, 0xed, 0xf7, 0xf8, 0x7e, 0xbd, 0x31, 0xce,
+ 0x33, 0xc2, 0x6b, 0x04, 0xdb, 0x43, 0xdf, 0x6c, 0x0f, 0x8a, 0x58, 0x8a,
+ 0x29, 0x82, 0x6d, 0x2b, 0x50, 0xe6, 0xd3, 0xff, 0xcf, 0x54, 0xad, 0xe0,
+ 0x25, 0xe3, 0xda, 0x27, 0xb7, 0xff, 0x6b, 0xe2, 0xe4, 0x93, 0xf7, 0x4d,
+ 0xd8, 0xae, 0x79, 0xdf, 0xf0, 0xbd, 0xdd, 0xa3, 0x66, 0xf2, 0xe6, 0xfd,
+ 0xb4, 0x80, 0xc8, 0x15, 0x33, 0x82, 0x6d, 0x88, 0xfd, 0xa5, 0x38, 0x33,
+ 0xb3, 0xc9, 0x6e, 0x40, 0xa7, 0xec, 0x23, 0xd6, 0x64, 0x07, 0x76, 0xf3,
+ 0xf8, 0x7d, 0x36, 0x34, 0x07, 0x72, 0x3b, 0xf9, 0xbb, 0xd9, 0x78, 0xbf,
+ 0x03, 0x78, 0xfe, 0x8f, 0x93, 0xf2, 0xce, 0xec, 0xf5, 0xab, 0xeb, 0x4e,
+ 0xf7, 0x0a, 0x9e, 0xdf, 0x31, 0x9f, 0xcd, 0x1e, 0x3c, 0xdc, 0x6d, 0x6d,
+ 0x1f, 0xed, 0x19, 0xdd, 0xff, 0x01, 0x78, 0xb4, 0xd1, 0xc1, 0xcd, 0x91,
+ 0x36, 0x4c, 0x81, 0x0f, 0x98, 0xf7, 0x1a, 0x31, 0x05, 0x6f, 0x85, 0x78,
+ 0x6e, 0x92, 0x63, 0x00, 0x5b, 0xa4, 0xa4, 0x32, 0xe3, 0xa3, 0x87, 0x19,
+ 0x4a, 0x40, 0xfd, 0x1c, 0xcd, 0x9b, 0xfb, 0x87, 0x66, 0x33, 0x5f, 0x98,
+ 0x53, 0x27, 0xf9, 0xc0, 0x87, 0x62, 0x18, 0x76, 0x7c, 0xfa, 0x66, 0x9c,
+ 0xb5, 0x7e, 0x32, 0xca, 0xc8, 0x4d, 0x7e, 0x37, 0x33, 0xe7, 0x10, 0xb0,
+ 0xbc, 0xfa, 0x89, 0xc2, 0x90, 0x23, 0x25, 0x9a, 0xc3, 0xec, 0xd3, 0x4b,
+ 0xe9, 0xfb, 0xf6, 0xde, 0x56, 0xb2, 0xbe, 0x63, 0x18, 0xce, 0xce, 0xce,
+ 0x71, 0x6b, 0x67, 0x7f, 0xd7, 0xf4, 0xf8, 0x22, 0x33, 0x14, 0x07, 0x01,
+ 0x45, 0xb0, 0xc0, 0x31, 0x06, 0xd9, 0x35, 0x2f, 0x7b, 0xcf, 0x74, 0x45,
+ 0x9f, 0x4f, 0xff, 0x8e, 0xba, 0x11, 0x7e, 0x69, 0x63, 0xfb, 0xe9, 0x04,
+ 0x98, 0x2f, 0xec, 0x2e, 0x5d, 0x3c, 0xc2, 0x19, 0x47, 0xea, 0xc9, 0xeb,
+ 0xfa, 0xdd, 0xe6, 0xeb, 0x37, 0xd7, 0xbd, 0x56, 0x79, 0x67, 0x68, 0x0c,
+ 0xe8, 0xec, 0xf8, 0x70, 0x7b, 0x67, 0x7b, 0xbf, 0x71, 0xba, 0xf4, 0xad,
+ 0x44, 0x80, 0x51, 0xcb, 0x07, 0x9a, 0x9e, 0x5e, 0x76, 0x5e, 0xff, 0xd0,
+ 0x7d, 0x73, 0xde, 0xbb, 0xf2, 0x04, 0xa4, 0xaa, 0x2d, 0x64, 0xa1, 0xc9,
+ 0xc5, 0x2a, 0xdb, 0x9b, 0x66, 0xbb, 0x38, 0xd3, 0x96, 0x6b, 0xff, 0xbf,
+ 0x8d, 0x6d, 0xcb, 0x90, 0x88, 0xd9, 0x54, 0x13, 0x64, 0x77, 0x42, 0x26,
+ 0x68, 0x81, 0x59, 0xce, 0xa6, 0x55, 0x67, 0x43, 0x32, 0x5a, 0xb9, 0xd6,
+ 0xfd, 0x97, 0x30, 0x27, 0x99, 0x03, 0xa8, 0x6a, 0x4e, 0xc2, 0x86, 0x3e,
+ 0xdd, 0x9a, 0xb4, 0x7b, 0xf4, 0x22, 0xa9, 0x9c, 0xa9, 0x2f, 0x21, 0x5d,
+ 0x19, 0xa3, 0x75, 0xcd, 0x89, 0xfa, 0x72, 0xa3, 0x62, 0x44, 0xba, 0x6e,
+ 0xfb, 0x27, 0xb8, 0x3a, 0xab, 0x71, 0xc7, 0xbf, 0xea, 0x77, 0xd3, 0xfb,
+ 0x7c, 0x38, 0xc4, 0x03, 0x76, 0xaf, 0xd6, 0x8c, 0x76, 0xb4, 0xf5, 0xdc,
+ 0x29, 0x30, 0x4f, 0xc4, 0xa6, 0x00, 0x1a, 0xfa, 0xe4, 0x29, 0x30, 0x0f,
+ 0xbf, 0x30, 0x43, 0x1f, 0x92, 0x6d, 0x36, 0x9c, 0x8b, 0xd5, 0x15, 0x99,
+ 0x8c, 0xca, 0x2c, 0x28, 0x99, 0x85, 0x0d, 0x69, 0x35, 0x03, 0xdd, 0xd9,
+ 0xde, 0xdb, 0x5e, 0x62, 0x74, 0x70, 0x5b, 0x64, 0x74, 0xf8, 0xf4, 0x33,
+ 0x46, 0x87, 0x2a, 0x00, 0x8c, 0x0c, 0x1e, 0x34, 0x8b, 0xfb, 0xee, 0x35,
+ 0x0b, 0x42, 0xac, 0x1d, 0x60, 0xe7, 0x0d, 0xe3, 0x33, 0xcb, 0x54, 0xa4,
+ 0xd3, 0x52, 0x84, 0xa0, 0x48, 0xd7, 0xa1, 0x4f, 0x3b, 0x87, 0xc7, 0x0b,
+ 0x76, 0x7a, 0x38, 0x0a, 0xf3, 0x44, 0xcc, 0xea, 0x89, 0x2d, 0x7d, 0x3e,
+ 0xf7, 0xd7, 0x21, 0x6e, 0xea, 0x43, 0xd9, 0xd4, 0x9f, 0xb8, 0xf8, 0xd0,
+ 0x29, 0x33, 0x45, 0xd7, 0x17, 0xad, 0x23, 0x48, 0x60, 0x00, 0xa3, 0x68,
+ 0xa9, 0xd4, 0x72, 0x87, 0x76, 0x04, 0x46, 0x00, 0xd4, 0xdf, 0xfd, 0x8c,
+ 0x94, 0xaa, 0x7f, 0x0f, 0x21, 0x5b, 0xdb, 0xc9, 0x3f, 0xb3, 0xc9, 0x5d,
+ 0x96, 0xce, 0x54, 0xfa, 0x5a, 0xdd, 0x81, 0x00, 0x53, 0xb6, 0x7b, 0x78,
+ 0xf0, 0xcc, 0x49, 0x36, 0x4f, 0x44, 0x27, 0x19, 0x5a, 0xfa, 0x7c, 0x93,
+ 0xbc, 0x87, 0x93, 0xbc, 0xf7, 0x67, 0x27, 0xd9, 0x74, 0xea, 0x05, 0x06,
+ 0xb1, 0xbf, 0x02, 0x3c, 0xc9, 0x04, 0x2a, 0x81, 0x07, 0xf2, 0x08, 0x86,
+ 0x0e, 0x02, 0xe4, 0x7c, 0x3e, 0xcd, 0xee, 0x31, 0xdb, 0x0d, 0xb8, 0xc8,
+ 0x0c, 0x7a, 0xd1, 0x4e, 0xe6, 0xce, 0xdc, 0xf1, 0xb3, 0x67, 0xee, 0xb8,
+ 0x66, 0xe6, 0x8e, 0x3f, 0xe7, 0xcc, 0x1d, 0x20, 0xf8, 0xfa, 0xc1, 0xc1,
+ 0x9f, 0x9d, 0xb9, 0xe3, 0x83, 0x08, 0x7b, 0x56, 0x2a, 0x0f, 0x72, 0xe8,
+ 0xaa, 0xce, 0xe3, 0x29, 0x39, 0x21, 0xb7, 0xd6, 0xba, 0x96, 0xa7, 0x66,
+ 0xa1, 0x55, 0xa4, 0x76, 0xaa, 0x0f, 0x77, 0x77, 0x9e, 0x39, 0xd5, 0xe6,
+ 0x89, 0xe8, 0x54, 0x43, 0x4b, 0xff, 0xed, 0xa6, 0xda, 0x74, 0xea, 0x05,
+ 0xa9, 0x4d, 0x14, 0x1e, 0xfd, 0x52, 0x50, 0xd7, 0x2f, 0xdf, 0x7e, 0x38,
+ 0x00, 0x85, 0x18, 0x53, 0xf6, 0x51, 0xf0, 0x34, 0x67, 0xe2, 0x9a, 0xaf,
+ 0x47, 0x9a, 0x29, 0xfd, 0x31, 0x1f, 0x63, 0x85, 0xa8, 0x33, 0x23, 0xc3,
+ 0xa5, 0x93, 0x87, 0x8c, 0x0e, 0xc3, 0xca, 0xf4, 0x1e, 0xd7, 0x4e, 0xef,
+ 0xd1, 0xf6, 0x73, 0xa7, 0xf7, 0x68, 0x3b, 0x3e, 0xbd, 0xa6, 0xa5, 0xcf,
+ 0xc8, 0x68, 0xd1, 0x48, 0x75, 0xe8, 0x8c, 0x54, 0xf8, 0xa2, 0xe7, 0x1d,
+ 0x44, 0xa6, 0x47, 0xc4, 0x65, 0xb7, 0x0f, 0x9a, 0x54, 0x5c, 0x43, 0xc2,
+ 0xd4, 0x7d, 0xd6, 0xea, 0xce, 0xa7, 0xe4, 0xad, 0x99, 0xd1, 0xe2, 0xf6,
+ 0xd6, 0xe8, 0x40, 0x4d, 0xc5, 0x4f, 0xdb, 0xb5, 0x16, 0x46, 0x72, 0x58,
+ 0x45, 0x4d, 0xc5, 0xff, 0x97, 0xb3, 0xea, 0x73, 0x38, 0xab, 0xe2, 0x53,
+ 0xfb, 0x7f, 0x39, 0xaa, 0xfe, 0xb7, 0x39, 0xaa, 0x8e, 0x8e, 0x40, 0x34,
+ 0xb3, 0x2b, 0x81, 0x5f, 0x97, 0x71, 0x51, 0x2d, 0x9a, 0xb4, 0xd5, 0x15,
+ 0x68, 0x0a, 0x48, 0xf2, 0xa0, 0xe2, 0x9c, 0x52, 0x98, 0x7f, 0xe2, 0xa7,
+ 0x80, 0xd2, 0x0d, 0x38, 0x45, 0x18, 0x02, 0x90, 0x99, 0x03, 0x08, 0x90,
+ 0xa8, 0xd4, 0xf4, 0xc8, 0xeb, 0xe8, 0x88, 0xc2, 0x04, 0xcf, 0x81, 0x61,
+ 0x8a, 0x58, 0x00, 0xd6, 0xaa, 0x53, 0xeb, 0xa0, 0xe9, 0x6e, 0x78, 0xa4,
+ 0x8c, 0x56, 0x61, 0xc3, 0x0b, 0xa8, 0xe8, 0xa2, 0x6d, 0x0e, 0xfa, 0xd5,
+ 0x32, 0x34, 0xb3, 0x6d, 0xc4, 0xed, 0x65, 0x27, 0x36, 0x4a, 0xec, 0x07,
+ 0x71, 0x25, 0x17, 0x3c, 0x4f, 0x87, 0x7b, 0x7b, 0x15, 0x4f, 0x13, 0x5c,
+ 0xfb, 0x9c, 0x1e, 0x40, 0xd3, 0x1e, 0x6c, 0x80, 0x9d, 0xe5, 0x3c, 0x80,
+ 0x3f, 0x1a, 0x99, 0x69, 0x82, 0x70, 0xdc, 0x9b, 0xd7, 0xf9, 0x28, 0x6b,
+ 0x51, 0x71, 0xca, 0x2b, 0x04, 0xc6, 0x9c, 0x21, 0xef, 0x75, 0x53, 0xf9,
+ 0xe3, 0x13, 0xdc, 0x02, 0xaf, 0x8d, 0xd1, 0xa0, 0x61, 0xe0, 0xcf, 0x9e,
+ 0x2b, 0x30, 0xbf, 0x10, 0x3b, 0xb7, 0x79, 0x85, 0x17, 0x36, 0x15, 0x93,
+ 0x6c, 0x53, 0x1f, 0x33, 0xeb, 0x7d, 0xf8, 0x33, 0xab, 0x72, 0x1c, 0x5f,
+ 0x95, 0xc7, 0xec, 0x06, 0xec, 0x14, 0xf3, 0x0f, 0x48, 0xb8, 0x83, 0x24,
+ 0xa4, 0x76, 0xbf, 0x18, 0x6d, 0x02, 0x15, 0x4f, 0xb2, 0x0f, 0x9b, 0xe3,
+ 0xad, 0xad, 0x9d, 0xe3, 0xf6, 0xfd, 0x74, 0x24, 0x76, 0x86, 0x5f, 0x7a,
+ 0x67, 0x40, 0x6d, 0x9f, 0x31, 0x89, 0x10, 0xe3, 0xfe, 0xf7, 0x24, 0xf0,
+ 0x1f, 0xf7, 0xd0, 0x9f, 0xe5, 0x5c, 0x76, 0x0f, 0xae, 0xae, 0x5c, 0x77,
+ 0x77, 0x16, 0x11, 0x88, 0x33, 0xef, 0x9e, 0x63, 0xe0, 0xf5, 0x83, 0xb5,
+ 0x57, 0x39, 0x73, 0xaf, 0x33, 0x71, 0x79, 0x94, 0xb1, 0xba, 0xf2, 0xa7,
+ 0xd6, 0x2b, 0x7a, 0x64, 0xc0, 0x2c, 0x21, 0x23, 0xf5, 0x16, 0xcc, 0x5c,
+ 0x1d, 0x97, 0x2f, 0x3e, 0x0e, 0xf3, 0xf1, 0xfb, 0x1a, 0xdb, 0xd5, 0x2f,
+ 0xe7, 0x2d, 0xfc, 0xb9, 0x31, 0xd7, 0xc2, 0xf5, 0xae, 0xd7, 0x6d, 0xd9,
+ 0x37, 0x6c, 0xf2, 0x46, 0x05, 0xf5, 0x02, 0x63, 0x8f, 0x3e, 0xa3, 0x4d,
+ 0xf6, 0x18, 0x8f, 0xa3, 0x63, 0x39, 0x8e, 0xcc, 0xae, 0x4a, 0xce, 0x26,
+ 0x29, 0xd4, 0x5b, 0x39, 0x07, 0x07, 0xd0, 0x8f, 0xc5, 0x70, 0x08, 0x50,
+ 0xf9, 0x13, 0xb2, 0xcb, 0x76, 0xc6, 0x46, 0x44, 0x7c, 0x34, 0xb3, 0xfc,
+ 0x84, 0x42, 0x0b, 0x30, 0x2e, 0xcc, 0x67, 0x76, 0xeb, 0x8a, 0xfd, 0x83,
+ 0x82, 0x54, 0x28, 0x45, 0x9a, 0xd7, 0xfa, 0x4a, 0x10, 0x70, 0xd2, 0x59,
+ 0x3a, 0x44, 0xe4, 0x9e, 0x1f, 0xb3, 0x47, 0xc8, 0x19, 0x6d, 0xbd, 0x4d,
+ 0xfb, 0xef, 0xd1, 0xcd, 0x07, 0x6f, 0x78, 0x95, 0xf7, 0x27, 0x45, 0x59,
+ 0x80, 0x8d, 0xfe, 0x97, 0x62, 0x32, 0x1c, 0x24, 0xbf, 0x40, 0xce, 0xc2,
+ 0x2f, 0xd9, 0x8d, 0x72, 0x16, 0xe2, 0xa2, 0x1c, 0xcf, 0x73, 0xdb, 0x55,
+ 0xf3, 0x93, 0xc1, 0x97, 0xdc, 0x25, 0xc0, 0x33, 0x85, 0xda, 0x66, 0x1d,
+ 0xcc, 0xfc, 0x93, 0xce, 0x53, 0xbe, 0xb0, 0x79, 0xa6, 0x5e, 0x92, 0x0d,
+ 0xda, 0x9e, 0xcb, 0x44, 0xea, 0x30, 0xb0, 0x7b, 0x4f, 0x7c, 0x96, 0xa5,
+ 0xf5, 0x59, 0xea, 0xec, 0x31, 0xc8, 0x4d, 0x25, 0xb4, 0x35, 0x4c, 0x1c,
+ 0x00, 0xc6, 0xa6, 0xb3, 0x76, 0xd6, 0x29, 0x97, 0x47, 0x20, 0xe9, 0x09,
+ 0x90, 0x5c, 0x57, 0x6f, 0x49, 0x87, 0x0f, 0xf7, 0xe9, 0x4d, 0x66, 0x5e,
+ 0xac, 0x92, 0x45, 0x2d, 0xec, 0xd6, 0x4b, 0x48, 0xd9, 0xb6, 0xf7, 0x7c,
+ 0xc9, 0x02, 0xe9, 0x47, 0x58, 0x7e, 0xf1, 0x68, 0xcf, 0x16, 0x48, 0x67,
+ 0xac, 0x3d, 0x48, 0x34, 0x4a, 0xcd, 0x96, 0x24, 0xdf, 0x13, 0x1b, 0x03,
+ 0x36, 0x9a, 0x10, 0x3d, 0x49, 0xa1, 0x85, 0xba, 0x2c, 0x42, 0x29, 0x15,
+ 0x66, 0x21, 0x93, 0x02, 0x13, 0x3f, 0xc3, 0x99, 0xe0, 0x92, 0x11, 0x25,
+ 0xd7, 0x99, 0xc4, 0x99, 0x93, 0xf9, 0x28, 0x93, 0x51, 0x01, 0x30, 0x34,
+ 0xf6, 0x7d, 0x1b, 0x5f, 0x72, 0xc0, 0xbb, 0x18, 0x80, 0xbc, 0x2b, 0x01,
+ 0xc8, 0x27, 0xb2, 0x36, 0x44, 0x2d, 0x50, 0x57, 0x0a, 0xd3, 0x41, 0xc0,
+ 0x7d, 0x66, 0xeb, 0x18, 0x52, 0x77, 0x31, 0xe9, 0x75, 0x8a, 0xe5, 0x2e,
+ 0x5c, 0x12, 0xd7, 0x79, 0x7e, 0x87, 0xd5, 0x04, 0x19, 0x6a, 0x02, 0xf6,
+ 0x15, 0xe5, 0x47, 0x43, 0x9d, 0x0a, 0x98, 0x44, 0x5b, 0x73, 0xcb, 0xe5,
+ 0xbc, 0x11, 0x96, 0x30, 0x92, 0xf0, 0x8f, 0x9d, 0x77, 0x9d, 0xee, 0x75,
+ 0xef, 0xdd, 0x55, 0x23, 0x8a, 0x2d, 0x6c, 0xa9, 0x39, 0x00, 0x14, 0xbe,
+ 0x9b, 0x14, 0x46, 0x0c, 0x79, 0xe8, 0x3f, 0xee, 0x7e, 0xd7, 0xd8, 0x6d,
+ 0xc0, 0x87, 0xbd, 0xef, 0x1a, 0x60, 0x30, 0x0f, 0x90, 0x73, 0x5f, 0x62,
+ 0x7f, 0x2d, 0x6e, 0x2e, 0x7d, 0x55, 0xa8, 0xb9, 0x3a, 0x85, 0xf2, 0xcc,
+ 0x8c, 0x87, 0x72, 0xd5, 0xe4, 0x53, 0x0c, 0x06, 0xf8, 0xd2, 0xad, 0xbf,
+ 0x91, 0x2b, 0xdc, 0x17, 0xce, 0x6d, 0x0b, 0x91, 0x73, 0x75, 0x67, 0xdc,
+ 0x0b, 0xb8, 0x3b, 0xee, 0x3d, 0xb6, 0x43, 0xbf, 0x7e, 0xf5, 0x71, 0x6b,
+ 0x6b, 0x6f, 0xbb, 0x05, 0x7f, 0xf6, 0x3b, 0xbf, 0x25, 0x7f, 0x7c, 0x3d,
+ 0xbe, 0x29, 0x1f, 0x4e, 0xf0, 0xf2, 0x01, 0x5d, 0x3e, 0x0c, 0x2e, 0x77,
+ 0xb7, 0xf0, 0xf2, 0xf9, 0xc1, 0x6f, 0xab, 0x2b, 0xfa, 0xfa, 0xf9, 0x11,
+ 0x5e, 0xbf, 0x38, 0xf0, 0x6f, 0xbf, 0xe0, 0xcb, 0x17, 0xde, 0xe5, 0xed,
+ 0x2d, 0x6c, 0x65, 0x7b, 0x77, 0xdb, 0xbf, 0xbc, 0xbb, 0x47, 0x97, 0x7b,
+ 0x7e, 0xe3, 0xdb, 0xd4, 0xc5, 0xed, 0xbd, 0x23, 0xff, 0xf6, 0xbd, 0x0e,
+ 0x5e, 0x3e, 0xec, 0xf9, 0x97, 0x8f, 0xa8, 0xf1, 0xee, 0xae, 0x7f, 0xb9,
+ 0x7b, 0x8e, 0x97, 0x2f, 0xb6, 0x82, 0xc6, 0x2f, 0xe8, 0xa5, 0x17, 0xfb,
+ 0xfe, 0xed, 0x17, 0xd8, 0xf8, 0xce, 0xf6, 0xa1, 0x77, 0x79, 0x67, 0x1f,
+ 0x1b, 0xdf, 0xe9, 0xf8, 0x5d, 0xd9, 0x39, 0x3b, 0xc3, 0xcb, 0xdd, 0x6d,
+ 0xd7, 0xb8, 0xf9, 0xbe, 0x7b, 0x74, 0xa0, 0xef, 0xda, 0x3d, 0xc2, 0xd9,
+ 0xd8, 0x3d, 0x72, 0x73, 0x8a, 0x5f, 0xbb, 0xfe, 0x4d, 0x3d, 0xbc, 0xa9,
+ 0xb3, 0xed, 0xf7, 0x73, 0xb7, 0xb3, 0x8b, 0xd7, 0xbb, 0xfe, 0x68, 0x77,
+ 0xcf, 0xb1, 0x43, 0xbb, 0xe7, 0x07, 0x5e, 0x9b, 0xe7, 0x1d, 0xef, 0x5b,
+ 0xd7, 0xeb, 0xd5, 0x79, 0x4f, 0xff, 0xd8, 0xdb, 0xf2, 0xda, 0xeb, 0xed,
+ 0x60, 0x7b, 0x17, 0xfe, 0xec, 0xed, 0x6d, 0xe1, 0x12, 0xec, 0x6d, 0x75,
+ 0xfd, 0x5e, 0xed, 0x6d, 0x61, 0x6f, 0xf7, 0xf6, 0xfc, 0x05, 0xde, 0xdb,
+ 0xa7, 0xdb, 0xf7, 0xbb, 0xc1, 0x65, 0xba, 0xfb, 0xc8, 0x5f, 0xf7, 0xbd,
+ 0x63, 0x1c, 0xc3, 0x5e, 0x77, 0x2f, 0x68, 0xbc, 0x7b, 0x48, 0xd7, 0xfd,
+ 0xc9, 0xde, 0xeb, 0x9e, 0xd1, 0xe5, 0xa0, 0x71, 0x9a, 0x89, 0xbd, 0xde,
+ 0x99, 0x7f, 0xb9, 0x47, 0xef, 0x34, 0xeb, 0xeb, 0x37, 0x4e, 0xa4, 0xb9,
+ 0x77, 0x71, 0xec, 0xdd, 0xbe, 0xbf, 0x8b, 0x3d, 0xdf, 0xdf, 0xf7, 0xe6,
+ 0x73, 0x7f, 0xff, 0xd8, 0xbb, 0x89, 0x36, 0xc7, 0xfe, 0x51, 0xb0, 0x0b,
+ 0xf6, 0xa9, 0x0b, 0xfb, 0x3d, 0x7f, 0xd3, 0xec, 0x5f, 0xd0, 0xe5, 0x8b,
+ 0x1d, 0xef, 0xf2, 0xc1, 0x0e, 0xb6, 0x72, 0xb0, 0xeb, 0xdf, 0x7d, 0x40,
+ 0xd4, 0x7e, 0xb0, 0xd7, 0xf1, 0x1b, 0x3f, 0x38, 0xa4, 0xeb, 0x67, 0x3e,
+ 0x45, 0x1e, 0x9c, 0x75, 0xe8, 0xb2, 0x4f, 0x17, 0x07, 0xb4, 0x51, 0x0f,
+ 0x02, 0x72, 0x39, 0xa0, 0x1e, 0x1e, 0x9c, 0xef, 0x7a, 0x84, 0x7a, 0x70,
+ 0xbe, 0xef, 0xdd, 0xd5, 0xdb, 0xc7, 0xbb, 0x7a, 0xfe, 0x6e, 0x3e, 0xde,
+ 0xc2, 0xcb, 0xc7, 0xbb, 0xc7, 0x7a, 0x6e, 0x8e, 0x77, 0xcf, 0xbd, 0x7e,
+ 0x1e, 0xef, 0xe3, 0xc4, 0x1e, 0x1f, 0xf8, 0x8b, 0x7c, 0x7c, 0x44, 0x0f,
+ 0x1f, 0x75, 0x83, 0xcb, 0x17, 0x78, 0xf9, 0x78, 0xcb, 0xbf, 0x7c, 0x8c,
+ 0xd4, 0x7e, 0x6c, 0xf6, 0x99, 0xdf, 0x78, 0x07, 0x47, 0x7b, 0x7c, 0xb6,
+ 0xe5, 0x75, 0xe1, 0x6c, 0xc7, 0x7b, 0xf8, 0xec, 0x80, 0x6e, 0xf2, 0x97,
+ 0xf6, 0xf8, 0xbc, 0x8b, 0x97, 0xcf, 0xcf, 0x83, 0x36, 0xcf, 0xa9, 0x0b,
+ 0xbd, 0xa0, 0xc3, 0xb4, 0x6a, 0xc7, 0x17, 0xfe, 0xe5, 0x0e, 0x4d, 0x42,
+ 0x67, 0xab, 0x13, 0x5c, 0xc6, 0x46, 0x3a, 0xdb, 0x01, 0x7b, 0xe9, 0x6c,
+ 0xe3, 0x40, 0x3a, 0x3b, 0x3e, 0x0d, 0x77, 0x76, 0x70, 0x1c, 0x9d, 0x5d,
+ 0x7f, 0xd8, 0x9d, 0xdd, 0x1d, 0xba, 0xbc, 0x1b, 0x5c, 0xa6, 0x77, 0xee,
+ 0x06, 0xf4, 0xd6, 0xd9, 0x3d, 0xa2, 0xeb, 0xfe, 0x40, 0x3b, 0xfb, 0xc7,
+ 0x78, 0x59, 0xed, 0x3e, 0xfc, 0xda, 0xf3, 0x6e, 0x3a, 0xa4, 0x57, 0x1d,
+ 0x06, 0x9b, 0xae, 0x43, 0xeb, 0xd4, 0x39, 0x3a, 0xf3, 0x1e, 0x3e, 0x3a,
+ 0xf7, 0x1e, 0xa6, 0x55, 0xeb, 0x1c, 0x07, 0x73, 0x43, 0xab, 0xd6, 0x09,
+ 0x57, 0xad, 0x43, 0xab, 0xd6, 0x39, 0x0b, 0x46, 0x7b, 0x46, 0x5d, 0x38,
+ 0x0b, 0x46, 0x7b, 0x46, 0x3d, 0x38, 0xf3, 0xc8, 0xac, 0x73, 0x76, 0xae,
+ 0x29, 0xb6, 0xe3, 0xb3, 0xad, 0x33, 0x5a, 0x95, 0xb3, 0x2d, 0x9f, 0xba,
+ 0xce, 0x68, 0x55, 0xce, 0xb6, 0xfd, 0x17, 0x9f, 0xd1, 0xa2, 0x9c, 0xed,
+ 0x04, 0xfd, 0x3c, 0xa3, 0x55, 0x39, 0x0b, 0x56, 0xe5, 0x8c, 0x56, 0xe5,
+ 0x2c, 0x58, 0x95, 0xb3, 0xdd, 0x03, 0xba, 0xec, 0xf5, 0xf3, 0x2c, 0xd8,
+ 0x0e, 0x67, 0xfb, 0x48, 0x75, 0x67, 0xfb, 0xe7, 0xfe, 0xc3, 0xfb, 0xd4,
+ 0xb3, 0x60, 0x97, 0x9c, 0xd1, 0xec, 0x9f, 0x1d, 0x75, 0x82, 0xcb, 0xc8,
+ 0xc4, 0xce, 0x8e, 0x03, 0xea, 0x3a, 0x3b, 0xa6, 0x9e, 0x1d, 0xfb, 0x87,
+ 0xd7, 0xd9, 0xf1, 0x31, 0x5d, 0xf6, 0x0e, 0x9a, 0xb3, 0xe3, 0xae, 0x7f,
+ 0x13, 0xb7, 0x79, 0x11, 0xb4, 0x49, 0x07, 0xcd, 0x59, 0x67, 0xcf, 0x6f,
+ 0xb3, 0x73, 0x44, 0x97, 0x83, 0x9e, 0x75, 0xa8, 0x95, 0xb3, 0xa0, 0x07,
+ 0x67, 0x87, 0x74, 0xf9, 0xd8, 0x6f, 0xbc, 0x4b, 0xeb, 0xd4, 0x0d, 0xd6,
+ 0xa9, 0x4b, 0xc7, 0x48, 0x37, 0x58, 0xa7, 0xee, 0x36, 0x0e, 0xaf, 0x1b,
+ 0x6c, 0x9e, 0x2e, 0x2d, 0x53, 0x77, 0x77, 0x37, 0x68, 0x9c, 0xb6, 0x49,
+ 0x37, 0xd8, 0x0e, 0xdd, 0x03, 0xdc, 0xc8, 0xdd, 0x60, 0xaa, 0xbb, 0x34,
+ 0xd5, 0xdd, 0x80, 0x21, 0x75, 0x69, 0xaa, 0xbb, 0xe1, 0x54, 0x77, 0x69,
+ 0xaa, 0xbb, 0xc1, 0xc9, 0xdf, 0x25, 0xd2, 0xee, 0x06, 0x34, 0xdc, 0x25,
+ 0x1a, 0xee, 0xfa, 0x34, 0xdc, 0x3d, 0xef, 0xf9, 0x6d, 0xf6, 0xa8, 0x67,
+ 0x01, 0xe7, 0x39, 0xa7, 0x49, 0x3a, 0x0f, 0x26, 0xe9, 0x9c, 0x26, 0xe9,
+ 0x3c, 0x98, 0xa4, 0x73, 0x9a, 0xa4, 0xf3, 0x90, 0x98, 0xcf, 0x69, 0x96,
+ 0xce, 0x83, 0xd9, 0x38, 0xa7, 0xd9, 0x38, 0x0f, 0x66, 0xa3, 0x47, 0x07,
+ 0x7c, 0x6f, 0xa7, 0xa7, 0x3b, 0x6c, 0x24, 0x77, 0xaf, 0xcd, 0x1e, 0xed,
+ 0x84, 0x5e, 0xb0, 0x13, 0x7a, 0x7b, 0xd8, 0x66, 0x6f, 0xcf, 0x27, 0x82,
+ 0xde, 0x11, 0xb5, 0x79, 0xb4, 0xe3, 0xb5, 0x79, 0xb4, 0xe7, 0xb7, 0x79,
+ 0x74, 0x48, 0x77, 0x1d, 0xf9, 0x77, 0x75, 0xbc, 0x6f, 0x1e, 0xfb, 0xe9,
+ 0x1d, 0xa3, 0xcc, 0xd6, 0x3b, 0x3e, 0xf4, 0x87, 0xdc, 0x23, 0xba, 0xef,
+ 0x1d, 0xfb, 0xd2, 0x48, 0xaf, 0x43, 0xfd, 0xe8, 0xec, 0x7a, 0x6f, 0xe8,
+ 0xec, 0x7b, 0xdf, 0x0e, 0xfd, 0xa6, 0x68, 0x5d, 0x7b, 0x9d, 0xb3, 0xa0,
+ 0xa9, 0x73, 0xba, 0xec, 0x4f, 0xd3, 0x99, 0xc7, 0x8c, 0x7a, 0xc4, 0xd7,
+ 0x7a, 0x67, 0xfe, 0x21, 0xdb, 0x3b, 0xf3, 0x07, 0x41, 0x27, 0x74, 0xaf,
+ 0xeb, 0xef, 0xb3, 0x0b, 0x9a, 0xcb, 0x8b, 0xbd, 0xc3, 0xe0, 0x32, 0x0e,
+ 0xed, 0xe2, 0xc0, 0xdf, 0x50, 0xdb, 0xe6, 0xe0, 0x69, 0xc1, 0x9f, 0xae,
+ 0x37, 0xf5, 0xdb, 0x5b, 0xe7, 0x74, 0xf9, 0x42, 0x8b, 0x31, 0xdb, 0x46,
+ 0xee, 0xd6, 0x37, 0x6d, 0x6f, 0x41, 0x3f, 0xb7, 0xa1, 0x74, 0x98, 0xd7,
+ 0xe6, 0x36, 0xd2, 0x9f, 0xf9, 0x73, 0xe8, 0x3f, 0x7c, 0xec, 0x3f, 0x7c,
+ 0x46, 0x37, 0x79, 0x44, 0x6a, 0xbe, 0xf7, 0xf0, 0xf2, 0xf6, 0x8e, 0x1e,
+ 0xfb, 0xf6, 0xf6, 0x6e, 0x57, 0x37, 0xb5, 0xdb, 0xd3, 0xdf, 0xf6, 0xb6,
+ 0xbc, 0x6f, 0xde, 0x9d, 0x7b, 0xde, 0x9d, 0xfb, 0x5b, 0x7e, 0x47, 0xf7,
+ 0xf7, 0xf0, 0x65, 0xfb, 0xfb, 0x5e, 0x47, 0xf7, 0xfd, 0x8e, 0x22, 0xa7,
+ 0xdd, 0xde, 0x56, 0x04, 0x8f, 0x5f, 0x77, 0xbd, 0xfe, 0x1d, 0xec, 0x7b,
+ 0x3f, 0x1e, 0x7a, 0xdf, 0xfc, 0xf6, 0x0e, 0xce, 0xa9, 0xbd, 0x9e, 0x3f,
+ 0xf0, 0x43, 0x9a, 0xcc, 0xc3, 0x5d, 0x7f, 0xe0, 0x87, 0x5e, 0xc3, 0xc7,
+ 0xde, 0x70, 0x3a, 0x47, 0xde, 0xb7, 0x33, 0xaf, 0xbd, 0x0e, 0x4d, 0x64,
+ 0xe7, 0x22, 0x58, 0x1c, 0xe4, 0xac, 0xe6, 0xcf, 0x91, 0x37, 0x9c, 0xb3,
+ 0x8e, 0xf7, 0xf0, 0x59, 0x17, 0x6f, 0xea, 0xee, 0x78, 0x37, 0xf5, 0xce,
+ 0xbc, 0xae, 0x5d, 0x78, 0xf3, 0x7e, 0xe1, 0x8d, 0xb2, 0x87, 0x2a, 0xda,
+ 0x76, 0xef, 0xd8, 0xa3, 0xff, 0xed, 0x1e, 0x91, 0x5b, 0xef, 0x22, 0x20,
+ 0xc3, 0x0b, 0xba, 0xfd, 0x62, 0xdb, 0x27, 0xc3, 0x8b, 0xed, 0x23, 0xba,
+ 0x7c, 0xee, 0x5f, 0xde, 0xa1, 0xbb, 0xf7, 0x82, 0xbb, 0xf7, 0xe8, 0xee,
+ 0xbd, 0xf3, 0xa0, 0xf1, 0x7d, 0xba, 0x7d, 0xdf, 0xa3, 0xc7, 0x0b, 0xb7,
+ 0xcc, 0xf8, 0xed, 0xcc, 0xfb, 0x76, 0xee, 0x35, 0x4c, 0x24, 0x70, 0x71,
+ 0x18, 0x36, 0x7c, 0x44, 0x0d, 0x9f, 0xed, 0xf9, 0xfd, 0x40, 0xf9, 0xd1,
+ 0xfc, 0xe9, 0x7a, 0xef, 0x3b, 0xeb, 0x79, 0x37, 0x75, 0x71, 0xbd, 0x2f,
+ 0x02, 0xa5, 0xc5, 0x5c, 0xa0, 0x87, 0x7d, 0xed, 0x64, 0xfb, 0x82, 0x36,
+ 0xe4, 0xc5, 0xf9, 0x6e, 0x70, 0x99, 0xee, 0x3e, 0xf7, 0xa7, 0xf9, 0xa2,
+ 0x47, 0x77, 0xf7, 0xba, 0x41, 0xe3, 0x17, 0xf4, 0xd2, 0x8b, 0xa0, 0xc3,
+ 0x17, 0xd4, 0xca, 0x85, 0xee, 0xf0, 0xce, 0xf6, 0x8e, 0xd6, 0x3e, 0xcd,
+ 0x57, 0xe0, 0x68, 0xe6, 0xcf, 0x99, 0x26, 0x50, 0xf3, 0xbd, 0xe7, 0xdd,
+ 0x85, 0x53, 0x62, 0xfe, 0x78, 0xba, 0xca, 0x2e, 0x59, 0x09, 0x76, 0xb7,
+ 0x8e, 0xf7, 0xfc, 0xcb, 0x1d, 0xba, 0x7c, 0xe1, 0xeb, 0x2a, 0xbb, 0xc4,
+ 0x41, 0x76, 0xb7, 0x77, 0xbc, 0x49, 0xe8, 0x74, 0x91, 0x4a, 0xce, 0x0f,
+ 0x81, 0x11, 0xcf, 0xb7, 0x5e, 0x78, 0x86, 0x0f, 0x36, 0x60, 0x78, 0xf6,
+ 0x0f, 0x6d, 0xc3, 0xd8, 0x23, 0x62, 0x3d, 0xbe, 0xe8, 0x68, 0x3e, 0xb0,
+ 0xbb, 0xb5, 0x75, 0xe8, 0xf5, 0x75, 0x87, 0xfa, 0xba, 0x73, 0xbc, 0xe8,
+ 0xe5, 0x5d, 0xb1, 0xac, 0x79, 0xf6, 0x13, 0xef, 0x6a, 0x60, 0x44, 0xd9,
+ 0x25, 0x83, 0xc6, 0x6e, 0x70, 0x00, 0xee, 0xd2, 0x59, 0xbb, 0x1b, 0x9c,
+ 0xb5, 0x7b, 0x47, 0xbb, 0xa4, 0x06, 0x87, 0xea, 0xe3, 0x31, 0xa9, 0x95,
+ 0x1d, 0xff, 0xf6, 0x7d, 0x12, 0xc8, 0xf6, 0x03, 0x75, 0x66, 0x9f, 0x6c,
+ 0x0e, 0xfb, 0x67, 0xe7, 0x9e, 0xa6, 0x7a, 0x76, 0xe1, 0xb7, 0xd9, 0xa5,
+ 0x36, 0x3d, 0x4e, 0x60, 0xbe, 0xee, 0xf9, 0x2a, 0x27, 0x36, 0x75, 0xb0,
+ 0xef, 0xdd, 0x74, 0x70, 0xe8, 0x1f, 0xfe, 0x07, 0x48, 0xab, 0xe6, 0x4f,
+ 0x37, 0x50, 0x29, 0xcf, 0xe9, 0xb2, 0x7f, 0xe8, 0x1e, 0x90, 0x6c, 0x73,
+ 0xd0, 0xdb, 0x0b, 0x2e, 0x1f, 0xd2, 0xe5, 0x40, 0x5a, 0x39, 0xe8, 0x91,
+ 0x1a, 0xdb, 0x3b, 0x0f, 0x54, 0x4e, 0xec, 0xfe, 0xf1, 0xd6, 0xae, 0xaf,
+ 0x72, 0x7a, 0x92, 0xec, 0xf1, 0x2e, 0x0a, 0x46, 0xc7, 0x7b, 0x5d, 0xef,
+ 0xbc, 0x3d, 0xde, 0xf3, 0xce, 0xdb, 0x63, 0xb2, 0x49, 0x1c, 0xef, 0xfb,
+ 0x1d, 0x3a, 0x3e, 0xd8, 0x21, 0x75, 0x75, 0x37, 0xd0, 0x4b, 0xe9, 0xee,
+ 0x23, 0xff, 0x0c, 0x3f, 0x3e, 0xeb, 0x7a, 0x7a, 0x67, 0xcf, 0xfb, 0x76,
+ 0xe1, 0xb5, 0x40, 0xe7, 0xfb, 0x71, 0x70, 0xbe, 0x1f, 0x93, 0x51, 0xe3,
+ 0xb8, 0x1b, 0x6a, 0xb6, 0x64, 0xd5, 0x38, 0xee, 0x7a, 0xcb, 0x79, 0x7c,
+ 0x7e, 0xe8, 0x3d, 0x4c, 0xd6, 0x99, 0xe3, 0x9e, 0x37, 0x1d, 0x9d, 0xad,
+ 0x1d, 0x4f, 0x35, 0xd2, 0x67, 0xad, 0xf9, 0xd6, 0xf3, 0xbe, 0x79, 0x7d,
+ 0xec, 0x90, 0xb0, 0xd1, 0xd9, 0xf3, 0x2d, 0x13, 0x9d, 0xbd, 0x43, 0xba,
+ 0x1c, 0xea, 0x71, 0x44, 0x27, 0x9d, 0x3d, 0x7f, 0x91, 0x3a, 0x87, 0xd4,
+ 0xca, 0x61, 0xa0, 0x0d, 0xd2, 0x14, 0x76, 0x8e, 0xfc, 0xce, 0x9e, 0x75,
+ 0xfd, 0x36, 0xcf, 0x70, 0xf1, 0x3a, 0xbe, 0x00, 0x63, 0xbe, 0x53, 0x17,
+ 0xba, 0x81, 0x6a, 0x4b, 0xb3, 0xd4, 0xe9, 0x06, 0xda, 0x14, 0x91, 0xc9,
+ 0xd9, 0x96, 0xbf, 0x5a, 0x67, 0x3e, 0x9d, 0x9c, 0x11, 0x9d, 0x9c, 0xed,
+ 0x05, 0x7a, 0x1c, 0x8d, 0xf6, 0x2c, 0x30, 0x2f, 0x9e, 0xd1, 0x60, 0xcf,
+ 0x82, 0xd3, 0xc8, 0x68, 0x6e, 0xa4, 0xf6, 0xed, 0x1f, 0x06, 0x2a, 0x1a,
+ 0xa9, 0x62, 0x47, 0x41, 0xe3, 0x34, 0xbc, 0xb3, 0xae, 0x3f, 0xc3, 0x67,
+ 0x5d, 0x6a, 0x24, 0xa4, 0x82, 0xb3, 0x2e, 0x69, 0xa0, 0x3e, 0x15, 0x9c,
+ 0xf9, 0x54, 0xd0, 0xa5, 0xd1, 0x76, 0xb7, 0x02, 0x9d, 0x83, 0x86, 0xd7,
+ 0xdd, 0x0b, 0x34, 0xfa, 0xee, 0xde, 0x01, 0x5d, 0x0f, 0x34, 0x17, 0x32,
+ 0x9f, 0x76, 0x83, 0xc5, 0xec, 0xee, 0x93, 0xe6, 0xb2, 0x7f, 0x10, 0xa8,
+ 0x45, 0xa4, 0xfe, 0x1c, 0x85, 0x3a, 0x17, 0x8d, 0xaf, 0x1b, 0x50, 0x79,
+ 0x97, 0xc6, 0xd7, 0x0d, 0x4c, 0x77, 0x5d, 0x1a, 0x5e, 0x37, 0x58, 0xbe,
+ 0xee, 0x39, 0xbd, 0x33, 0xb4, 0x2a, 0x9f, 0x6f, 0x91, 0x6a, 0x13, 0x0c,
+ 0xf4, 0x9c, 0x06, 0x7a, 0x1e, 0xac, 0xe3, 0x39, 0x8d, 0xf3, 0x3c, 0x18,
+ 0xe7, 0x39, 0x8d, 0xf3, 0x5c, 0xaf, 0x23, 0x7c, 0xdf, 0x3f, 0xf4, 0x14,
+ 0x9d, 0x6d, 0x4f, 0x36, 0x27, 0x4b, 0x74, 0x2f, 0x30, 0xcd, 0xf5, 0x88,
+ 0x52, 0x7a, 0x7b, 0xbd, 0x40, 0xb0, 0xf7, 0x1f, 0x3e, 0xa3, 0x87, 0x03,
+ 0x7e, 0xdd, 0x23, 0x7e, 0xdd, 0x3b, 0xf3, 0xd9, 0x67, 0xaf, 0x7b, 0x44,
+ 0x6a, 0x40, 0x40, 0x66, 0x24, 0x3a, 0x99, 0x3f, 0x9e, 0x06, 0x79, 0xb1,
+ 0xbb, 0xef, 0x7d, 0x3b, 0xf4, 0xbe, 0x1d, 0x7b, 0xdf, 0x7a, 0xba, 0x8f,
+ 0x17, 0xfe, 0xc6, 0xbf, 0x20, 0x63, 0xe2, 0xc5, 0x51, 0xa0, 0x7c, 0x1c,
+ 0x1d, 0xd0, 0x65, 0x5f, 0xeb, 0xb9, 0x20, 0x03, 0xed, 0xc5, 0xf1, 0xbe,
+ 0x37, 0xee, 0x8b, 0xe3, 0x43, 0xff, 0x2e, 0x52, 0x51, 0x3a, 0xfe, 0xe2,
+ 0x5e, 0x9c, 0xd1, 0xab, 0xce, 0x0e, 0xbd, 0x81, 0x9c, 0x1d, 0xeb, 0xe1,
+ 0xee, 0x90, 0xc2, 0x62, 0xfe, 0x78, 0x22, 0xcc, 0x56, 0x6f, 0xdb, 0x3f,
+ 0xc2, 0x3b, 0x74, 0x84, 0x5f, 0x78, 0xe7, 0xfc, 0xf1, 0xb1, 0xea, 0x95,
+ 0xf9, 0xda, 0x59, 0x70, 0xbe, 0xa3, 0x17, 0xc9, 0x9e, 0xeb, 0xf8, 0x2d,
+ 0x74, 0x8a, 0xec, 0x92, 0x9b, 0x23, 0xd0, 0x9d, 0x0f, 0xe8, 0x3c, 0x3f,
+ 0x38, 0x08, 0x2e, 0x93, 0xa5, 0xf0, 0x20, 0x10, 0x8a, 0xcd, 0x99, 0x42,
+ 0x76, 0xc8, 0x03, 0xff, 0x64, 0x3c, 0xee, 0xd1, 0xe5, 0x9e, 0x7f, 0xb9,
+ 0x43, 0x77, 0x77, 0x82, 0xbb, 0x3b, 0x74, 0x77, 0xa7, 0x17, 0x9a, 0x69,
+ 0xe8, 0xf6, 0xb3, 0xe0, 0xf6, 0x33, 0x3a, 0x5f, 0xcf, 0x82, 0xc6, 0xbb,
+ 0x74, 0x77, 0x37, 0xb8, 0xbb, 0x4b, 0x8d, 0x77, 0xc3, 0xc6, 0xcf, 0xe9,
+ 0xf6, 0xf3, 0xe0, 0xf6, 0x1e, 0x79, 0x3f, 0x7a, 0xfb, 0x01, 0x65, 0x93,
+ 0x51, 0xb9, 0x77, 0xee, 0x5f, 0x26, 0x29, 0xdf, 0xfc, 0x59, 0x28, 0x70,
+ 0x71, 0xc0, 0x88, 0x93, 0xb5, 0xe4, 0x82, 0x5a, 0x16, 0x58, 0x8e, 0x33,
+ 0x4d, 0xee, 0x3b, 0xe7, 0x5b, 0xde, 0xb7, 0x6d, 0xcf, 0xa7, 0xa2, 0xef,
+ 0x3c, 0xd8, 0xdb, 0xf2, 0xb6, 0xeb, 0xde, 0x81, 0xde, 0xf9, 0xdd, 0x03,
+ 0x4f, 0x66, 0xdc, 0xf7, 0x08, 0x6e, 0x97, 0x64, 0xc6, 0xdd, 0x7d, 0x5f,
+ 0xec, 0x3d, 0x3e, 0x27, 0x69, 0xd8, 0x77, 0x54, 0x19, 0x39, 0xb8, 0x4b,
+ 0xe2, 0x70, 0x2f, 0x36, 0xe2, 0x4d, 0xeb, 0x4b, 0x3c, 0x55, 0x35, 0x2e,
+ 0x09, 0xcf, 0xdb, 0xa1, 0xf3, 0xb2, 0x6b, 0xd4, 0xfa, 0xc7, 0x11, 0xf1,
+ 0x8f, 0x91, 0x1f, 0xcd, 0x8c, 0xe4, 0x1f, 0x34, 0x9c, 0xbf, 0x78, 0xcd,
+ 0xbf, 0x24, 0x5e, 0x65, 0x90, 0x80, 0xbc, 0xd3, 0xde, 0xb2, 0xfe, 0x58,
+ 0x8d, 0xbc, 0x0c, 0x25, 0x11, 0xd1, 0x2f, 0xef, 0x00, 0x0b, 0x6b, 0x6b,
+ 0x53, 0x40, 0x8c, 0x03, 0x55, 0xe2, 0xd3, 0xbe, 0x6b, 0xac, 0xda, 0x82,
+ 0x59, 0xb3, 0x08, 0x53, 0x26, 0x75, 0x14, 0xa6, 0xd9, 0x5d, 0x81, 0x21,
+ 0x76, 0x2f, 0x87, 0xcd, 0xe4, 0xe5, 0xcc, 0xfc, 0x57, 0x34, 0x57, 0x57,
+ 0x5e, 0x4e, 0x9b, 0xc9, 0xeb, 0x61, 0x4d, 0x15, 0x04, 0x6c, 0x5f, 0xfb,
+ 0xf9, 0x5d, 0x29, 0x0e, 0xf8, 0xa9, 0xb5, 0xf0, 0xd5, 0x54, 0x41, 0x45,
+ 0xbd, 0xfb, 0x55, 0xbf, 0x99, 0xbc, 0xca, 0xcc, 0x7f, 0x63, 0xf3, 0xfe,
+ 0x11, 0x16, 0x01, 0x78, 0x3d, 0xa8, 0x79, 0xbb, 0x73, 0x23, 0x3b, 0x9c,
+ 0x66, 0x4a, 0x1b, 0x26, 0x90, 0xfd, 0x74, 0x92, 0xa5, 0xc9, 0x7a, 0xde,
+ 0xce, 0xda, 0x94, 0x44, 0xac, 0xd6, 0x1e, 0xd6, 0xf2, 0x0e, 0xe1, 0x13,
+ 0x27, 0x58, 0x0a, 0x64, 0x9c, 0x7c, 0xf5, 0xd1, 0x30, 0xdf, 0x2d, 0xf4,
+ 0x78, 0x0f, 0xa9, 0x52, 0x16, 0x5d, 0xbc, 0xb8, 0xe8, 0x6d, 0xd8, 0x82,
+ 0x4f, 0x29, 0xc3, 0x09, 0x52, 0xc0, 0x08, 0x85, 0x27, 0x2e, 0xee, 0x1c,
+ 0x21, 0xdc, 0xe3, 0xa8, 0x53, 0xb3, 0x64, 0x00, 0xc6, 0x34, 0x09, 0xba,
+ 0x3a, 0xc8, 0xe0, 0x7b, 0x51, 0x52, 0x78, 0x1d, 0xf6, 0x19, 0xfa, 0x55,
+ 0x58, 0x24, 0x73, 0xa9, 0xa3, 0xed, 0x3f, 0x46, 0x51, 0x48, 0x88, 0x83,
+ 0x3f, 0x4d, 0xef, 0x6c, 0xdd, 0x6d, 0xd3, 0xbd, 0x5b, 0x88, 0x29, 0x4f,
+ 0xf6, 0x79, 0x75, 0x0d, 0xbd, 0x0a, 0xd5, 0xb4, 0x5a, 0xc9, 0x28, 0x9d,
+ 0xbc, 0x27, 0x4c, 0x44, 0xb9, 0xeb, 0x26, 0xbb, 0xcb, 0xb1, 0x00, 0x65,
+ 0xf0, 0x36, 0xaa, 0x12, 0x4e, 0x9f, 0xed, 0x2c, 0x60, 0x79, 0x2a, 0x98,
+ 0x86, 0x39, 0xa5, 0x31, 0x1c, 0xf4, 0xb9, 0x5a, 0x7c, 0x78, 0x5e, 0x61,
+ 0x56, 0x8e, 0xa3, 0x14, 0x32, 0x81, 0x1c, 0x57, 0x59, 0x94, 0xb1, 0x4f,
+ 0x5f, 0x4d, 0xd3, 0xd1, 0x7e, 0x2a, 0x65, 0xa4, 0x1e, 0xb0, 0x7a, 0x02,
+ 0xcc, 0x02, 0x14, 0xe6, 0xc2, 0xed, 0x4c, 0xf8, 0x57, 0x90, 0x24, 0x0b,
+ 0x2f, 0xe8, 0xd8, 0x60, 0x94, 0x17, 0xab, 0x2b, 0x81, 0xf7, 0xb8, 0x99,
+ 0x90, 0xb7, 0x11, 0xff, 0x1e, 0xf4, 0xf6, 0xf9, 0xef, 0xc1, 0xe2, 0xd5,
+ 0xc4, 0xc3, 0xf3, 0x1c, 0xcf, 0xd0, 0xde, 0x16, 0x8e, 0x29, 0xfb, 0x48,
+ 0x15, 0x2f, 0x00, 0x98, 0x1a, 0x4b, 0xb4, 0x4d, 0x06, 0x50, 0x5e, 0x91,
+ 0xe6, 0xf2, 0x7f, 0x33, 0xe7, 0x68, 0x42, 0xd5, 0x4e, 0x84, 0xeb, 0x4a,
+ 0xf6, 0xdb, 0xdb, 0x7b, 0x1b, 0x8b, 0xc6, 0x97, 0x30, 0xfb, 0x97, 0x68,
+ 0x16, 0x98, 0x51, 0x42, 0x18, 0x1d, 0xdb, 0x48, 0x90, 0xf8, 0x32, 0xac,
+ 0xae, 0x60, 0xd9, 0xa5, 0xb2, 0xd0, 0x50, 0x64, 0xf9, 0x74, 0x99, 0x17,
+ 0xc2, 0x29, 0x42, 0x25, 0xc4, 0x05, 0xcd, 0xd4, 0x5f, 0x78, 0xf7, 0x42,
+ 0xdb, 0xbb, 0xd5, 0x15, 0xac, 0x99, 0x6d, 0xe1, 0xe6, 0xa1, 0x26, 0xc5,
+ 0x87, 0x74, 0x28, 0x18, 0x73, 0x73, 0x57, 0x70, 0xed, 0xc5, 0x1a, 0xee,
+ 0xf3, 0xb5, 0xff, 0x58, 0xe3, 0x98, 0x16, 0xda, 0xd5, 0x75, 0x34, 0x69,
+ 0x81, 0xce, 0xe6, 0xb5, 0xd9, 0xe2, 0x36, 0xdb, 0xd1, 0x36, 0xc3, 0xd6,
+ 0x62, 0xd5, 0x42, 0x6c, 0x28, 0x18, 0xa5, 0x54, 0xb7, 0x3c, 0xf4, 0x33,
+ 0x58, 0x77, 0xd3, 0x3e, 0x26, 0x88, 0xba, 0x40, 0x9a, 0x7f, 0x70, 0x42,
+ 0x2a, 0x44, 0x50, 0x7a, 0x95, 0x5f, 0xbf, 0x1c, 0x26, 0x74, 0x10, 0x5e,
+ 0x89, 0xe5, 0x75, 0x73, 0x84, 0x98, 0xa5, 0xe4, 0x4d, 0x2a, 0xb1, 0x9a,
+ 0x4a, 0x3d, 0x3a, 0x4e, 0x9b, 0xe5, 0x52, 0x15, 0xe9, 0x94, 0x6b, 0x4b,
+ 0x41, 0xc7, 0x6d, 0xa1, 0x26, 0x2e, 0xec, 0x41, 0xa1, 0x45, 0x37, 0x8c,
+ 0x5b, 0x27, 0xe5, 0x43, 0x31, 0xe9, 0x56, 0xd7, 0x1c, 0xe4, 0x08, 0x25,
+ 0xa8, 0xac, 0x92, 0x42, 0x55, 0xa4, 0x34, 0x87, 0xa4, 0xe2, 0xbe, 0x97,
+ 0xa9, 0x8b, 0xa1, 0x68, 0xb6, 0x00, 0x32, 0x54, 0xb5, 0x02, 0xc8, 0x89,
+ 0xbe, 0xd4, 0xd1, 0x4b, 0xb9, 0xb8, 0xca, 0x10, 0xa3, 0xff, 0xb0, 0x88,
+ 0xac, 0x00, 0xde, 0xdd, 0x64, 0x4f, 0x05, 0x46, 0x98, 0x17, 0x54, 0xc5,
+ 0x84, 0x3a, 0x0f, 0x00, 0x04, 0x10, 0x50, 0x89, 0x20, 0x81, 0x38, 0x63,
+ 0x94, 0x2d, 0xbc, 0xe9, 0x80, 0x43, 0xd5, 0xa2, 0xd5, 0xad, 0x21, 0x64,
+ 0xa1, 0x7c, 0x7c, 0x30, 0xeb, 0xe5, 0x16, 0xb0, 0x07, 0xdf, 0x4b, 0x8e,
+ 0x76, 0xef, 0xb9, 0xfa, 0xf4, 0x6e, 0x7b, 0xc4, 0x90, 0x2b, 0x1e, 0x10,
+ 0x51, 0x16, 0x6b, 0xcc, 0x8e, 0x07, 0xf9, 0x47, 0x17, 0x71, 0x86, 0x85,
+ 0x91, 0xb8, 0x06, 0x90, 0xd9, 0x7c, 0xc3, 0xe1, 0x0c, 0xd2, 0xc0, 0xa7,
+ 0x12, 0x1a, 0x58, 0x9a, 0x5d, 0x82, 0xb9, 0xd9, 0xe6, 0x65, 0x54, 0x1d,
+ 0xab, 0x45, 0x78, 0x0c, 0x0e, 0x71, 0xcd, 0x55, 0x42, 0x9b, 0x98, 0x23,
+ 0xe9, 0x8e, 0xaa, 0x4d, 0x73, 0x1c, 0x18, 0x77, 0x15, 0x4b, 0x31, 0x71,
+ 0xc1, 0x13, 0x3a, 0x0b, 0xa5, 0x76, 0x12, 0xcf, 0x4d, 0x50, 0x3c, 0x09,
+ 0x3b, 0x7c, 0x49, 0x8b, 0x02, 0x95, 0x0a, 0x6d, 0x6f, 0x83, 0x0a, 0x87,
+ 0xae, 0x82, 0xc9, 0xb7, 0x7f, 0xf9, 0xb5, 0x7b, 0xde, 0xb9, 0xee, 0xfc,
+ 0xfa, 0xed, 0x5f, 0x7a, 0xaf, 0xaf, 0x2f, 0xaf, 0xff, 0x29, 0x63, 0x4a,
+ 0x1a, 0xa6, 0xa9, 0x8e, 0xe9, 0xcf, 0x08, 0xf0, 0x04, 0xa0, 0x57, 0xeb,
+ 0x5f, 0x7f, 0xb5, 0x7b, 0x74, 0x02, 0xff, 0x6d, 0x08, 0xf2, 0x71, 0x56,
+ 0xf6, 0xd3, 0x07, 0x48, 0x82, 0x47, 0xc8, 0x6f, 0x2e, 0xbc, 0xe5, 0xee,
+ 0xa3, 0x7b, 0xa1, 0x34, 0x24, 0x1d, 0x75, 0x84, 0x4e, 0xc2, 0x75, 0x66,
+ 0x0c, 0x17, 0x5b, 0xff, 0xda, 0xb4, 0x7e, 0x02, 0xff, 0x11, 0xb3, 0x6c,
+ 0x24, 0xa7, 0xbf, 0xfd, 0x76, 0xea, 0xea, 0xa7, 0x4c, 0xa1, 0x88, 0x45,
+ 0xb5, 0xa8, 0xf3, 0x23, 0xd4, 0xf8, 0xe4, 0x39, 0xfb, 0x3d, 0x0b, 0x2a,
+ 0x41, 0x28, 0xe8, 0x12, 0xaa, 0x81, 0x61, 0x0e, 0x51, 0xac, 0xb4, 0x59,
+ 0xea, 0xea, 0xc9, 0x6a, 0x2e, 0x9a, 0x5c, 0x69, 0xcd, 0x96, 0xed, 0x1e,
+ 0x31, 0xb8, 0x89, 0x91, 0xe6, 0x8a, 0x89, 0xac, 0xa7, 0x3d, 0x65, 0xa1,
+ 0x4c, 0x0a, 0x5e, 0xf5, 0x0a, 0x66, 0xf8, 0xb5, 0x99, 0xf9, 0x48, 0x17,
+ 0x3c, 0x69, 0x9c, 0x4f, 0x8b, 0x34, 0x49, 0xbf, 0xbd, 0x88, 0x2d, 0x41,
+ 0x74, 0xc2, 0x97, 0x9d, 0xec, 0xe7, 0x4c, 0xb4, 0x37, 0xcb, 0x1d, 0x55,
+ 0x93, 0x2f, 0x28, 0x3c, 0x8a, 0x68, 0xc7, 0x7a, 0x30, 0xd8, 0x0e, 0x8f,
+ 0xe8, 0x24, 0x18, 0xd2, 0xea, 0x0a, 0x2e, 0x8c, 0x3b, 0xae, 0xb0, 0xe0,
+ 0x14, 0x31, 0xa9, 0x49, 0x46, 0xd5, 0x4e, 0xa1, 0xc6, 0x3a, 0x0b, 0x69,
+ 0xd3, 0x7c, 0xc4, 0xb8, 0xe3, 0x70, 0x06, 0xb4, 0x88, 0xf0, 0x0d, 0xdb,
+ 0x35, 0xd2, 0x55, 0x89, 0xf9, 0x51, 0x58, 0x59, 0x24, 0x1b, 0x9e, 0x3e,
+ 0x98, 0xae, 0x0e, 0x4f, 0x93, 0x6c, 0x88, 0x75, 0xac, 0x68, 0xf5, 0x6f,
+ 0x32, 0x47, 0x00, 0x03, 0x49, 0x54, 0x01, 0x78, 0xad, 0x2c, 0xf3, 0x28,
+ 0xc0, 0xdc, 0x8b, 0x7c, 0x2e, 0xb8, 0x99, 0x78, 0x03, 0x74, 0xc7, 0xac,
+ 0x3b, 0x80, 0x42, 0x99, 0xf5, 0x04, 0x81, 0x22, 0xfe, 0x3e, 0x2e, 0x3f,
+ 0xaf, 0x48, 0x40, 0x6a, 0x0e, 0xaf, 0x43, 0x65, 0x3e, 0x90, 0xf7, 0x9a,
+ 0x00, 0xd1, 0x33, 0xc8, 0x86, 0xf9, 0x28, 0x27, 0xe9, 0x7c, 0x82, 0xa2,
+ 0xdf, 0xec, 0x61, 0x23, 0xb6, 0xd0, 0xc1, 0x2a, 0x2f, 0xb3, 0xc2, 0x8b,
+ 0x57, 0x77, 0xa3, 0x1d, 0xac, 0xaa, 0x87, 0xbd, 0x2e, 0xbb, 0x1a, 0x67,
+ 0xcf, 0x72, 0x2b, 0x5a, 0x00, 0x28, 0xa3, 0xa3, 0xb3, 0x7d, 0xb8, 0x70,
+ 0x1f, 0x94, 0xd3, 0x1d, 0x3e, 0xb5, 0x21, 0x6f, 0xa2, 0x52, 0x63, 0x87,
+ 0x4b, 0x9f, 0xc1, 0xe5, 0x21, 0xc4, 0xba, 0x8e, 0x19, 0x47, 0x00, 0xce,
+ 0x63, 0xb3, 0x91, 0xa0, 0x02, 0xd6, 0x6d, 0xa1, 0x36, 0x63, 0x3b, 0x32,
+ 0x0b, 0xdb, 0xc9, 0xb7, 0xdf, 0x9b, 0x73, 0x4f, 0x30, 0x2b, 0xbe, 0x5b,
+ 0xdb, 0x6e, 0x6f, 0xad, 0x7d, 0x6f, 0xee, 0xda, 0x49, 0xbe, 0xfd, 0xcb,
+ 0xf9, 0x9b, 0xee, 0xf5, 0x3f, 0xdf, 0xf6, 0x0c, 0x0d, 0x19, 0x41, 0xe7,
+ 0xd7, 0xd5, 0x95, 0x5d, 0x73, 0xad, 0xf7, 0xb2, 0xf7, 0xca, 0x30, 0x29,
+ 0xba, 0xb6, 0xfe, 0xd5, 0x5b, 0x6c, 0x66, 0x23, 0x31, 0x4f, 0xec, 0x25,
+ 0x96, 0x7d, 0xfd, 0x35, 0xf9, 0xf8, 0x31, 0x59, 0x33, 0x73, 0x76, 0x78,
+ 0xf2, 0xfb, 0xef, 0x27, 0x6b, 0xe6, 0xc7, 0x7d, 0xfd, 0xe3, 0xef, 0xbf,
+ 0xc3, 0x8f, 0x07, 0x5b, 0x27, 0x72, 0x09, 0x0e, 0xab, 0xf7, 0x4f, 0x49,
+ 0x03, 0x6b, 0x08, 0x42, 0xb1, 0xec, 0x71, 0x66, 0xd8, 0xd0, 0x1a, 0xb4,
+ 0x7a, 0x90, 0xfc, 0xf5, 0xe3, 0xc7, 0x93, 0xd5, 0x95, 0xc3, 0xe4, 0x37,
+ 0xf3, 0xed, 0x08, 0x40, 0x5d, 0x8d, 0xf8, 0x40, 0x85, 0xd1, 0x69, 0x36,
+ 0xcd, 0x71, 0xfa, 0x08, 0x32, 0xd4, 0xd7, 0xd4, 0xca, 0x49, 0x32, 0xca,
+ 0xcc, 0x71, 0x36, 0xc0, 0xe2, 0xa2, 0xe6, 0x56, 0x6f, 0x41, 0xf0, 0x39,
+ 0x82, 0x74, 0x65, 0x5e, 0x64, 0x27, 0xd4, 0x53, 0x2a, 0x13, 0x88, 0x94,
+ 0xcf, 0x21, 0x92, 0x17, 0x0f, 0xda, 0x3e, 0x59, 0x75, 0x44, 0x0e, 0x32,
+ 0x54, 0x8a, 0x13, 0xbe, 0xd7, 0xe4, 0x3c, 0x2e, 0x55, 0x4d, 0xd3, 0x31,
+ 0xc1, 0x5d, 0x14, 0xf2, 0x84, 0xca, 0x93, 0x7c, 0x84, 0x19, 0x34, 0x53,
+ 0xb3, 0x2c, 0x0c, 0x32, 0x84, 0xd2, 0x64, 0x58, 0x7a, 0xd3, 0xdb, 0xe9,
+ 0x1f, 0x3f, 0x06, 0xdb, 0x1b, 0x5a, 0x04, 0x8e, 0xe8, 0xe2, 0xdb, 0x09,
+ 0xfd, 0xdf, 0xe8, 0x0f, 0xa9, 0x05, 0x8f, 0x72, 0x1c, 0xd1, 0x6b, 0xec,
+ 0xaf, 0x66, 0x29, 0x82, 0xe6, 0xda, 0xc9, 0x55, 0x4e, 0xd0, 0xcc, 0xb1,
+ 0x32, 0x75, 0xb6, 0x00, 0xa8, 0xd9, 0x11, 0xe3, 0x31, 0x6c, 0xd4, 0xca,
+ 0x68, 0xe7, 0x77, 0xff, 0xf7, 0xdf, 0x2b, 0xdc, 0xc9, 0xb6, 0x29, 0xac,
+ 0xa0, 0x9d, 0xac, 0x77, 0xa0, 0x4c, 0x90, 0x42, 0xc6, 0x02, 0xd1, 0x1b,
+ 0x08, 0x01, 0xc0, 0xb7, 0xe0, 0xba, 0x79, 0x1d, 0x17, 0x20, 0x5d, 0xb6,
+ 0xf9, 0xa7, 0x6c, 0x6a, 0xab, 0xab, 0x01, 0xd6, 0x4e, 0x4c, 0x40, 0x96,
+ 0x45, 0xdc, 0x6f, 0xd6, 0x1d, 0x5e, 0x11, 0xae, 0x0b, 0x44, 0x1b, 0x7b,
+ 0x69, 0x6c, 0x95, 0x93, 0xe5, 0xd6, 0x38, 0x3e, 0x0a, 0x5e, 0x64, 0xbb,
+ 0x9e, 0x6a, 0x75, 0x88, 0xa5, 0xfb, 0x7d, 0x33, 0x7a, 0xeb, 0xbc, 0xbd,
+ 0x84, 0x65, 0x78, 0xbc, 0x97, 0x34, 0xf9, 0x00, 0xc0, 0xba, 0x58, 0x0a,
+ 0xf2, 0x39, 0x72, 0x36, 0xb7, 0xe7, 0xcf, 0xdf, 0x41, 0x84, 0x2c, 0x16,
+ 0x13, 0xb1, 0x23, 0x00, 0xb5, 0x19, 0x2a, 0x83, 0x04, 0x54, 0xf3, 0xf9,
+ 0x4d, 0xad, 0x83, 0xb6, 0x31, 0x7c, 0x5a, 0x48, 0xe9, 0x1b, 0x38, 0xab,
+ 0x74, 0xfe, 0x51, 0x3d, 0xad, 0xfa, 0x0e, 0x57, 0x56, 0xc4, 0xef, 0x30,
+ 0x96, 0xeb, 0x03, 0x6d, 0x6c, 0x3a, 0x9b, 0xb0, 0xe0, 0x02, 0xdf, 0x2a,
+ 0x9d, 0x5f, 0xff, 0x93, 0x4b, 0xb4, 0x91, 0x04, 0x3d, 0xf6, 0x8f, 0x1c,
+ 0xbf, 0xcf, 0xd4, 0x64, 0x85, 0x92, 0x00, 0x89, 0x7d, 0x5c, 0x3c, 0x9a,
+ 0x5d, 0x05, 0xa5, 0x16, 0x79, 0x47, 0x34, 0x97, 0x25, 0x2b, 0xd5, 0xbf,
+ 0x90, 0x71, 0xd4, 0xa9, 0x88, 0x42, 0x15, 0x47, 0x11, 0xaa, 0x98, 0x7e,
+ 0xda, 0x18, 0x7c, 0x6a, 0xe1, 0xf9, 0xd6, 0xac, 0xb5, 0x09, 0x4a, 0x38,
+ 0xf2, 0x72, 0x40, 0x5f, 0x12, 0xb1, 0x40, 0x09, 0x2f, 0x70, 0x0e, 0xa0,
+ 0x3c, 0xb1, 0xba, 0x22, 0x02, 0x45, 0x5e, 0xb2, 0x86, 0x30, 0xbc, 0x6d,
+ 0x71, 0xb9, 0x10, 0x38, 0x54, 0xd7, 0xa1, 0xf5, 0xd9, 0x98, 0x8a, 0x10,
+ 0x22, 0xfa, 0xfc, 0x86, 0xad, 0xed, 0xc2, 0x30, 0x88, 0xf6, 0xe0, 0x31,
+ 0x42, 0x28, 0x9f, 0x3c, 0x6a, 0x9e, 0xdc, 0xe1, 0x83, 0xb7, 0xd7, 0xea,
+ 0xbe, 0x0b, 0xd4, 0xa7, 0x81, 0xc5, 0xd3, 0x1a, 0x39, 0xe5, 0xc9, 0x07,
+ 0xd9, 0xea, 0xf2, 0x38, 0x09, 0x65, 0xed, 0xbf, 0x48, 0x1b, 0xde, 0xde,
+ 0x42, 0xa8, 0x30, 0xf3, 0x87, 0xf5, 0xe1, 0x0e, 0x15, 0xd5, 0xf4, 0xf5,
+ 0x22, 0xaa, 0x29, 0x8b, 0x2a, 0x20, 0x4d, 0x77, 0x8b, 0x17, 0xc5, 0xa8,
+ 0x48, 0x4d, 0x5e, 0x3c, 0x57, 0x14, 0x1e, 0xd4, 0x53, 0xfe, 0x7d, 0x75,
+ 0x65, 0x64, 0x31, 0xe3, 0x64, 0xa5, 0xa6, 0x4f, 0x0f, 0x41, 0xb1, 0x74,
+ 0xae, 0x0e, 0x6c, 0xa7, 0x82, 0x4b, 0x1e, 0x73, 0x8b, 0xb2, 0xbc, 0x55,
+ 0x94, 0x7b, 0xb2, 0x25, 0x62, 0x49, 0x5c, 0xdf, 0x1c, 0xa9, 0x70, 0xee,
+ 0x71, 0x67, 0xa0, 0x0e, 0xbe, 0x4e, 0x0c, 0x12, 0xe4, 0xbf, 0xd2, 0x7f,
+ 0x9f, 0x13, 0x3d, 0xb9, 0xb7, 0x4c, 0xc5, 0x33, 0x07, 0xed, 0x65, 0xf7,
+ 0xf0, 0x89, 0xd3, 0xe0, 0xfd, 0xca, 0x9d, 0xc9, 0xcd, 0x2c, 0x87, 0xf2,
+ 0xad, 0x54, 0x3b, 0x13, 0xdf, 0x58, 0x72, 0xf2, 0x32, 0x08, 0xa2, 0xb7,
+ 0xc3, 0xf4, 0x0e, 0x2b, 0x9d, 0x7a, 0x6f, 0x4e, 0x82, 0x17, 0xa7, 0x52,
+ 0x76, 0xd9, 0x29, 0x9e, 0x5e, 0x55, 0x5c, 0x2e, 0x85, 0xec, 0x1e, 0x91,
+ 0x3a, 0x0a, 0xeb, 0x37, 0xcd, 0xa4, 0x8f, 0xa5, 0x14, 0xcc, 0x87, 0xc1,
+ 0xc6, 0x86, 0xaa, 0xbb, 0x50, 0x79, 0x69, 0x13, 0x84, 0x77, 0x52, 0x28,
+ 0xa8, 0x5c, 0x91, 0x2a, 0x33, 0x09, 0xbb, 0xeb, 0x86, 0x44, 0x75, 0xdc,
+ 0x6c, 0xcb, 0x52, 0xde, 0xa7, 0xe4, 0x43, 0xee, 0x63, 0x3e, 0xe4, 0xbe,
+ 0x33, 0xc4, 0xb8, 0xd9, 0xd4, 0x8e, 0x03, 0x23, 0xaa, 0x18, 0x09, 0xe0,
+ 0x3d, 0x70, 0x3d, 0x5a, 0x41, 0xd5, 0x47, 0x96, 0x99, 0x68, 0x2a, 0x72,
+ 0xa0, 0x24, 0x98, 0x7c, 0x2a, 0xae, 0x31, 0x90, 0x9c, 0xb9, 0x64, 0x58,
+ 0x14, 0xef, 0x51, 0xc3, 0x48, 0x61, 0x4f, 0x01, 0xe7, 0x02, 0x7b, 0x08,
+ 0x35, 0x26, 0x54, 0xc9, 0x9e, 0x08, 0xcb, 0x62, 0xe8, 0x05, 0x90, 0x29,
+ 0xcb, 0xa9, 0x71, 0xa6, 0x37, 0x34, 0xff, 0x50, 0x85, 0xdb, 0x69, 0x43,
+ 0x54, 0xcc, 0xc2, 0xf5, 0x88, 0x1d, 0x30, 0x7d, 0xc8, 0xe6, 0x7c, 0xa0,
+ 0x92, 0x14, 0x58, 0x92, 0x9d, 0xeb, 0x40, 0xd9, 0x07, 0xa1, 0x36, 0xf6,
+ 0x7b, 0xd1, 0x83, 0xa9, 0xff, 0x58, 0xba, 0x97, 0xd7, 0xf3, 0xc6, 0x2c,
+ 0xd2, 0x7a, 0xdf, 0xac, 0xa7, 0x5b, 0xcb, 0x76, 0xd2, 0x89, 0xae, 0x13,
+ 0x4c, 0x4c, 0x7f, 0x98, 0xa5, 0x93, 0xe1, 0x53, 0xe2, 0xca, 0xb7, 0x80,
+ 0xb8, 0x22, 0x2f, 0x85, 0x23, 0x95, 0x2b, 0x27, 0x05, 0xe4, 0x43, 0xe7,
+ 0xd0, 0x97, 0xac, 0xc0, 0xe6, 0x2f, 0x72, 0x65, 0x81, 0xcd, 0x29, 0x89,
+ 0x85, 0x6d, 0xc6, 0x6b, 0x5c, 0x2f, 0xdd, 0x4c, 0x16, 0x2c, 0x57, 0x12,
+ 0x2c, 0x55, 0x6a, 0x57, 0xe8, 0x24, 0xc9, 0x72, 0xf4, 0xd2, 0xc0, 0x14,
+ 0xf4, 0x69, 0x0a, 0x0a, 0xfa, 0x36, 0xe0, 0x33, 0xc1, 0x09, 0x9e, 0xfd,
+ 0x7e, 0xf6, 0xe0, 0x95, 0x43, 0x7d, 0x05, 0xea, 0x1b, 0xd5, 0xc4, 0x1d,
+ 0x3e, 0xbd, 0x00, 0x77, 0x06, 0xcc, 0x28, 0xaa, 0xcb, 0xe6, 0xdf, 0x74,
+ 0x36, 0x2d, 0xcc, 0x14, 0x52, 0x85, 0x6b, 0x5a, 0x46, 0xa8, 0x3f, 0x31,
+ 0xc3, 0xba, 0xe5, 0xd6, 0x97, 0xe6, 0xf3, 0x36, 0x2e, 0x96, 0xcb, 0x3a,
+ 0x37, 0x61, 0x13, 0xa4, 0x43, 0xf0, 0x06, 0x4d, 0xef, 0x47, 0x65, 0x33,
+ 0xc9, 0xda, 0x77, 0x6d, 0x77, 0x21, 0xd9, 0x6d, 0xef, 0x03, 0xd5, 0x8a,
+ 0x4d, 0x7b, 0xb7, 0x7d, 0x8c, 0x5e, 0x24, 0xc4, 0x68, 0x55, 0x98, 0xac,
+ 0x84, 0xc3, 0x2a, 0x36, 0x3b, 0xe2, 0xbf, 0x80, 0xee, 0xba, 0x49, 0x24,
+ 0x39, 0xc2, 0xba, 0x41, 0x50, 0xeb, 0x58, 0xbf, 0x2a, 0xe5, 0x39, 0x02,
+ 0x93, 0x39, 0xb2, 0x4c, 0xaf, 0xfb, 0xc0, 0x47, 0xa0, 0x38, 0xaf, 0xf5,
+ 0xd2, 0x48, 0x81, 0x4a, 0xc6, 0x2c, 0x54, 0x35, 0x53, 0xd1, 0x7f, 0xd3,
+ 0xc4, 0xdb, 0x57, 0x57, 0x0c, 0x69, 0xdd, 0x1a, 0x22, 0x1b, 0x64, 0x4e,
+ 0x43, 0x01, 0x50, 0x20, 0xf0, 0x84, 0x68, 0x68, 0x91, 0xb0, 0x91, 0x8d,
+ 0x13, 0x10, 0xf7, 0xb1, 0xe8, 0x3d, 0xbf, 0x90, 0xa4, 0x17, 0xe9, 0x24,
+ 0x62, 0xef, 0x42, 0xd9, 0x79, 0xdc, 0x86, 0xa8, 0x56, 0xa3, 0xcb, 0x04,
+ 0xce, 0x5c, 0xa7, 0x14, 0xbb, 0xce, 0x96, 0x09, 0x56, 0x13, 0xe1, 0x6d,
+ 0x4d, 0x7e, 0xb7, 0x12, 0x2c, 0xd3, 0xde, 0xb9, 0x02, 0xa4, 0x8e, 0xdb,
+ 0x34, 0x42, 0xec, 0x54, 0x3b, 0x95, 0x55, 0x11, 0x57, 0x69, 0x0c, 0x8c,
+ 0x7e, 0x0f, 0xc5, 0x64, 0xea, 0xdc, 0x04, 0x70, 0x83, 0x23, 0x99, 0x8e,
+ 0x9d, 0xe1, 0x04, 0x6b, 0x71, 0x48, 0xc1, 0x67, 0x1c, 0x04, 0x2e, 0x84,
+ 0xd4, 0x88, 0x02, 0xbb, 0x45, 0x2d, 0x8b, 0xb7, 0x47, 0xa1, 0xd8, 0x6e,
+ 0x40, 0x65, 0x1d, 0x08, 0xc9, 0xb1, 0x59, 0xc2, 0xfc, 0xe6, 0x1c, 0x01,
+ 0xfe, 0x21, 0xc5, 0x47, 0x04, 0x82, 0xc9, 0xae, 0xae, 0x54, 0x40, 0x44,
+ 0x01, 0x40, 0x33, 0x20, 0x97, 0xb3, 0x7f, 0x7b, 0xa6, 0x7d, 0xf7, 0x6e,
+ 0x46, 0xb9, 0xfd, 0x4e, 0x42, 0xf9, 0x7c, 0x62, 0xc6, 0x3e, 0x89, 0x19,
+ 0xc2, 0x08, 0xbe, 0x14, 0xa8, 0x58, 0xc7, 0x4c, 0x27, 0x4c, 0x5b, 0xdf,
+ 0x16, 0xaf, 0x70, 0x96, 0xe8, 0x1e, 0xe3, 0x04, 0x95, 0x61, 0x8d, 0x6c,
+ 0x38, 0x7a, 0x04, 0x44, 0x48, 0x4b, 0x26, 0x46, 0xfe, 0x1c, 0x4b, 0x15,
+ 0xa1, 0x92, 0x4e, 0x49, 0xae, 0xe9, 0x8d, 0xa4, 0x08, 0x86, 0x77, 0xdc,
+ 0x51, 0x24, 0xfb, 0x36, 0x6d, 0x19, 0x4d, 0xf4, 0x43, 0x92, 0xb0, 0x51,
+ 0xa9, 0xa5, 0xcb, 0x44, 0x68, 0x0e, 0x5f, 0xc0, 0xd1, 0x42, 0x8b, 0x68,
+ 0x3a, 0x0e, 0x4c, 0xb1, 0xe6, 0x0c, 0x01, 0xa2, 0x4c, 0x49, 0x89, 0xf2,
+ 0x5f, 0xda, 0x4c, 0x8c, 0x8c, 0x0a, 0x3e, 0x08, 0x94, 0xbb, 0xd2, 0x07,
+ 0xa3, 0x4f, 0x10, 0x48, 0x35, 0xd6, 0x1a, 0x2e, 0xe4, 0x9c, 0x4c, 0x95,
+ 0xff, 0x07, 0x6a, 0xaa, 0x86, 0x2f, 0x67, 0xa4, 0x07, 0xab, 0x33, 0xe2,
+ 0x13, 0xd5, 0xb7, 0x51, 0x95, 0xbe, 0x27, 0x64, 0x70, 0x85, 0xad, 0x60,
+ 0xeb, 0xac, 0x57, 0x22, 0xfd, 0xcb, 0xe9, 0x08, 0xed, 0x63, 0x61, 0xe6,
+ 0xe2, 0x21, 0x43, 0x2f, 0xb4, 0xd9, 0xbd, 0x33, 0xae, 0x0c, 0x7e, 0x69,
+ 0x0d, 0x10, 0x30, 0x5f, 0x58, 0xcf, 0x5d, 0x6e, 0xc3, 0xc3, 0xe9, 0x1f,
+ 0xe0, 0xa8, 0xb0, 0x83, 0x13, 0x09, 0x05, 0x66, 0x06, 0x0d, 0x80, 0x65,
+ 0xe5, 0x85, 0xc8, 0x8f, 0xcc, 0x61, 0xfc, 0x98, 0x3e, 0x95, 0x2f, 0x68,
+ 0x25, 0xb0, 0x86, 0xe1, 0x48, 0x10, 0x78, 0x50, 0xd5, 0x48, 0xcb, 0x72,
+ 0x36, 0xa2, 0x83, 0xa5, 0x9c, 0x3d, 0xc0, 0x46, 0x97, 0xd3, 0x51, 0x58,
+ 0x3f, 0x79, 0x79, 0xaa, 0x4b, 0xc5, 0xe9, 0xf3, 0x6c, 0x2a, 0x57, 0xb3,
+ 0xa8, 0x49, 0x04, 0xe5, 0x54, 0x72, 0xce, 0x90, 0xcc, 0x6c, 0x39, 0x16,
+ 0xa5, 0xde, 0x13, 0xff, 0x81, 0x1a, 0x9c, 0x93, 0x01, 0x84, 0x16, 0x00,
+ 0x7e, 0xf9, 0x7b, 0x38, 0x8d, 0xcd, 0x81, 0x96, 0xa5, 0x25, 0x22, 0x84,
+ 0x83, 0x80, 0x60, 0xe9, 0xb6, 0xa6, 0x06, 0x33, 0xaf, 0x1b, 0x32, 0x30,
+ 0x47, 0x73, 0xa8, 0xba, 0x8e, 0x09, 0x9d, 0x19, 0xa6, 0x04, 0x0a, 0xde,
+ 0x0f, 0xcb, 0x02, 0xbd, 0x55, 0xc8, 0x9a, 0xf0, 0x22, 0x87, 0x35, 0x10,
+ 0x9a, 0x09, 0x26, 0xcc, 0xe7, 0x1a, 0x87, 0x16, 0x48, 0xf0, 0x43, 0x9a,
+ 0x0f, 0xc1, 0xe0, 0x84, 0x2b, 0x21, 0x9e, 0x27, 0xd1, 0xf1, 0xd0, 0xd9,
+ 0x65, 0x76, 0x1b, 0x68, 0x4e, 0x59, 0x3a, 0x02, 0xed, 0xd8, 0xa8, 0x59,
+ 0x46, 0x76, 0x30, 0x93, 0x4f, 0x2f, 0xe0, 0xe3, 0xd2, 0x4b, 0xab, 0x6f,
+ 0x82, 0xa0, 0x8e, 0x0e, 0x1e, 0x40, 0x5c, 0x00, 0x46, 0x9f, 0x71, 0x74,
+ 0x85, 0xec, 0x38, 0x1a, 0x01, 0xe2, 0xb8, 0x03, 0x6a, 0x12, 0x2d, 0x12,
+ 0xbb, 0x64, 0xad, 0x57, 0x02, 0x45, 0x38, 0xd3, 0x16, 0x7f, 0x69, 0xe2,
+ 0x91, 0x02, 0x4e, 0x6a, 0x23, 0xef, 0x8f, 0x91, 0x32, 0xd7, 0xc1, 0xaf,
+ 0x0b, 0x34, 0xbb, 0xa1, 0xc7, 0xd5, 0x4e, 0x7e, 0xa1, 0xf3, 0x3b, 0x1f,
+ 0xf0, 0x4b, 0x6f, 0x11, 0x02, 0xa8, 0x8f, 0x52, 0x07, 0x7e, 0x16, 0xde,
+ 0xe8, 0xd5, 0x5b, 0x12, 0x26, 0xd8, 0x1a, 0x17, 0x2d, 0xd3, 0x70, 0x0b,
+ 0x9a, 0xb4, 0x0c, 0x51, 0x63, 0x33, 0x9e, 0x0b, 0x9b, 0x49, 0x7e, 0x61,
+ 0x39, 0xb3, 0xc7, 0xfd, 0xb0, 0x9c, 0x46, 0xe3, 0xac, 0x68, 0xa6, 0x73,
+ 0xc6, 0xc4, 0x8d, 0x2b, 0xa9, 0xe6, 0x22, 0x82, 0x00, 0x89, 0xe7, 0x0a,
+ 0x8f, 0x36, 0xa7, 0xa0, 0x07, 0x19, 0xae, 0xde, 0xd7, 0x01, 0xae, 0xb0,
+ 0x95, 0x9f, 0xe1, 0x71, 0xc0, 0x98, 0x03, 0x4c, 0x4a, 0x10, 0x93, 0x08,
+ 0x36, 0x2d, 0x26, 0xf1, 0x49, 0x5b, 0x4e, 0xbf, 0x21, 0x05, 0x19, 0x22,
+ 0x5e, 0x58, 0xf9, 0x05, 0xbd, 0xe1, 0x0e, 0x8e, 0x6c, 0xae, 0x4d, 0x5f,
+ 0xc7, 0x37, 0x9b, 0xee, 0x5c, 0x57, 0xf3, 0xee, 0x07, 0xd1, 0xa0, 0x03,
+ 0x61, 0xcd, 0x99, 0x52, 0xc0, 0x68, 0xcd, 0x82, 0xee, 0x1a, 0xad, 0xb1,
+ 0xf2, 0xa1, 0x7a, 0xac, 0x31, 0xa1, 0x7d, 0x62, 0x6e, 0xba, 0x85, 0x0d,
+ 0x62, 0x38, 0x00, 0xca, 0xe0, 0xb7, 0x86, 0xba, 0x93, 0x02, 0x6a, 0x5a,
+ 0x30, 0x85, 0x3f, 0x18, 0xb2, 0xe1, 0x5e, 0xb0, 0xe9, 0x40, 0x05, 0x75,
+ 0x20, 0xd5, 0x1a, 0xee, 0x39, 0x7c, 0x42, 0x79, 0x6a, 0x42, 0x50, 0xf5,
+ 0xc8, 0xc1, 0x28, 0x0e, 0x00, 0xd9, 0x2b, 0x90, 0xf5, 0x7d, 0x36, 0x7c,
+ 0xb0, 0x8c, 0x15, 0x75, 0x5b, 0x98, 0x4f, 0xa8, 0x0d, 0xdf, 0x4c, 0xd6,
+ 0xa0, 0xe7, 0x6b, 0xa8, 0x9c, 0x6a, 0xbb, 0x07, 0x38, 0xf9, 0xe1, 0x7f,
+ 0xbb, 0xdd, 0x8a, 0xed, 0x03, 0x5d, 0xec, 0xdf, 0xcf, 0x79, 0xe4, 0xa2,
+ 0x62, 0xd7, 0x13, 0x1e, 0x74, 0xf6, 0x64, 0x98, 0xd5, 0x1b, 0xe4, 0x22,
+ 0x80, 0x77, 0x05, 0x27, 0x04, 0x6b, 0xdc, 0x66, 0x78, 0xbc, 0xae, 0x6a,
+ 0x97, 0x96, 0x91, 0x77, 0x5c, 0xf4, 0x2e, 0x2e, 0x2a, 0x16, 0xe3, 0x58,
+ 0x60, 0x07, 0xd6, 0xa7, 0xe7, 0xd2, 0x7a, 0xc9, 0xb7, 0x1f, 0xd2, 0xc9,
+ 0xe9, 0x57, 0x5f, 0x7d, 0xbb, 0x09, 0x7f, 0xa1, 0x55, 0x2c, 0xb5, 0x37,
+ 0x05, 0xd7, 0x0c, 0x58, 0x0a, 0x70, 0xb1, 0x6e, 0xa0, 0x73, 0x64, 0xa3,
+ 0xce, 0x3e, 0x82, 0xd0, 0x1d, 0x36, 0x8b, 0x34, 0x86, 0xd3, 0x07, 0x2c,
+ 0x1b, 0xf6, 0x65, 0xd6, 0x9f, 0x21, 0x46, 0xae, 0xd7, 0x3c, 0x86, 0x44,
+ 0x60, 0xbd, 0xcd, 0x0c, 0x4b, 0x6e, 0x26, 0x5b, 0x2e, 0x14, 0xa4, 0x52,
+ 0x1a, 0xf0, 0x41, 0x6f, 0x94, 0x5f, 0xc8, 0x8d, 0x13, 0xcc, 0x92, 0x38,
+ 0x01, 0xc8, 0x9a, 0xae, 0xe0, 0x83, 0x6e, 0x90, 0x1f, 0x7f, 0xd7, 0xd8,
+ 0x6e, 0x18, 0xc1, 0xde, 0x08, 0x8d, 0xdf, 0x35, 0xe8, 0x8a, 0x51, 0x7d,
+ 0xa6, 0x54, 0xe8, 0x6d, 0x3a, 0x31, 0xff, 0x0d, 0x78, 0xee, 0xb6, 0xb6,
+ 0x4c, 0x4f, 0x92, 0x8b, 0xde, 0xea, 0x8a, 0x9a, 0x41, 0xf8, 0xd5, 0xfc,
+ 0xc7, 0xc4, 0x70, 0x93, 0xdf, 0xb5, 0x80, 0xdb, 0xa5, 0xc0, 0x7a, 0xa1,
+ 0x3a, 0x70, 0x96, 0xac, 0x6f, 0xef, 0xec, 0xee, 0x11, 0xe7, 0xdf, 0xa0,
+ 0xdb, 0x37, 0xb1, 0x55, 0xdd, 0xf2, 0xc5, 0x85, 0x69, 0xb3, 0x97, 0xe0,
+ 0x0b, 0x6a, 0x5a, 0x1e, 0xe6, 0xd3, 0xe9, 0x30, 0xab, 0x34, 0xbe, 0xb7,
+ 0xbb, 0xb3, 0x5d, 0x69, 0x1c, 0xc6, 0x1a, 0xe9, 0xf8, 0x85, 0xe9, 0x7b,
+ 0x4d, 0xeb, 0xb3, 0xf1, 0xac, 0x84, 0xd2, 0x2d, 0xb8, 0x77, 0xf8, 0x98,
+ 0x5a, 0xdf, 0xd9, 0xde, 0xdb, 0xa5, 0x56, 0x41, 0x76, 0xac, 0x76, 0xba,
+ 0x07, 0x4d, 0xce, 0xeb, 0x73, 0xb4, 0xd5, 0xdd, 0xbd, 0xed, 0x9d, 0x85,
+ 0xad, 0x7e, 0xf5, 0x55, 0x02, 0xd4, 0x10, 0xb4, 0xca, 0x70, 0x8f, 0x6e,
+ 0x92, 0xeb, 0x87, 0x8c, 0x83, 0x9d, 0xdf, 0x8c, 0x37, 0xa3, 0xfe, 0xca,
+ 0x40, 0x6b, 0xd2, 0x52, 0xef, 0x22, 0x39, 0x3b, 0x4b, 0xce, 0x2e, 0x62,
+ 0xcd, 0x1c, 0xa9, 0xc7, 0x36, 0x99, 0x64, 0x36, 0x91, 0xcc, 0xa2, 0xa4,
+ 0x09, 0xe7, 0xc3, 0x17, 0xa4, 0x4e, 0x0a, 0x2d, 0x0d, 0xff, 0x2a, 0x06,
+ 0x44, 0x73, 0x3e, 0x1d, 0x18, 0x69, 0xfe, 0xb1, 0x34, 0x67, 0xc9, 0x77,
+ 0x8d, 0xbd, 0x06, 0xad, 0x15, 0x1c, 0x0b, 0x24, 0x20, 0x58, 0x5e, 0xce,
+ 0x2e, 0xd1, 0xdd, 0x9d, 0xd6, 0x4d, 0x3e, 0xa5, 0x60, 0x43, 0x5b, 0x9e,
+ 0xb9, 0x73, 0xd5, 0xbd, 0xbc, 0xf4, 0xc0, 0x91, 0xf0, 0x31, 0xd2, 0x9e,
+ 0xf0, 0x47, 0xae, 0x42, 0x8e, 0xa7, 0x80, 0x39, 0xd9, 0x1f, 0xe0, 0x94,
+ 0xfc, 0x00, 0xe2, 0x9e, 0xda, 0x21, 0xb8, 0x33, 0x36, 0x82, 0x85, 0x58,
+ 0x5d, 0x41, 0x9a, 0xde, 0x20, 0x96, 0x67, 0xd8, 0x84, 0x10, 0x11, 0x72,
+ 0x17, 0x9c, 0x80, 0x92, 0x48, 0x13, 0xef, 0x40, 0x6a, 0x22, 0x0b, 0x46,
+ 0xec, 0x14, 0x32, 0x0a, 0x17, 0x04, 0x6b, 0xa2, 0xae, 0x95, 0x32, 0xbf,
+ 0x22, 0x7d, 0x2a, 0x73, 0xc7, 0x42, 0x30, 0x03, 0x2c, 0x21, 0x9a, 0xc1,
+ 0xf0, 0xd8, 0xad, 0x2c, 0x68, 0x58, 0xb7, 0x39, 0x2d, 0x72, 0x02, 0xc8,
+ 0x8c, 0x6e, 0xe4, 0xdd, 0x2e, 0x6d, 0x88, 0x60, 0x4f, 0x50, 0x21, 0x9b,
+ 0xe7, 0xef, 0x66, 0x2a, 0x01, 0x53, 0x7d, 0x0d, 0xbd, 0x03, 0x5f, 0x36,
+ 0xf7, 0x35, 0x0b, 0xb6, 0xf5, 0x9c, 0xe6, 0x65, 0x20, 0xcf, 0x6f, 0xde,
+ 0xed, 0xef, 0x85, 0xcd, 0xef, 0x5e, 0xc4, 0xf7, 0xe6, 0x59, 0x0f, 0x56,
+ 0x43, 0x51, 0xca, 0xe5, 0xd5, 0x9b, 0x16, 0xd5, 0xba, 0x82, 0x37, 0xef,
+ 0xa0, 0x20, 0x18, 0x27, 0xd7, 0xed, 0x83, 0x80, 0x5c, 0x0d, 0xfd, 0xa9,
+ 0x86, 0xa8, 0x8f, 0x96, 0x84, 0x3d, 0xd8, 0xb0, 0x1a, 0x12, 0x4e, 0xd6,
+ 0xa7, 0x35, 0xc4, 0x95, 0xd4, 0xd2, 0x16, 0xd4, 0x5e, 0x37, 0xc4, 0xb5,
+ 0x31, 0x9f, 0x4c, 0x76, 0x2f, 0x62, 0xac, 0x13, 0x67, 0xe0, 0x25, 0xce,
+ 0x40, 0xb0, 0x31, 0x82, 0x59, 0x48, 0x9e, 0x35, 0x09, 0x41, 0x5b, 0xf5,
+ 0x13, 0x91, 0x3c, 0x7b, 0x1e, 0x16, 0x6e, 0xb2, 0x79, 0xf3, 0x60, 0x26,
+ 0xe1, 0xf0, 0x28, 0x39, 0x38, 0xaf, 0x30, 0xa9, 0x53, 0xc6, 0x50, 0x47,
+ 0x40, 0xdb, 0x3d, 0xc3, 0xaf, 0xb1, 0x33, 0x4d, 0x0a, 0x0f, 0x7b, 0x80,
+ 0xe0, 0x46, 0x46, 0xfa, 0x3d, 0x3a, 0x82, 0x08, 0xd8, 0xab, 0xfb, 0xfc,
+ 0x76, 0xda, 0xfa, 0xfb, 0xe5, 0x55, 0x33, 0xe9, 0xfd, 0xd4, 0xc5, 0x98,
+ 0x6b, 0x90, 0x49, 0x0a, 0x0a, 0xc4, 0x3d, 0x84, 0x09, 0x69, 0x26, 0x47,
+ 0xf4, 0x07, 0x62, 0x48, 0xf2, 0x8f, 0xd9, 0xa0, 0xf5, 0x98, 0x0f, 0xa6,
+ 0xf7, 0x6a, 0xfa, 0xc8, 0x1a, 0x3c, 0x2e, 0x67, 0x93, 0x8c, 0x43, 0xec,
+ 0x3c, 0x45, 0xac, 0x24, 0x33, 0x1d, 0x4e, 0x0a, 0x46, 0x42, 0x53, 0x54,
+ 0x07, 0xeb, 0x5e, 0xa2, 0xf4, 0x95, 0xe0, 0x8a, 0x1b, 0x90, 0x96, 0x32,
+ 0xe0, 0xc9, 0x3b, 0xa1, 0x68, 0xbe, 0x3e, 0xa0, 0xf1, 0x29, 0xac, 0xe2,
+ 0x45, 0xc4, 0xd4, 0x9f, 0x7a, 0xc2, 0x2b, 0xc4, 0xcb, 0x13, 0x03, 0xa2,
+ 0x3a, 0x56, 0xe4, 0x3e, 0x07, 0x8b, 0x13, 0x07, 0xa1, 0x97, 0x6e, 0x81,
+ 0x50, 0x42, 0x4b, 0xac, 0x81, 0x0c, 0xe8, 0xe1, 0x21, 0x05, 0x88, 0xb1,
+ 0xb1, 0xc6, 0xaa, 0x1d, 0x66, 0x1f, 0x52, 0xa3, 0x9a, 0x86, 0x34, 0xd0,
+ 0x24, 0xd3, 0x5a, 0x5c, 0xd9, 0x45, 0xc5, 0x4f, 0xb4, 0x3d, 0xec, 0xad,
+ 0x69, 0x27, 0x37, 0xa7, 0xd7, 0x53, 0xdd, 0x32, 0xef, 0x75, 0x57, 0x57,
+ 0x0e, 0x2e, 0x92, 0xce, 0x61, 0x72, 0xbc, 0x17, 0xd2, 0x7b, 0xef, 0xac,
+ 0x7b, 0x7e, 0xd9, 0xc5, 0xa8, 0x63, 0x5c, 0xd9, 0xdb, 0x61, 0xfa, 0xa1,
+ 0x98, 0x9c, 0x38, 0xd7, 0xdf, 0x72, 0x14, 0x37, 0xcd, 0xcc, 0xad, 0x6c,
+ 0x6f, 0x01, 0xb2, 0x7f, 0x00, 0xdc, 0x52, 0x6b, 0xe9, 0x88, 0x10, 0x20,
+ 0x96, 0xd4, 0x0a, 0xa9, 0xcd, 0x7a, 0x0b, 0x14, 0xa2, 0xb4, 0xaf, 0xd4,
+ 0x80, 0x01, 0x75, 0xc8, 0x13, 0xeb, 0xa9, 0xc3, 0x46, 0xa3, 0xc9, 0x4b,
+ 0xb6, 0x4e, 0x9a, 0x33, 0x6c, 0x98, 0xf6, 0xd1, 0xb2, 0x9f, 0x3a, 0x9f,
+ 0x58, 0xac, 0x41, 0x73, 0xfa, 0x41, 0xf5, 0xab, 0xd9, 0x83, 0xa1, 0x4a,
+ 0x73, 0xc8, 0xdf, 0xa1, 0xd9, 0x62, 0xf2, 0x44, 0xef, 0x19, 0xf7, 0x87,
+ 0x45, 0x09, 0xad, 0x61, 0x00, 0xd5, 0xe3, 0x04, 0x42, 0x25, 0x27, 0x40,
+ 0x0a, 0x38, 0x51, 0xa6, 0xf9, 0xc1, 0x5c, 0xf1, 0x03, 0xe5, 0x72, 0x25,
+ 0x81, 0x50, 0x08, 0xe3, 0x58, 0xf4, 0x9e, 0x9b, 0xe2, 0x83, 0x9c, 0x81,
+ 0x83, 0x82, 0xe3, 0x37, 0xb0, 0xa7, 0x4a, 0x11, 0xaa, 0x21, 0x81, 0x29,
+ 0xa0, 0xe7, 0xd9, 0x2d, 0xae, 0x6f, 0x6b, 0x5a, 0xa3, 0xf6, 0x5e, 0x7b,
+ 0xb7, 0xbd, 0x6b, 0x66, 0x87, 0x22, 0x0a, 0xb1, 0x61, 0xb5, 0xa5, 0xa2,
+ 0x93, 0x6b, 0x06, 0x7a, 0x2b, 0x76, 0x80, 0xa6, 0x5d, 0x5c, 0x52, 0x7d,
+ 0xc2, 0xe7, 0x30, 0x1e, 0x19, 0x8c, 0xf3, 0xf7, 0x59, 0xff, 0x3d, 0x69,
+ 0x22, 0x54, 0x13, 0xce, 0xed, 0x33, 0xa5, 0x1a, 0x7b, 0x41, 0x84, 0xd6,
+ 0x3c, 0x82, 0xb6, 0x28, 0xb3, 0x6b, 0xd9, 0x00, 0x03, 0xef, 0x18, 0x67,
+ 0x8f, 0x31, 0x23, 0x10, 0x07, 0xe0, 0xdd, 0x80, 0xe9, 0xe5, 0x03, 0x5b,
+ 0x29, 0xb0, 0xee, 0x1b, 0x5c, 0x05, 0x5b, 0x0e, 0x34, 0x36, 0xce, 0x40,
+ 0x3f, 0x85, 0x4a, 0x3d, 0xa6, 0x33, 0xb2, 0xf9, 0xe2, 0xd4, 0xeb, 0xb1,
+ 0x48, 0x7f, 0xfe, 0x72, 0x59, 0xa0, 0x47, 0xcc, 0xe5, 0x11, 0x73, 0x9a,
+ 0x5a, 0x9f, 0x01, 0x44, 0xfa, 0xf1, 0x34, 0x59, 0xcb, 0xee, 0x98, 0x54,
+ 0x4b, 0x89, 0x86, 0x1a, 0x42, 0x39, 0x3e, 0x18, 0x76, 0xaa, 0x6d, 0xa1,
+ 0xe8, 0x5f, 0x1f, 0x63, 0x9d, 0xcc, 0x69, 0x91, 0x58, 0xe3, 0x62, 0x9d,
+ 0x0a, 0x4f, 0x9a, 0x2a, 0x06, 0x2b, 0xf8, 0x7c, 0xb0, 0xe5, 0x6c, 0x0e,
+ 0xb6, 0x6e, 0x80, 0x8a, 0x3d, 0xa1, 0x45, 0xf7, 0xa6, 0x43, 0x19, 0x85,
+ 0x88, 0xb5, 0x80, 0x19, 0xf1, 0x43, 0x3e, 0x00, 0x76, 0x38, 0xca, 0x28,
+ 0xc2, 0x0d, 0xe2, 0x79, 0xc1, 0x16, 0x72, 0x9b, 0x8e, 0xf2, 0xe1, 0x13,
+ 0x85, 0xf7, 0x0a, 0x2f, 0x5b, 0x47, 0x0f, 0x8a, 0xec, 0x73, 0xda, 0xab,
+ 0xe0, 0x8b, 0x01, 0x64, 0x69, 0xe0, 0xfe, 0x2a, 0x2a, 0x87, 0x54, 0x7f,
+ 0xb8, 0x4c, 0xde, 0x1a, 0x6c, 0x13, 0x8f, 0x01, 0xdc, 0x55, 0x7e, 0x67,
+ 0x88, 0x41, 0x52, 0x18, 0x70, 0x7f, 0x75, 0x85, 0x99, 0x91, 0xe2, 0x20,
+ 0xc8, 0x3e, 0xa8, 0xfd, 0xb2, 0x48, 0x00, 0x55, 0xd7, 0xfa, 0x04, 0xce,
+ 0x54, 0xfe, 0x00, 0xdb, 0xf8, 0x4a, 0x47, 0x69, 0x91, 0x6d, 0x93, 0xe2,
+ 0xde, 0xb2, 0x76, 0x42, 0xf0, 0x19, 0x46, 0xf4, 0x63, 0x75, 0xda, 0x58,
+ 0x6f, 0x13, 0xf1, 0xe7, 0x49, 0x06, 0x39, 0x0a, 0x05, 0x6c, 0xd1, 0x75,
+ 0xb6, 0x91, 0xca, 0x61, 0xbd, 0xa1, 0x73, 0x25, 0xd2, 0xc0, 0x56, 0x22,
+ 0xec, 0xd9, 0xad, 0x38, 0x19, 0x5f, 0x6b, 0x7a, 0x09, 0x11, 0xd8, 0xf4,
+ 0x17, 0x22, 0x7c, 0xc1, 0xa4, 0x4c, 0x04, 0x04, 0x5e, 0x17, 0x5c, 0xe2,
+ 0xd8, 0x02, 0x29, 0x8b, 0x36, 0x45, 0x9f, 0x61, 0xed, 0x3b, 0x33, 0x8e,
+ 0x1c, 0xdc, 0x9c, 0x70, 0x44, 0x99, 0x33, 0xd1, 0xc8, 0xff, 0xe0, 0x1b,
+ 0xcf, 0x06, 0xb1, 0x3d, 0x66, 0x9a, 0x85, 0x00, 0x4a, 0xf0, 0x94, 0xc6,
+ 0x33, 0xba, 0x90, 0x63, 0x35, 0x2b, 0x14, 0xeb, 0x9f, 0xa2, 0x29, 0x79,
+ 0x70, 0xcd, 0x48, 0xcb, 0x62, 0xcc, 0x83, 0xc6, 0xd1, 0x43, 0x8f, 0x5a,
+ 0x37, 0x98, 0x19, 0x05, 0x4c, 0x9a, 0xb9, 0x42, 0xcc, 0xe0, 0x6b, 0xf8,
+ 0x06, 0x38, 0xc4, 0x31, 0xc6, 0x59, 0xcc, 0x6c, 0xb5, 0x76, 0x53, 0x62,
+ 0x4b, 0x90, 0x3c, 0x92, 0x52, 0x81, 0x76, 0x74, 0xf7, 0x23, 0xa1, 0x41,
+ 0xe5, 0x17, 0x50, 0x24, 0x20, 0x86, 0x64, 0x5a, 0xf4, 0x21, 0x9e, 0x8f,
+ 0xb6, 0x25, 0xd0, 0xc1, 0x6c, 0x2c, 0xfd, 0x6a, 0x27, 0x11, 0x48, 0x55,
+ 0xa8, 0x48, 0x46, 0x2c, 0x86, 0xce, 0x78, 0xdb, 0x0f, 0x0a, 0x1d, 0x22,
+ 0x4e, 0x86, 0x48, 0xd9, 0x6c, 0xd8, 0xdb, 0x3e, 0xe0, 0x13, 0x59, 0xd9,
+ 0xe6, 0x9e, 0x74, 0xf2, 0x09, 0x32, 0x12, 0x9f, 0x1b, 0x80, 0xcf, 0x95,
+ 0x7d, 0x56, 0x60, 0x3e, 0x07, 0x9f, 0x29, 0xd4, 0x0b, 0x23, 0xee, 0xe8,
+ 0xec, 0x2c, 0x55, 0x7b, 0x64, 0x37, 0xb2, 0x7a, 0xe4, 0x88, 0x2c, 0xb1,
+ 0x33, 0x87, 0x98, 0xf9, 0x34, 0x25, 0xce, 0x68, 0x16, 0x6d, 0x32, 0x2c,
+ 0x52, 0x90, 0x28, 0x67, 0x25, 0xec, 0x29, 0x33, 0x85, 0x48, 0xcf, 0x2d,
+ 0x14, 0x8d, 0x06, 0xa8, 0xd8, 0x71, 0x7c, 0x44, 0x9a, 0x0f, 0xad, 0x6b,
+ 0x8c, 0x69, 0x56, 0x68, 0xaf, 0x6a, 0xf8, 0x39, 0x7d, 0x23, 0x51, 0x8e,
+ 0x8e, 0xdc, 0x3d, 0x6a, 0x9d, 0x6b, 0x44, 0x47, 0xfe, 0x0f, 0xbb, 0xc3,
+ 0xfc, 0x8a, 0x7a, 0xdd, 0xa4, 0x78, 0x98, 0x70, 0x24, 0xa7, 0x35, 0x53,
+ 0xdf, 0x80, 0x71, 0xfd, 0x43, 0xc1, 0x27, 0x79, 0x09, 0xa1, 0xd6, 0xe0,
+ 0x22, 0x46, 0xbb, 0xa2, 0x51, 0xa2, 0x67, 0xd3, 0x7c, 0x9c, 0x39, 0xa7,
+ 0x2a, 0x3a, 0x40, 0x50, 0x37, 0xb9, 0x79, 0xc2, 0x10, 0x13, 0x39, 0x44,
+ 0x29, 0xbb, 0x08, 0x98, 0x84, 0x54, 0x91, 0x13, 0xa7, 0x92, 0x75, 0x1f,
+ 0xb9, 0x7e, 0x8a, 0xdd, 0xd2, 0x31, 0x9a, 0x97, 0xf9, 0x7b, 0x32, 0xb0,
+ 0x61, 0x60, 0x93, 0x25, 0x5f, 0x22, 0xb5, 0xe6, 0x5c, 0x16, 0x4e, 0x27,
+ 0x14, 0xac, 0x31, 0xac, 0x2d, 0x1e, 0xb0, 0xd8, 0x50, 0x71, 0x3b, 0x7d,
+ 0x44, 0x98, 0xe4, 0xfb, 0x74, 0x7c, 0xe7, 0x05, 0xf0, 0xaf, 0x95, 0xaa,
+ 0x2f, 0xe8, 0x16, 0x09, 0xf4, 0x0b, 0x10, 0x8f, 0xb0, 0x8e, 0x25, 0xee,
+ 0xbd, 0x3a, 0x66, 0xd7, 0x4e, 0x2e, 0xc5, 0x0d, 0x53, 0x10, 0x6f, 0x8f,
+ 0x9c, 0x1e, 0x3c, 0x83, 0x25, 0x27, 0xcf, 0xa0, 0x39, 0xb8, 0x6f, 0xba,
+ 0x65, 0xe4, 0x3e, 0xf4, 0x82, 0xa2, 0x20, 0xce, 0x27, 0x7a, 0x7f, 0x66,
+ 0x9e, 0x7e, 0x12, 0xb6, 0x60, 0x3d, 0x54, 0x02, 0xee, 0x8b, 0x5f, 0x72,
+ 0x5d, 0x00, 0x59, 0x0c, 0x94, 0xe4, 0xc3, 0x52, 0xc7, 0xbf, 0x1c, 0x99,
+ 0x95, 0xa2, 0xb3, 0x9e, 0xe5, 0x1f, 0x86, 0x3a, 0xdf, 0xf6, 0xff, 0x76,
+ 0x92, 0x83, 0x4f, 0x38, 0xcf, 0x6c, 0xe6, 0xe6, 0x5b, 0x3c, 0x94, 0x29,
+ 0x35, 0x65, 0x69, 0x3f, 0xc0, 0x35, 0x46, 0xac, 0xf5, 0x21, 0x61, 0xc7,
+ 0xca, 0x22, 0xe8, 0xd9, 0x2a, 0x60, 0xcc, 0x9c, 0x6b, 0x51, 0xf5, 0x97,
+ 0x84, 0xfe, 0x00, 0xcb, 0x0d, 0xd5, 0x24, 0x60, 0x92, 0x8b, 0x15, 0xac,
+ 0x21, 0xc1, 0x50, 0xa2, 0x91, 0xe8, 0x3c, 0x33, 0x57, 0xc7, 0xd9, 0x14,
+ 0x28, 0x23, 0x11, 0x1e, 0x55, 0x42, 0xc9, 0xa4, 0x0c, 0xb4, 0x11, 0xaa,
+ 0x10, 0xbd, 0xba, 0xb2, 0x8c, 0xc7, 0xa8, 0xc9, 0x9a, 0xd0, 0x44, 0x6a,
+ 0x9e, 0x3d, 0xd0, 0xdc, 0xa8, 0x70, 0x59, 0x0c, 0x7a, 0x99, 0x80, 0x34,
+ 0x4b, 0xc1, 0x74, 0xd0, 0x9e, 0x21, 0xbe, 0x01, 0x92, 0x32, 0x98, 0xf9,
+ 0x87, 0xe6, 0x54, 0x94, 0x2c, 0xaa, 0x9b, 0x4c, 0xe5, 0xe6, 0xa4, 0xa5,
+ 0x55, 0xf7, 0xa0, 0xa5, 0xfb, 0xfc, 0xce, 0x6c, 0xcd, 0x16, 0xb2, 0xd2,
+ 0xd5, 0x15, 0xe9, 0xb7, 0xb2, 0x47, 0x0f, 0xa1, 0x10, 0x25, 0x95, 0x37,
+ 0x8c, 0xb8, 0x38, 0x8c, 0x00, 0x0c, 0xad, 0xe5, 0x7d, 0x08, 0x55, 0x68,
+ 0x26, 0x66, 0x88, 0x70, 0x03, 0xf6, 0x8e, 0xc2, 0x78, 0xb4, 0xfb, 0x5c,
+ 0x2a, 0x69, 0x6d, 0x62, 0x78, 0x09, 0xf8, 0x1f, 0x0d, 0x9b, 0x23, 0x56,
+ 0x23, 0xf2, 0x0e, 0x65, 0x5e, 0x73, 0xcc, 0x10, 0x45, 0x3c, 0x1a, 0xaa,
+ 0xd9, 0x74, 0x9e, 0x0c, 0x92, 0xa2, 0xe8, 0x27, 0xd4, 0xde, 0xfa, 0x38,
+ 0x81, 0xea, 0x8e, 0xe4, 0xd5, 0xe5, 0xab, 0x1e, 0x86, 0x2e, 0xd0, 0xc2,
+ 0x98, 0x31, 0x19, 0xd1, 0x28, 0xe3, 0x4c, 0x28, 0x33, 0x30, 0xd8, 0x0f,
+ 0x46, 0x5c, 0xc1, 0x84, 0x4c, 0xe7, 0x77, 0xc5, 0x3d, 0x60, 0xc4, 0x09,
+ 0x5e, 0x1a, 0xf3, 0x05, 0x8f, 0x21, 0x8a, 0x7e, 0x53, 0x5e, 0x54, 0xdf,
+ 0xeb, 0x01, 0x29, 0x09, 0x12, 0xfa, 0x3a, 0x1a, 0x61, 0xe5, 0x85, 0x0a,
+ 0x6b, 0xad, 0xa4, 0x60, 0x5f, 0xde, 0x3a, 0x57, 0x8f, 0x10, 0x20, 0x2a,
+ 0x25, 0x40, 0x54, 0x4d, 0xeb, 0x99, 0x68, 0x39, 0xab, 0x26, 0x27, 0x9d,
+ 0x44, 0x38, 0x52, 0x20, 0xf3, 0xe0, 0x71, 0xf7, 0xf6, 0xd2, 0x9d, 0x37,
+ 0x78, 0x3a, 0x96, 0x98, 0x88, 0x6a, 0xb5, 0x81, 0x8d, 0xa4, 0x22, 0x31,
+ 0x57, 0x19, 0x7b, 0x3b, 0xd6, 0xf2, 0xe7, 0x0a, 0x5e, 0x38, 0x44, 0x2c,
+ 0xf6, 0xc3, 0x3d, 0x5b, 0x47, 0xa6, 0x03, 0x5a, 0x37, 0x1e, 0x12, 0xf7,
+ 0xd9, 0x4c, 0x60, 0xea, 0x69, 0x5b, 0xd5, 0xee, 0x17, 0x95, 0xbf, 0x41,
+ 0x01, 0x28, 0xb0, 0x08, 0x90, 0x4a, 0x58, 0x59, 0x81, 0x48, 0x74, 0x29,
+ 0xa5, 0x30, 0xa8, 0xa1, 0x2d, 0x58, 0x1f, 0xde, 0x08, 0x12, 0x6f, 0x9e,
+ 0x3a, 0x2a, 0xc3, 0x9d, 0xc4, 0x44, 0x4a, 0x71, 0x32, 0xc4, 0xc7, 0x89,
+ 0x46, 0x61, 0x62, 0x0d, 0xdf, 0x17, 0xda, 0x74, 0x71, 0xee, 0x05, 0x91,
+ 0x9d, 0x6b, 0xc6, 0x2e, 0x48, 0xe9, 0xaf, 0x88, 0x52, 0xbc, 0x68, 0xaf,
+ 0x9f, 0x90, 0x8d, 0xe2, 0x93, 0x66, 0x0b, 0x4b, 0xe6, 0x45, 0xa6, 0x2b,
+ 0x12, 0xbc, 0xfe, 0xfc, 0x59, 0x08, 0xf6, 0x23, 0x99, 0x3d, 0xc6, 0x0b,
+ 0xe9, 0xb9, 0xa5, 0xe9, 0xd9, 0xd0, 0x6e, 0x94, 0x64, 0x23, 0x5a, 0x5e,
+ 0x84, 0x66, 0x93, 0x67, 0xd2, 0x11, 0x55, 0x37, 0x98, 0x4b, 0x48, 0xd1,
+ 0xd8, 0xe4, 0x07, 0x4d, 0x39, 0xd7, 0x68, 0x29, 0xe2, 0xe4, 0x24, 0xf0,
+ 0x7f, 0x52, 0x34, 0x84, 0x94, 0x3f, 0xb8, 0xb1, 0x87, 0x98, 0x70, 0x57,
+ 0xe2, 0xb6, 0x36, 0x79, 0x0d, 0x7b, 0x72, 0x82, 0xb2, 0xa7, 0xe6, 0xa5,
+ 0xf6, 0xa4, 0x52, 0xfc, 0x4c, 0xe8, 0x0c, 0x87, 0x14, 0x4c, 0x37, 0xce,
+ 0x1b, 0x23, 0x57, 0xb0, 0xc5, 0xc9, 0x72, 0x25, 0x8e, 0x0a, 0x66, 0x9e,
+ 0x6f, 0x0d, 0x55, 0x50, 0xfb, 0x0b, 0x45, 0x9a, 0x72, 0x06, 0x59, 0x5e,
+ 0xd9, 0x20, 0x63, 0xbb, 0x18, 0x0e, 0xa6, 0x72, 0xb4, 0x2f, 0x13, 0xf0,
+ 0x04, 0xdb, 0xfd, 0x51, 0x85, 0x3b, 0xfd, 0xb2, 0xdb, 0x45, 0x1a, 0x82,
+ 0x0a, 0xde, 0x40, 0xc2, 0x3f, 0x00, 0x06, 0x47, 0x25, 0x6d, 0x55, 0x74,
+ 0x46, 0x96, 0xb2, 0x52, 0x0c, 0x60, 0x80, 0x38, 0x9c, 0x81, 0x8c, 0xd4,
+ 0x30, 0x71, 0x8e, 0xb8, 0x7b, 0x98, 0xdd, 0xc8, 0xb0, 0xe1, 0xa8, 0x86,
+ 0x01, 0x99, 0x97, 0xac, 0xae, 0x54, 0xde, 0x92, 0xac, 0xff, 0xf2, 0xc3,
+ 0x86, 0x39, 0x80, 0x7f, 0xe0, 0xe7, 0xd3, 0x21, 0x4d, 0x40, 0xe5, 0x7d,
+ 0x56, 0x72, 0x17, 0x25, 0x3b, 0x87, 0x8d, 0x02, 0x81, 0x2f, 0x4f, 0xa4,
+ 0x35, 0xc0, 0x7e, 0x33, 0xcd, 0x88, 0x6a, 0xfd, 0xa1, 0x90, 0xe8, 0x3f,
+ 0x2c, 0x88, 0xc0, 0x8d, 0x93, 0xdb, 0x84, 0x4b, 0xdc, 0x63, 0xb7, 0x31,
+ 0x5d, 0x64, 0x22, 0x8f, 0xd9, 0x5c, 0x41, 0xec, 0xe8, 0x0f, 0xb0, 0x5c,
+ 0xe2, 0xac, 0x32, 0xbc, 0x52, 0x28, 0x8b, 0x6e, 0x3e, 0xfd, 0x16, 0x2c,
+ 0x32, 0xa7, 0x7f, 0x37, 0x9d, 0x3b, 0x2b, 0xca, 0xf4, 0xfd, 0xb7, 0x9b,
+ 0xf8, 0xfd, 0xdb, 0xf4, 0xd6, 0x1c, 0x11, 0x39, 0xf6, 0xfa, 0xf4, 0x6a,
+ 0x66, 0x04, 0x1f, 0x7d, 0xe1, 0x5b, 0x60, 0xcc, 0xa0, 0x4d, 0xe4, 0x93,
+ 0x6f, 0x37, 0xf1, 0x33, 0xac, 0x19, 0x37, 0x58, 0x69, 0xda, 0xd5, 0x34,
+ 0x96, 0xc6, 0xf1, 0x11, 0x2a, 0x42, 0x0f, 0xe9, 0xf3, 0x2f, 0xcd, 0x12,
+ 0x71, 0x3b, 0xb5, 0xad, 0x48, 0xc5, 0x95, 0x58, 0xff, 0x5c, 0xb5, 0x14,
+ 0x9c, 0x8c, 0xd7, 0xd9, 0x14, 0xb3, 0x06, 0xfd, 0x3e, 0x9b, 0x06, 0xf1,
+ 0x0d, 0x30, 0x27, 0xdd, 0xa2, 0x45, 0x35, 0x59, 0x16, 0xbd, 0xf5, 0xef,
+ 0x99, 0x61, 0x4c, 0x6f, 0xd3, 0x62, 0x98, 0xc7, 0xde, 0x6b, 0x8b, 0xb0,
+ 0xc4, 0x66, 0x07, 0xa3, 0x8e, 0x96, 0x7e, 0x51, 0xb7, 0x0d, 0x65, 0x2e,
+ 0xaf, 0xcc, 0xde, 0x30, 0xd7, 0xee, 0x5a, 0xaf, 0xfa, 0xff, 0x63, 0x96,
+ 0x65, 0xe3, 0xd8, 0x4b, 0x7f, 0x6a, 0xa3, 0xfd, 0x7c, 0x08, 0xa8, 0x28,
+ 0x7f, 0x7a, 0x7c, 0xe7, 0x29, 0xd4, 0xce, 0x1e, 0x8f, 0x8d, 0x94, 0x11,
+ 0x9d, 0xd9, 0x5f, 0xc0, 0x09, 0x59, 0x1d, 0x1b, 0x6c, 0xb5, 0x97, 0x79,
+ 0x0a, 0x09, 0xef, 0x8b, 0xd7, 0xff, 0x6d, 0x6a, 0xb8, 0x4c, 0xd2, 0x81,
+ 0x72, 0xde, 0x46, 0x86, 0xcd, 0xc7, 0x35, 0x2b, 0xd8, 0xcf, 0x86, 0xc1,
+ 0xab, 0xea, 0x1a, 0xbc, 0x9a, 0x1a, 0xa6, 0x96, 0x9c, 0x67, 0xef, 0x8a,
+ 0x32, 0x8b, 0x35, 0x76, 0xf9, 0xfa, 0xea, 0xcd, 0x92, 0x4d, 0xf9, 0xc5,
+ 0x7b, 0x62, 0x8d, 0xfd, 0xf8, 0x76, 0xc9, 0xa6, 0x7a, 0xc3, 0xdc, 0xec,
+ 0xeb, 0x7f, 0xcb, 0xe1, 0x52, 0xb4, 0x57, 0x57, 0x6f, 0x7e, 0xe8, 0xbd,
+ 0x5e, 0xb6, 0x31, 0xd3, 0xad, 0x57, 0xe9, 0x30, 0xde, 0x52, 0x67, 0x72,
+ 0x53, 0x4c, 0x80, 0xe6, 0x97, 0x6c, 0xec, 0xba, 0x18, 0x99, 0xc6, 0xcc,
+ 0xbe, 0x37, 0xe7, 0x4c, 0xac, 0xbd, 0xd7, 0xdd, 0xab, 0xce, 0x92, 0x4d,
+ 0xbd, 0x32, 0x3c, 0xc7, 0xe8, 0xfb, 0xa6, 0x6b, 0xc5, 0x38, 0x8b, 0x35,
+ 0xa6, 0x25, 0xf6, 0x2b, 0xb3, 0x33, 0xfe, 0xc7, 0x0c, 0x2a, 0xb8, 0xfe,
+ 0x30, 0xc9, 0x6f, 0x57, 0x57, 0xae, 0x3a, 0xcd, 0xe4, 0xd5, 0xec, 0xf7,
+ 0x51, 0x81, 0xbb, 0xf4, 0xe7, 0xac, 0x90, 0x02, 0x71, 0xcb, 0xbd, 0x5c,
+ 0x37, 0xfd, 0xea, 0xa7, 0x77, 0x9d, 0xeb, 0x8e, 0xe9, 0xc7, 0x7b, 0x73,
+ 0xce, 0x25, 0xeb, 0x17, 0x9d, 0x57, 0x97, 0x2f, 0xff, 0x99, 0xfc, 0x00,
+ 0x09, 0x11, 0x1b, 0xb1, 0x21, 0x5e, 0xcc, 0xfe, 0x33, 0x37, 0x7c, 0xdb,
+ 0x48, 0xda, 0x1f, 0xbd, 0xf2, 0x59, 0xcf, 0xea, 0x80, 0x61, 0x92, 0xe6,
+ 0x2c, 0x7d, 0x6d, 0x94, 0xa7, 0xe8, 0xaa, 0x0c, 0x8a, 0x9b, 0x6c, 0xc9,
+ 0x86, 0xcc, 0x96, 0x1b, 0x1a, 0x01, 0x2b, 0x79, 0xb3, 0x06, 0x9b, 0x2f,
+ 0x1b, 0x0e, 0x63, 0x0d, 0xfe, 0x0c, 0x90, 0x16, 0xd3, 0x69, 0x95, 0x8d,
+ 0xd5, 0x6e, 0x34, 0x94, 0xf6, 0xae, 0xee, 0xa1, 0xe4, 0x68, 0x94, 0x8d,
+ 0xf3, 0x7a, 0x2c, 0x3d, 0xda, 0xfb, 0x71, 0x72, 0x9d, 0x1b, 0xc5, 0x3a,
+ 0xd6, 0xd8, 0xb9, 0x91, 0xae, 0xcd, 0x01, 0x00, 0xbd, 0xaf, 0x6f, 0x6f,
+ 0x53, 0x1d, 0x37, 0xcb, 0x1c, 0xe9, 0xfd, 0x62, 0x92, 0xc1, 0x99, 0x1e,
+ 0x78, 0x3f, 0xbc, 0xe3, 0xbd, 0x0b, 0x51, 0xb7, 0x91, 0xb3, 0xdd, 0x2a,
+ 0xe3, 0x52, 0x26, 0x30, 0x7e, 0x02, 0x7b, 0x27, 0xbe, 0x3b, 0xd4, 0x6d,
+ 0xd3, 0xab, 0x2b, 0xb1, 0x93, 0x1d, 0x9a, 0x57, 0xe6, 0x6e, 0x7c, 0xe8,
+ 0x07, 0x31, 0x22, 0x62, 0xda, 0x3e, 0x08, 0x5d, 0x4a, 0x5c, 0xe0, 0x97,
+ 0x43, 0x39, 0x63, 0xea, 0x0d, 0xe4, 0xcd, 0x2e, 0x3a, 0x84, 0x97, 0xe1,
+ 0x94, 0x71, 0xaa, 0x98, 0xc7, 0xe0, 0x73, 0x43, 0xb4, 0x9d, 0x19, 0x58,
+ 0xce, 0xa3, 0x64, 0x5b, 0xbe, 0x4f, 0xfe, 0x9e, 0x19, 0x86, 0xba, 0xec,
+ 0x26, 0xc0, 0x83, 0xb8, 0x00, 0x86, 0x29, 0xcd, 0xd5, 0xdd, 0x69, 0x24,
+ 0x64, 0x23, 0x57, 0x9e, 0x4d, 0x8a, 0xc7, 0xf1, 0x73, 0x4e, 0xcf, 0xcf,
+ 0x7c, 0x56, 0x5d, 0x4d, 0xcd, 0x35, 0x38, 0x89, 0x8d, 0xf8, 0xdb, 0x9f,
+ 0x2e, 0x3c, 0xf0, 0x81, 0xe8, 0xbb, 0xc5, 0x63, 0x1a, 0xed, 0xf2, 0xbb,
+ 0x6c, 0x86, 0xf6, 0xfd, 0x97, 0x08, 0x6a, 0x30, 0x58, 0x7a, 0x67, 0x62,
+ 0xab, 0xbd, 0x0f, 0x83, 0x6c, 0x54, 0x44, 0xdb, 0x35, 0xc4, 0x77, 0x55,
+ 0x0c, 0x67, 0x24, 0x3a, 0x1b, 0x2a, 0x7c, 0x28, 0x04, 0x94, 0x64, 0xd9,
+ 0xad, 0x6f, 0x28, 0x07, 0x08, 0xb6, 0x2c, 0x8b, 0xda, 0x13, 0x63, 0x5a,
+ 0x3d, 0x31, 0x48, 0x8c, 0x2b, 0x5a, 0x4b, 0x4a, 0x72, 0x9d, 0xc9, 0x38,
+ 0x9d, 0x0d, 0x8c, 0xb8, 0x66, 0x8e, 0x4c, 0xa8, 0x9e, 0x15, 0x39, 0xe4,
+ 0xce, 0x5e, 0xfd, 0xb9, 0x57, 0xcc, 0x3d, 0xf8, 0x8c, 0x1c, 0xca, 0x85,
+ 0xef, 0x62, 0x6c, 0x5b, 0x04, 0xa0, 0x2b, 0x62, 0x03, 0x3d, 0xde, 0x78,
+ 0xbd, 0xe5, 0x04, 0xbd, 0x62, 0x9c, 0x62, 0x06, 0x8b, 0xd1, 0x19, 0xcb,
+ 0xfb, 0xcf, 0x41, 0xae, 0xcf, 0x3d, 0xa2, 0x2a, 0x53, 0x37, 0x67, 0x96,
+ 0x50, 0xb1, 0x7d, 0x9d, 0x65, 0x83, 0x21, 0x64, 0x91, 0xd4, 0xb1, 0x67,
+ 0xa8, 0x12, 0x9e, 0xa5, 0x93, 0xfe, 0x7d, 0xd2, 0x31, 0x74, 0xd1, 0x07,
+ 0x1b, 0x79, 0xb9, 0xf4, 0x2b, 0x8c, 0x64, 0x94, 0x0f, 0x92, 0x37, 0x13,
+ 0x50, 0x7d, 0x07, 0xb1, 0x37, 0x18, 0xb1, 0xbe, 0x6f, 0x94, 0xe2, 0xf7,
+ 0xb0, 0x54, 0x4b, 0x4d, 0xc8, 0xcb, 0xec, 0x11, 0x0e, 0x27, 0xb3, 0x81,
+ 0xc7, 0x71, 0x29, 0xe4, 0xdd, 0x92, 0x0d, 0xbd, 0xcb, 0xb1, 0x53, 0xc9,
+ 0x75, 0x71, 0x13, 0xe7, 0x69, 0x3f, 0x8d, 0x73, 0xb4, 0xd7, 0x4f, 0xd1,
+ 0xec, 0x6c, 0x08, 0x60, 0x7c, 0x33, 0x9b, 0xdc, 0xdd, 0x3f, 0x63, 0xec,
+ 0xc8, 0x34, 0x7f, 0xce, 0x8c, 0xc2, 0x5a, 0x33, 0xfa, 0x2a, 0xb3, 0x99,
+ 0xc7, 0xb6, 0x7e, 0xce, 0xc7, 0xd3, 0x58, 0x2b, 0x2f, 0xb3, 0x8f, 0xe6,
+ 0xc0, 0x58, 0xb2, 0xa1, 0xd7, 0x20, 0xb5, 0x8c, 0x93, 0x5f, 0xd2, 0x61,
+ 0x9c, 0x40, 0x17, 0xee, 0x8e, 0xba, 0x86, 0x2f, 0x26, 0xe9, 0xf8, 0xff,
+ 0x5b, 0x98, 0x93, 0x92, 0x2b, 0x6b, 0x47, 0x39, 0x88, 0x39, 0xb0, 0x92,
+ 0x6b, 0x29, 0x36, 0x9a, 0x67, 0x35, 0x7b, 0xaf, 0x87, 0x56, 0x37, 0xc3,
+ 0x1f, 0xcb, 0xe9, 0x92, 0x1b, 0xef, 0xdf, 0x8a, 0xf1, 0xdd, 0x53, 0x9e,
+ 0xfc, 0xcf, 0xfb, 0x22, 0xfa, 0xde, 0x37, 0x86, 0xc4, 0x86, 0xd9, 0x9f,
+ 0x97, 0x30, 0x22, 0x02, 0xc5, 0x5b, 0x04, 0x1e, 0x41, 0x1e, 0x01, 0x5e,
+ 0xbb, 0x2a, 0xc2, 0x55, 0xc0, 0x48, 0x40, 0x72, 0x90, 0x10, 0x2b, 0xb6,
+ 0xb8, 0xa0, 0x91, 0x72, 0x9e, 0x49, 0x12, 0xcc, 0x91, 0x9b, 0x5b, 0x07,
+ 0x60, 0x34, 0x01, 0x31, 0xa4, 0xf5, 0x61, 0x67, 0xbb, 0x3d, 0x98, 0x9a,
+ 0x4e, 0x98, 0x1f, 0xe1, 0xc2, 0xea, 0xca, 0xf9, 0xf5, 0x39, 0x59, 0x26,
+ 0x25, 0xc5, 0x19, 0x3c, 0x61, 0xcf, 0x6e, 0x97, 0x92, 0xe0, 0xb0, 0x79,
+ 0xa8, 0x6e, 0x7b, 0xea, 0x19, 0x7c, 0xc4, 0xf2, 0x69, 0xad, 0xfe, 0x2c,
+ 0xd0, 0xfc, 0x78, 0x6d, 0x64, 0x1e, 0x76, 0x6c, 0x95, 0x28, 0xa0, 0x08,
+ 0x18, 0x8b, 0x35, 0xba, 0x51, 0xe1, 0x46, 0x25, 0xd2, 0xd0, 0x98, 0xe7,
+ 0x27, 0x0c, 0x07, 0x9d, 0x6b, 0x7f, 0x2c, 0x87, 0x8d, 0x53, 0xf5, 0x45,
+ 0xaa, 0x62, 0x2e, 0x3d, 0x4a, 0x58, 0x3c, 0xd7, 0x92, 0xfe, 0xc6, 0x4d,
+ 0xb1, 0xa9, 0x7e, 0xd9, 0xf6, 0xa4, 0x6a, 0xec, 0x4e, 0x46, 0x2d, 0xfa,
+ 0xdf, 0x65, 0xba, 0xfe, 0x71, 0xf5, 0xf2, 0x3a, 0x29, 0xa7, 0x4f, 0xc3,
+ 0xac, 0xbc, 0xcf, 0xb2, 0x69, 0xd9, 0x4e, 0x70, 0xd6, 0xde, 0x9e, 0x5f,
+ 0xc8, 0xa4, 0xb1, 0x30, 0xa9, 0xa7, 0xac, 0x9e, 0x2a, 0xa6, 0x83, 0x9b,
+ 0xf6, 0x6c, 0xd6, 0x2e, 0xb3, 0xcd, 0xff, 0xc7, 0x7f, 0xa6, 0xe3, 0x4d,
+ 0xb3, 0x4c, 0xc3, 0x9d, 0x87, 0x12, 0x96, 0xcb, 0xf4, 0x80, 0xbf, 0xc9,
+ 0xab, 0x6f, 0xa9, 0xa2, 0x32, 0x99, 0x33, 0x52, 0x8a, 0x7b, 0x30, 0xc2,
+ 0xd4, 0x04, 0x5e, 0x06, 0x68, 0x08, 0x75, 0x79, 0x81, 0x9b, 0x37, 0x86,
+ 0x21, 0x03, 0xec, 0xac, 0x99, 0x1e, 0xf3, 0xfd, 0xff, 0x07, 0x16, 0xc3,
+ 0xc4, 0x74, 0xbe, 0x14, 0x03, 0x00
+};
+unsigned int t2_gz_len = 53802;
+unsigned int t2_gz_header_len = 18;
+unsigned char t2[] = {
+ 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, 0x69, 0x73, 0x6f, 0x2d, 0x38, 0x38,
+ 0x35, 0x39, 0x2d, 0x31, 0x22, 0x3f, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x44,
+ 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20,
+ 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57,
+ 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x53, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56, 0x32,
+ 0x2e, 0x31, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39, 0x39,
+ 0x38, 0x2f, 0x30, 0x36, 0x2f, 0x78, 0x6d, 0x6c, 0x73, 0x70, 0x65, 0x63,
+ 0x2d, 0x76, 0x32, 0x31, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x20, 0x5b, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x41, 0x72, 0x62, 0x6f, 0x72, 0x54, 0x65,
+ 0x78, 0x74, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x2c, 0x20, 0x31, 0x39,
+ 0x38, 0x38, 0x2d, 0x32, 0x30, 0x30, 0x30, 0x2c, 0x20, 0x76, 0x2e, 0x34,
+ 0x30, 0x30, 0x32, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54,
+ 0x52, 0x2f, 0x32, 0x30, 0x30, 0x30, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78,
+ 0x6d, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49,
+ 0x54, 0x59, 0x20, 0x64, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x6d, 0x6f, 0x6e,
+ 0x74, 0x68, 0x20, 0x22, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20,
+ 0x64, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x64, 0x61, 0x79, 0x20, 0x22, 0x36,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x69, 0x73, 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61,
+ 0x74, 0x65, 0x20, 0x22, 0x32, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x36,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x64, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x79, 0x65, 0x61, 0x72, 0x20,
+ 0x22, 0x32, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x4f, 0x66, 0x58, 0x4d, 0x4c, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20,
+ 0x70, 0x69, 0x6f, 0x20, 0x22, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x3f, 0x78,
+ 0x6d, 0x6c, 0x27, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x20, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65,
+ 0x20, 0x22, 0x31, 0x30, 0x20, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72,
+ 0x79, 0x20, 0x31, 0x39, 0x39, 0x38, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x77, 0x33, 0x63, 0x2e, 0x64,
+ 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65, 0x20, 0x22, 0x30, 0x32, 0x2d,
+ 0x46, 0x65, 0x62, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x57, 0x65, 0x62,
+ 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x22, 0x57, 0x65, 0x62, 0x53, 0x47, 0x4d,
+ 0x4c, 0x20, 0x41, 0x64, 0x61, 0x70, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x41, 0x6e, 0x6e, 0x65, 0x78, 0x20, 0x74, 0x6f, 0x20, 0x49,
+ 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x69, 0x63, 0x20,
+ 0x22, 0x27, 0x3f, 0x3e, 0x27, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x62, 0x72, 0x20, 0x22, 0x5c, 0x6e,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x22, 0x23,
+ 0x63, 0x30, 0x64, 0x39, 0x63, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x64, 0x61, 0x73, 0x68,
+ 0x20, 0x22, 0x2d, 0x2d, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x6f, 0x6d, 0x20, 0x22, 0x2d, 0x2d,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x63, 0x6f, 0x6d, 0x6f, 0x20, 0x22, 0x2d, 0x2d, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x6f,
+ 0x6d, 0x63, 0x20, 0x22, 0x2d, 0x2d, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x63, 0x72, 0x6f, 0x20,
+ 0x22, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x62, 0x73,
+ 0x70, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x61,
+ 0x67, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x22, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x61, 0x6d, 0x70, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x6c, 0x74,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x67, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x61, 0x70,
+ 0x6f, 0x73, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2c, 0x0d, 0x0a,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x71, 0x75, 0x6f, 0x74, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x6f, 0x63, 0x2e, 0x61, 0x75,
+ 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x70, 0x75, 0x62, 0x6c,
+ 0x69, 0x63, 0x20, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x6d, 0x61, 0x79, 0x20, 0x62,
+ 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x61, 0x73,
+ 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x0d, 0x0a, 0x61, 0x6c,
+ 0x6c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c,
+ 0x65, 0x67, 0x61, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73,
+ 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x61,
+ 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x5d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73,
+ 0x70, 0x65, 0x63, 0x20, 0x77, 0x33, 0x63, 0x2d, 0x64, 0x6f, 0x63, 0x74,
+ 0x79, 0x70, 0x65, 0x3d, 0x22, 0x72, 0x65, 0x63, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x2d, 0x2d, 0x0d, 0x0a, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x20,
+ 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x65,
+ 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3a, 0x0d, 0x0a, 0x0d, 0x0a, 0x2d, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65,
+ 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
+ 0x20, 0x44, 0x54, 0x44, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x56, 0x32, 0x2e, 0x31, 0x20, 0x6f, 0x66, 0x20, 0x58,
+ 0x4d, 0x4c, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x4d,
+ 0x6f, 0x76, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d,
+ 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x20, 0x74, 0x6f, 0x20,
+ 0x3c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20,
+ 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x22, 0x73, 0x65, 0x63, 0x6f,
+ 0x6e, 0x64, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20,
+ 0x77, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x20, 0x4d, 0x65,
+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x65, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x64, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
+ 0x3d, 0x22, 0x26, 0x63, 0x65, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x3b,
+ 0x22, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x3c, 0x74,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e,
+ 0x0d, 0x0a, 0x2d, 0x20, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2c, 0x20, 0x73, 0x6f,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61,
+ 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2c,
+ 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x20, 0x20, 0x74, 0x6f, 0x20, 0x57, 0x33, 0x43, 0x20, 0x67, 0x75, 0x69,
+ 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x20,
+ 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65,
+ 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x73, 0x20,
+ 0x69, 0x6e, 0x20, 0x62, 0x69, 0x62, 0x6c, 0x69, 0x6f, 0x67, 0x72, 0x61,
+ 0x70, 0x68, 0x79, 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x61, 0x74, 0x3e,
+ 0x20, 0x65, 0x74, 0x63, 0x2e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67,
+ 0x68, 0x6f, 0x75, 0x74, 0x3b, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x64, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61,
+ 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c,
+ 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75,
+ 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x0d, 0x0a, 0x2d,
+ 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x6d,
+ 0x65, 0x20, 0x73, 0x70, 0x75, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x41, 0x64,
+ 0x64, 0x65, 0x64, 0x20, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e,
+ 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6c, 0x69,
+ 0x73, 0x74, 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x41, 0x64, 0x64, 0x65, 0x64,
+ 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x73, 0x20, 0x62, 0x65, 0x74, 0x77,
+ 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75,
+ 0x61, 0x6c, 0x20, 0x3c, 0x74, 0x68, 0x69, 0x73, 0x76, 0x65, 0x72, 0x3e,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x62,
+ 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x77, 0x68,
+ 0x69, 0x74, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x6f, 0x77, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x0d, 0x0a,
+ 0x2d, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x3c, 0x65, 0x67, 0x3e,
+ 0x73, 0x2c, 0x20, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x73, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f,
+ 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x70,
+ 0x3e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e,
+ 0x65, 0x72, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x0d, 0x0a, 0x20, 0x20, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a,
+ 0x2d, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x20, 0x53, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x20,
+ 0x6e, 0x65, 0x77, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x0d,
+ 0x0a, 0x2d, 0x20, 0x46, 0x69, 0x78, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x73, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20,
+ 0x67, 0x65, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79,
+ 0x3b, 0x20, 0x61, 0x74, 0x0d, 0x0a, 0x20, 0x20, 0x6e, 0x65, 0x78, 0x74,
+ 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x72, 0x6f,
+ 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x62, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x0d, 0x0a, 0x20, 0x20,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70,
+ 0x2e, 0x0d, 0x0a, 0x2d, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x20, 0x28, 0x62, 0x61, 0x72, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x6f, 0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
+ 0x6f, 0x6e, 0x65, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x61, 0x64,
+ 0x64, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x3b, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x7b, 0x61, 0x64, 0x64, 0x7c, 0x63, 0x68, 0x67, 0x7c, 0x64,
+ 0x65, 0x6c, 0x7d, 0x22, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x78,
+ 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20,
+ 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20,
+ 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x20, 0x0d, 0x0a, 0x20,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x73, 0x75,
+ 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x2d,
+ 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x45, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20,
+ 0x28, 0x58, 0x4d, 0x4c, 0x29, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x31, 0x2e, 0x30, 0x20, 0x28, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20,
+ 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3c, 0x2f, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x33, 0x63,
+ 0x2d, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3e, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x26, 0x69, 0x73,
+ 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65, 0x3b,
+ 0x3c, 0x2f, 0x77, 0x33, 0x63, 0x2d, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x33, 0x63,
+ 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x3e, 0x57, 0x33, 0x43,
+ 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x77, 0x33, 0x63, 0x2d, 0x64, 0x6f, 0x63,
+ 0x74, 0x79, 0x70, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x75, 0x62, 0x64,
+ 0x61, 0x74, 0x65, 0x3e, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x26, 0x64, 0x72,
+ 0x61, 0x66, 0x74, 0x2e, 0x64, 0x61, 0x79, 0x3b, 0x3c, 0x2f, 0x64, 0x61,
+ 0x79, 0x3e, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x26, 0x64, 0x72,
+ 0x61, 0x66, 0x74, 0x2e, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3b, 0x3c, 0x2f,
+ 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x3c, 0x79, 0x65, 0x61, 0x72, 0x3e,
+ 0x26, 0x64, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x79, 0x65, 0x61, 0x72, 0x3b,
+ 0x3c, 0x2f, 0x79, 0x65, 0x61, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70,
+ 0x75, 0x62, 0x64, 0x61, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x75,
+ 0x62, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x26, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x3b, 0x2d, 0x26, 0x69, 0x73, 0x6f, 0x36, 0x2e, 0x64,
+ 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65, 0x3b, 0x22, 0x3e, 0x26, 0x68,
+ 0x74, 0x74, 0x70, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x3b, 0x2d, 0x26,
+ 0x69, 0x73, 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74,
+ 0x65, 0x3b, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x28, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x26, 0x68,
+ 0x74, 0x74, 0x70, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x3b, 0x2d, 0x26,
+ 0x69, 0x73, 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74,
+ 0x65, 0x3b, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x58, 0x48, 0x54,
+ 0x4d, 0x4c, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x20, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x26, 0x68, 0x74,
+ 0x74, 0x70, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x3b, 0x2d, 0x26, 0x69,
+ 0x73, 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65,
+ 0x3b, 0x2e, 0x78, 0x6d, 0x6c, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x26, 0x68, 0x74, 0x74, 0x70, 0x2d,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x3b, 0x2d, 0x26, 0x69, 0x73, 0x6f, 0x36,
+ 0x2e, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x61, 0x74, 0x65, 0x3b, 0x2e, 0x70,
+ 0x64, 0x66, 0x22, 0x3e, 0x50, 0x44, 0x46, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x2c, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x26, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x3b, 0x2d, 0x26, 0x69, 0x73, 0x6f, 0x36, 0x2e, 0x64, 0x6f, 0x63,
+ 0x2e, 0x64, 0x61, 0x74, 0x65, 0x3b, 0x2d, 0x72, 0x65, 0x76, 0x69, 0x65,
+ 0x77, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x58, 0x48, 0x54, 0x4d,
+ 0x4c, 0x0d, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2d, 0x63,
+ 0x6f, 0x64, 0x65, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x73,
+ 0x29, 0x3c, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x6c, 0x6f, 0x63, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78,
+ 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52,
+ 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x65, 0x76, 0x6c, 0x6f, 0x63,
+ 0x73, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x32, 0x30,
+ 0x30, 0x30, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x32, 0x65,
+ 0x2d, 0x32, 0x30, 0x30, 0x30, 0x30, 0x38, 0x31, 0x34, 0x22, 0x3e, 0x20,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x32, 0x30, 0x30,
+ 0x30, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x32, 0x65, 0x2d,
+ 0x32, 0x30, 0x30, 0x30, 0x30, 0x38, 0x31, 0x34, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f,
+ 0x31, 0x39, 0x39, 0x38, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x22, 0x3e, 0x20,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x31, 0x39, 0x39,
+ 0x38, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x3c, 0x21, 0x2d, 0x2d, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54,
+ 0x52, 0x2f, 0x50, 0x52, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x31,
+ 0x32, 0x30, 0x38, 0x27, 0x3e, 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x54, 0x52, 0x2f, 0x50, 0x52, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39,
+ 0x37, 0x31, 0x32, 0x30, 0x38, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x36, 0x31, 0x31, 0x31, 0x34, 0x27, 0x3e,
+ 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57,
+ 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x36, 0x31, 0x31, 0x31, 0x34,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x6c,
+ 0x61, 0x6e, 0x67, 0x2d, 0x39, 0x37, 0x30, 0x33, 0x33, 0x31, 0x27, 0x3e,
+ 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57,
+ 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x2d, 0x39,
+ 0x37, 0x30, 0x33, 0x33, 0x31, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x2d, 0x39, 0x37, 0x30,
+ 0x36, 0x33, 0x30, 0x27, 0x3e, 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x6c,
+ 0x61, 0x6e, 0x67, 0x2d, 0x39, 0x37, 0x30, 0x36, 0x33, 0x30, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54,
+ 0x52, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x30,
+ 0x38, 0x30, 0x37, 0x27, 0x3e, 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39,
+ 0x37, 0x30, 0x38, 0x30, 0x37, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57, 0x44, 0x2d,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x31, 0x31, 0x31, 0x37, 0x27, 0x3e,
+ 0x0d, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x57,
+ 0x44, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x31, 0x31, 0x31, 0x37,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2d, 0x2d, 0x3e, 0x20, 0x3c, 0x2f,
+ 0x70, 0x72, 0x65, 0x76, 0x6c, 0x6f, 0x63, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x61, 0x75, 0x74, 0x68, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x31, 0x65, 0x22, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x54,
+ 0x69, 0x6d, 0x20, 0x42, 0x72, 0x61, 0x79, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x74,
+ 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x65, 0x74, 0x73, 0x63, 0x61,
+ 0x70, 0x65, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x6d, 0x61, 0x69, 0x6c,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6c, 0x74,
+ 0x6f, 0x3a, 0x74, 0x62, 0x72, 0x61, 0x79, 0x40, 0x74, 0x65, 0x78, 0x74,
+ 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x3e,
+ 0x74, 0x62, 0x72, 0x61, 0x79, 0x40, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61,
+ 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x3c, 0x2f, 0x65, 0x6d,
+ 0x61, 0x69, 0x6c, 0x3e, 0x3c, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x31, 0x65, 0x22, 0x3e, 0x3c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x4a, 0x65, 0x61, 0x6e, 0x20, 0x50, 0x61, 0x6f, 0x6c,
+ 0x69, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x4d, 0x69, 0x63,
+ 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6d,
+ 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x65, 0x61, 0x6e, 0x70, 0x61,
+ 0x40, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x22, 0x3e, 0x6a, 0x65, 0x61, 0x6e, 0x70, 0x61, 0x40, 0x6d,
+ 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x3c, 0x2f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3e, 0x3c, 0x2f, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x61, 0x75, 0x74, 0x68,
+ 0x6f, 0x72, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x31, 0x65, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x43, 0x2e, 0x20, 0x4d, 0x2e, 0x20,
+ 0x53, 0x70, 0x65, 0x72, 0x62, 0x65, 0x72, 0x67, 0x2d, 0x4d, 0x63, 0x51,
+ 0x75, 0x65, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x49, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x20,
+ 0x61, 0x74, 0x20, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x45, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74,
+ 0x69, 0x76, 0x65, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f,
+ 0x3a, 0x63, 0x6d, 0x73, 0x6d, 0x63, 0x71, 0x40, 0x75, 0x69, 0x63, 0x2e,
+ 0x65, 0x64, 0x75, 0x22, 0x3e, 0x63, 0x6d, 0x73, 0x6d, 0x63, 0x71, 0x40,
+ 0x75, 0x69, 0x63, 0x2e, 0x65, 0x64, 0x75, 0x3c, 0x2f, 0x65, 0x6d, 0x61,
+ 0x69, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x32, 0x65, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x45, 0x76, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x65, 0x72,
+ 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x53, 0x75, 0x6e, 0x20,
+ 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+ 0x2c, 0x0d, 0x0a, 0x49, 0x6e, 0x63, 0x2e, 0x3c, 0x2f, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x65, 0x6d,
+ 0x61, 0x69, 0x6c, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6d, 0x61,
+ 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x65, 0x6c, 0x6d, 0x40, 0x65, 0x61, 0x73,
+ 0x74, 0x2e, 0x73, 0x75, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x3e, 0x65,
+ 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x6c, 0x65, 0x72, 0x40, 0x65, 0x61, 0x73,
+ 0x74, 0x2e, 0x73, 0x75, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x3c, 0x2f, 0x65,
+ 0x6d, 0x61, 0x69, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x61, 0x75, 0x74, 0x68,
+ 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x61, 0x62, 0x73, 0x74,
+ 0x72, 0x61, 0x63, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65,
+ 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x4c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x20, 0x28, 0x58, 0x4d, 0x4c, 0x29, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x6c,
+ 0x79, 0x0d, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x49, 0x74, 0x73, 0x20, 0x67,
+ 0x6f, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63,
+ 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2c, 0x0d, 0x0a, 0x72, 0x65, 0x63,
+ 0x65, 0x69, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x57, 0x65, 0x62, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x48, 0x54, 0x4d,
+ 0x4c, 0x2e, 0x0d, 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x68, 0x61, 0x73, 0x20,
+ 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65,
+ 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x62, 0x6f, 0x74, 0x68, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x57, 0x33, 0x43, 0x20, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20,
+ 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x65, 0x6e, 0x64,
+ 0x6f, 0x72, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x61, 0x73,
+ 0x20, 0x61, 0x20, 0x57, 0x33, 0x43, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x0d, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75,
+ 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+ 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x69, 0x74, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0d,
+ 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20,
+ 0x57, 0x33, 0x43, 0x27, 0x73, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x72,
+ 0x61, 0x77, 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74,
+ 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, 0x77, 0x69, 0x64, 0x65, 0x73, 0x70,
+ 0x72, 0x65, 0x61, 0x64, 0x20, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d,
+ 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x0d, 0x0a, 0x65,
+ 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74,
+ 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x65, 0x62, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x79, 0x6e,
+ 0x74, 0x61, 0x78, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e,
+ 0x67, 0x2c, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x0d, 0x0a, 0x75,
+ 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x28, 0x53, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x72, 0x64, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x64, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20,
+ 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2c, 0x0d, 0x0a, 0x49,
+ 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x3a, 0x31, 0x39, 0x38, 0x36,
+ 0x28, 0x45, 0x29, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6d, 0x65, 0x6e, 0x64,
+ 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x29, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x6f, 0x72,
+ 0x6c, 0x64, 0x20, 0x57, 0x69, 0x64, 0x65, 0x20, 0x57, 0x65, 0x62, 0x2e,
+ 0x0d, 0x0a, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72,
+ 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x57, 0x33, 0x43, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x41, 0x63, 0x74,
+ 0x69, 0x76, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69,
+ 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64,
+ 0x20, 0x61, 0x74, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x22, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2e, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61,
+ 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x30, 0x22, 0x3e, 0x5b, 0x45,
+ 0x31, 0x30, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a,
+ 0x54, 0x68, 0x65, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x69, 0x76, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x0d, 0x0a, 0x66,
+ 0x6f, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x73, 0x65,
+ 0x65, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x23,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x22, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2e, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x41, 0x0d, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x57,
+ 0x33, 0x43, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e,
+ 0x64, 0x0d, 0x0a, 0x61, 0x74, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54,
+ 0x52, 0x2f, 0x22, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65,
+ 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x36, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x36, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x0d, 0x0a,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
+ 0x65, 0x72, 0x6d, 0x20, 0x55, 0x52, 0x49, 0x2c, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x20, 0x62, 0x79, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72,
+ 0x73, 0x2d, 0x4c, 0x65, 0x65, 0x22, 0x2f, 0x3e, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f,
+ 0x67, 0x72, 0x65, 0x73, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x52, 0x46, 0x43, 0x31, 0x37, 0x33, 0x38, 0x22, 0x2f, 0x3e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x52, 0x46, 0x43, 0x31, 0x38,
+ 0x30, 0x38, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e,
+ 0x64, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73,
+ 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x6e, 0x6f, 0x74, 0x3c, 0x2f,
+ 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x28, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x70, 0x75,
+ 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x31, 0x30, 0x20, 0x46,
+ 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x79, 0x20, 0x31, 0x39, 0x39, 0x38,
+ 0x29, 0x3b, 0x0d, 0x0a, 0x69, 0x74, 0x20, 0x6d, 0x65, 0x72, 0x65, 0x6c,
+ 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x73, 0x20, 0x64, 0x69, 0x63, 0x74, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74,
+ 0x2d, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x20, 0x28, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
+ 0x6c, 0x65, 0x0d, 0x0a, 0x61, 0x74, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x22,
+ 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x29, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
+ 0x0d, 0x0a, 0x61, 0x74, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x56, 0x31, 0x30, 0x2d, 0x32, 0x65,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x56,
+ 0x31, 0x30, 0x2d, 0x32, 0x65, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6d, 0x61, 0x69, 0x6c,
+ 0x74, 0x6f, 0x3a, 0x78, 0x6d, 0x6c, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f,
+ 0x72, 0x40, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x22, 0x3e, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x40, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x31, 0x22, 0x3e, 0x5b, 0x45,
+ 0x31, 0x30, 0x31, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3b, 0x20,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x73,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x41, 0x72, 0x63, 0x68,
+ 0x69, 0x76, 0x65, 0x73, 0x2f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x22, 0x3e,
+ 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x73, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6e, 0x6f, 0x74,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x43, 0x2e, 0x20, 0x4d, 0x2e, 0x20,
+ 0x53, 0x70, 0x65, 0x72, 0x62, 0x65, 0x72, 0x67, 0x2d, 0x4d, 0x63, 0x51,
+ 0x75, 0x65, 0x65, 0x6e, 0x27, 0x73, 0x20, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x20, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x20, 0x48, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
+ 0x77, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x6f, 0x72,
+ 0x6c, 0x64, 0x20, 0x57, 0x69, 0x64, 0x65, 0x20, 0x57, 0x65, 0x62, 0x20,
+ 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x75, 0x6d, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x63, 0x61, 0x6e, 0x0d, 0x0a, 0x62, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74,
+ 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x63, 0x6d, 0x73, 0x6d, 0x63,
+ 0x71, 0x40, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x22, 0x3e, 0x63, 0x6d,
+ 0x73, 0x6d, 0x63, 0x71, 0x40, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x75, 0x62,
+ 0x73, 0x74, 0x6d, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x43, 0x68,
+ 0x69, 0x63, 0x61, 0x67, 0x6f, 0x2c, 0x20, 0x56, 0x61, 0x6e, 0x63, 0x6f,
+ 0x75, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x61,
+ 0x69, 0x6e, 0x20, 0x56, 0x69, 0x65, 0x77, 0x2c, 0x20, 0x65, 0x74, 0x20,
+ 0x61, 0x6c, 0x2e, 0x3a, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x2d, 0x57,
+ 0x69, 0x64, 0x65, 0x20, 0x57, 0x65, 0x62, 0x20, 0x43, 0x6f, 0x6e, 0x73,
+ 0x6f, 0x72, 0x74, 0x69, 0x75, 0x6d, 0x2c, 0x20, 0x58, 0x4d, 0x4c, 0x0d,
+ 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f,
+ 0x75, 0x70, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x36, 0x2c, 0x20, 0x31, 0x39,
+ 0x39, 0x37, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x30, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x75, 0x62, 0x73, 0x74, 0x6d, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x64, 0x65,
+ 0x73, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x64, 0x65, 0x73, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x61, 0x6e,
+ 0x67, 0x75, 0x73, 0x61, 0x67, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x45,
+ 0x4e, 0x22, 0x3e, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x6e,
+ 0x64, 0x65, 0x64, 0x20, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x73, 0x2d, 0x4e,
+ 0x61, 0x75, 0x72, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x28, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72,
+ 0x29, 0x3c, 0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x73, 0x61, 0x67,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x64, 0x65, 0x73, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x6c, 0x69,
+ 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x37, 0x2d, 0x31, 0x32, 0x2d, 0x30, 0x33, 0x20, 0x3a,
+ 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x79, 0x65,
+ 0x74, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39,
+ 0x39, 0x37, 0x2d, 0x31, 0x32, 0x2d, 0x30, 0x32, 0x20, 0x3a, 0x20, 0x54,
+ 0x42, 0x20, 0x3a, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x28, 0x73, 0x65, 0x65,
+ 0x20, 0x54, 0x42, 0x20, 0x74, 0x6f, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x57,
+ 0x47, 0x2c, 0x20, 0x32, 0x20, 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x20, 0x31, 0x39, 0x39, 0x37, 0x29, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x37, 0x2d, 0x31, 0x32, 0x2d, 0x30, 0x32, 0x20, 0x3a,
+ 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x64, 0x65,
+ 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x73, 0x20, 0x6d,
+ 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x72, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20,
+ 0x68, 0x61, 0x72, 0x64, 0x2d, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x61, 0x74, 0x65,
+ 0x20, 0x69, 0x6e, 0x20, 0x70, 0x75, 0x62, 0x64, 0x61, 0x74, 0x65, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x0d, 0x0a, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x57, 0x65, 0x62, 0x53, 0x47, 0x4d, 0x4c, 0x2c, 0x20, 0x75, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x44, 0x61, 0x6e, 0x20, 0x43,
+ 0x6f, 0x6e, 0x6e, 0x6f, 0x6c, 0x6c, 0x79, 0x0d, 0x0a, 0x28, 0x61, 0x6d,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x61, 0x62,
+ 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x6e, 0x65, 0x63,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72, 0x73,
+ 0x2d, 0x4c, 0x65, 0x65, 0x20, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x2e, 0x29,
+ 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x27, 0x54, 0x68, 0x65, 0x27, 0x20,
+ 0x74, 0x6f, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x0d,
+ 0x0a, 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x57, 0x47, 0x20, 0x64,
+ 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x6f, 0x76,
+ 0x65, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68,
+ 0x69, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x45, 0x78, 0x69, 0x73, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73,
+ 0x20, 0x74, 0x6f, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6d, 0x61, 0x74,
+ 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6d,
+ 0x62, 0x69, 0x6e, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x52, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x72, 0x65,
+ 0x2d, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20,
+ 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x6f, 0x20, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65,
+ 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x0d, 0x0a, 0x63, 0x6f, 0x6d, 0x65,
+ 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x2d, 0x74,
+ 0x61, 0x67, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6d, 0x61, 0x74, 0x74,
+ 0x65, 0x72, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64,
+ 0x69, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x61, 0x67,
+ 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x64, 0x69,
+ 0x76, 0x31, 0x2c, 0x0d, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20,
+ 0x58, 0x58, 0x58, 0x20, 0x58, 0x58, 0x58, 0x20, 0x66, 0x72, 0x6f, 0x6d,
+ 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x27, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65, 0x27, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x73, 0x65, 0x2c,
+ 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0d, 0x0a, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x52, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x52, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x64,
+ 0x64, 0x20, 0x52, 0x46, 0x43, 0x20, 0x31, 0x37, 0x33, 0x38, 0x2c, 0x20,
+ 0x31, 0x38, 0x30, 0x38, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x32, 0x31,
+ 0x34, 0x31, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x28, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20,
+ 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x65, 0x20, 0x64, 0x6f, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63,
+ 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x6d, 0x29, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x27, 0x46, 0x69,
+ 0x65, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x72, 0x61, 0x66, 0x74,
+ 0x27, 0x20, 0x28, 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x2d, 0x4c,
+ 0x65, 0x65, 0x0d, 0x0a, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x2e, 0x29, 0x2c,
+ 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
+ 0x6f, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, 0x64,
+ 0x79, 0x2c, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x55, 0x52, 0x49, 0x63,
+ 0x68, 0x61, 0x72, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x74, 0x65, 0x72, 0x6d,
+ 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x75, 0x73,
+ 0x65, 0x20, 0x53, 0x6b, 0x69, 0x70, 0x4c, 0x69, 0x74, 0x20, 0x69, 0x6e,
+ 0x73, 0x74, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x6c, 0x6f, 0x73, 0x65, 0x20,
+ 0x73, 0x74, 0x72, 0x61, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x61, 0x6c, 0x20, 0x27, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65,
+ 0x63, 0x6c, 0x73, 0x27, 0x2c, 0x0d, 0x0a, 0x6d, 0x6f, 0x76, 0x65, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f,
+ 0x20, 0x41, 0x68, 0x6f, 0x20, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x2e, 0x20,
+ 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x69,
+ 0x78, 0x20, 0x28, 0x54, 0x69, 0x6d, 0x27, 0x73, 0x20, 0x72, 0x69, 0x67,
+ 0x68, 0x74, 0x29, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x70, 0x72, 0x6f,
+ 0x73, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x73, 0x61, 0x79, 0x69,
+ 0x6e, 0x67, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x73,
+ 0x68, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x52, 0x49, 0x20, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x0d, 0x0a, 0x73, 0x70, 0x65, 0x61, 0x6b,
+ 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x69,
+ 0x6e, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x28, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x27, 0x6d, 0x61, 0x79,
+ 0x27, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x2e, 0x20, 0x57, 0x6f, 0x72,
+ 0x6b, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x3a, 0x20, 0x54,
+ 0x69, 0x6d, 0x20, 0x42, 0x72, 0x61, 0x79, 0x20, 0x72, 0x65, 0x61, 0x63,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x4a, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x54, 0x69, 0x6d,
+ 0x20, 0x42, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x73,
+ 0x0d, 0x0a, 0x6f, 0x77, 0x6e, 0x2c, 0x20, 0x45, 0x76, 0x65, 0x20, 0x4d,
+ 0x61, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x44, 0x4f,
+ 0x4e, 0x45, 0x20, 0x59, 0x45, 0x54, 0x3a, 0x20, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x2f, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x2f, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x2e, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x0d, 0x0a, 0x4a,
+ 0x61, 0x6d, 0x65, 0x73, 0x27, 0x73, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65,
+ 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20,
+ 0x26, 0x6c, 0x74, 0x3b, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x75, 0x62, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x68,
+ 0x65, 0x78, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x2c, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x72,
+ 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x37, 0x2d, 0x31, 0x32, 0x2d, 0x30, 0x31, 0x20, 0x3a,
+ 0x20, 0x4a, 0x42, 0x20, 0x3a, 0x20, 0x61, 0x64, 0x64, 0x20, 0x73, 0x6f,
+ 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2d, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d,
+ 0x31, 0x32, 0x2d, 0x30, 0x31, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d,
+ 0x63, 0x51, 0x20, 0x3a, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x72,
+ 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72,
+ 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x57, 0x47, 0x20, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3a, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x20, 0x28,
+ 0x32, 0x37, 0x20, 0x41, 0x75, 0x67, 0x20, 0x2f, 0x20, 0x33, 0x20, 0x53,
+ 0x65, 0x70, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63,
+ 0x74, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66,
+ 0x20, 0x46, 0x61, 0x75, 0x73, 0x74, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x0d, 0x0a, 0x6c,
+ 0x69, 0x6e, 0x65, 0x29, 0x2c, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x53,
+ 0x44, 0x44, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x45, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x63, 0x6c, 0x2c, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x61, 0x74,
+ 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x64, 0x72, 0x6f,
+ 0x70, 0x0d, 0x0a, 0x6d, 0x69, 0x73, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x28, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x21, 0x29, 0x20, 0x73,
+ 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75,
+ 0x74, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65,
+ 0x72, 0x73, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f,
+ 0x66, 0x20, 0x50, 0x43, 0x44, 0x61, 0x74, 0x61, 0x20, 0x74, 0x6f, 0x20,
+ 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x62, 0x61, 0x72, 0x20, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x73, 0x63, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69,
+ 0x63, 0x61, 0x6c, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20,
+ 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x27, 0x73, 0x20, 0x68, 0x61,
+ 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x75, 0x62, 0x73,
+ 0x65, 0x74, 0x20, 0x28, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x6e, 0x6f, 0x6e,
+ 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x29, 0x2c, 0x20,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x0d,
+ 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x6c, 0x2d, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x61, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74,
+ 0x2c, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x20, 0x6d, 0x69, 0x73, 0x6c, 0x65,
+ 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x2f, 0x20, 0x64, 0x61, 0x6e, 0x67,
+ 0x65, 0x72, 0x6f, 0x75, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, 0x6f, 0x66,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x73,
+ 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x73, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x74, 0x61,
+ 0x67, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x20,
+ 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x45, 0x4d, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x44, 0x54, 0x44,
+ 0x2c, 0x20, 0x61, 0x64, 0x64, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x61,
+ 0x62, 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x69, 0x6e, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2c, 0x20,
+ 0x61, 0x64, 0x64, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20,
+ 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20,
+ 0x6f, 0x75, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2d, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x20, 0x28, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x0d,
+ 0x0a, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72,
+ 0x6b, 0x21, 0x29, 0x2e, 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39,
+ 0x39, 0x37, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x38, 0x20, 0x3a, 0x20, 0x54,
+ 0x42, 0x20, 0x3a, 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20,
+ 0x25, 0x2d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73,
+ 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x6e, 0x65, 0x77, 0x20,
+ 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x45,
+ 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x31, 0x30,
+ 0x2d, 0x30, 0x31, 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x43,
+ 0x61, 0x73, 0x65, 0x2d, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76,
+ 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3b, 0x20, 0x63, 0x6c,
+ 0x65, 0x61, 0x6e, 0x65, 0x64, 0x20, 0x75, 0x70, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65,
+ 0x66, 0x73, 0x2c, 0x0d, 0x0a, 0x6c, 0x6f, 0x74, 0x73, 0x61, 0x20, 0x6c,
+ 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x65, 0x64, 0x69, 0x74, 0x73, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3c, 0x2f, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x39, 0x2d, 0x32, 0x35,
+ 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x43, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6c, 0x6d, 0x27, 0x73, 0x20,
+ 0x6e, 0x65, 0x77, 0x20, 0x44, 0x54, 0x44, 0x2c, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61,
+ 0x6c, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x0d, 0x0a, 0x63, 0x6c,
+ 0x65, 0x61, 0x6e, 0x75, 0x70, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73,
+ 0x69, 0x64, 0x65, 0x2d, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x3c, 0x2f,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x37, 0x2d, 0x32,
+ 0x34, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a,
+ 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x20, 0x28, 0x6c, 0x6f, 0x73, 0x74, 0x20, 0x2a, 0x29, 0x20,
+ 0x69, 0x6e, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53,
+ 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x0d,
+ 0x0a, 0x28, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x4d, 0x61, 0x6b, 0x6f, 0x74, 0x6f, 0x20, 0x4d, 0x75, 0x72, 0x61, 0x74,
+ 0x61, 0x29, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x41, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x73,
+ 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x54,
+ 0x43, 0x0d, 0x0a, 0x28, 0x61, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x4a,
+ 0x4a, 0x43, 0x29, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39,
+ 0x37, 0x2d, 0x30, 0x37, 0x2d, 0x32, 0x33, 0x20, 0x3a, 0x20, 0x43, 0x4d,
+ 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x70, 0x72, 0x65, 0x2d, 0x65,
+ 0x6d, 0x70, 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6b,
+ 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3a, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x0d,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x27, 0x65,
+ 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x61, 0x67, 0x27, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x6d, 0x70,
+ 0x74, 0x79, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x45,
+ 0x4d, 0x50, 0x54, 0x59, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20, 0x57, 0x46,
+ 0x43, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x0d, 0x0a, 0x66,
+ 0x69, 0x72, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x52, 0x65, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x74,
+ 0x6f, 0x20, 0x50, 0x49, 0x73, 0x20, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c,
+ 0x6c, 0x20, 0x61, 0x73, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x65,
+ 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e,
+ 0x67, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x33, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x34, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x65, 0x78, 0x61,
+ 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x42,
+ 0x79, 0x74, 0x65, 0x0d, 0x0a, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d,
+ 0x61, 0x72, 0x6b, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x61,
+ 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x63, 0x6c, 0x61, 0x72, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73,
+ 0x20, 0x74, 0x6f, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x0d, 0x0a, 0x6d, 0x69,
+ 0x78, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+ 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30,
+ 0x36, 0x2d, 0x33, 0x30, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63,
+ 0x51, 0x20, 0x3a, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x64,
+ 0x61, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x63, 0x6f,
+ 0x73, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x73, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20,
+ 0x74, 0x6f, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69,
+ 0x63, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x71, 0x2c, 0x20, 0x4d, 0x69, 0x78,
+ 0x65, 0x64, 0x2c, 0x20, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x6f, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x20, 0x4a, 0x61, 0x6d, 0x65, 0x73, 0x0d, 0x0a, 0x43, 0x6c, 0x61,
+ 0x72, 0x6b, 0x27, 0x73, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x68,
+ 0x69, 0x62, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x54, 0x4f,
+ 0x0d, 0x0a, 0x44, 0x4f, 0x3a, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69,
+ 0x66, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
+ 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61,
+ 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20,
+ 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x65, 0x20, 0x64, 0x6f, 0x6e,
+ 0x27, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x77, 0x6f, 0x72, 0x72, 0x79, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x65, 0x78, 0x70, 0x61,
+ 0x6e, 0x64, 0x20, 0x50, 0x45, 0x72, 0x65, 0x66, 0x73, 0x20, 0x66, 0x69,
+ 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39,
+ 0x37, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x39, 0x20, 0x3a, 0x20, 0x54, 0x42,
+ 0x20, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x65,
+ 0x64, 0x69, 0x74, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39,
+ 0x37, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x39, 0x20, 0x3a, 0x20, 0x43, 0x4d,
+ 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20,
+ 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x6c, 0x64,
+ 0x20, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x20, 0x45, 0x44, 0x49, 0x54, 0x20,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x64, 0x65, 0x61, 0x64, 0x20,
+ 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x20, 0x52, 0x65,
+ 0x76, 0x69, 0x73, 0x65, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x25, 0x20, 0x69, 0x6e,
+ 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20,
+ 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x69, 0x74, 0x20, 0x48, 0x65, 0x6e, 0x72,
+ 0x79, 0x0d, 0x0a, 0x54, 0x68, 0x6f, 0x6d, 0x70, 0x73, 0x6f, 0x6e, 0x27,
+ 0x73, 0x20, 0x70, 0x75, 0x6e, 0x2c, 0x20, 0x65, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70,
+ 0x64, 0x65, 0x63, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x74,
+ 0x64, 0x65, 0x66, 0x2e, 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20,
+ 0x52, 0x4d, 0x44, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x3f, 0x29,
+ 0x2e, 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d,
+ 0x30, 0x36, 0x2d, 0x32, 0x38, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d,
+ 0x63, 0x51, 0x20, 0x3a, 0x20, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73,
+ 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x31, 0x20, 0x4a, 0x75, 0x6c, 0x79, 0x20, 0x64, 0x72, 0x61, 0x66,
+ 0x74, 0x3a, 0x20, 0x41, 0x64, 0x64, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20,
+ 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x64, 0x72, 0x61, 0x63, 0x6f, 0x6e, 0x69,
+ 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x68, 0x61, 0x6e,
+ 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x72, 0x6f,
+ 0x64, 0x75, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72,
+ 0x6d, 0x20, 0x46, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x45, 0x72, 0x72, 0x6f,
+ 0x72, 0x29, 0x2e, 0x20, 0x52, 0x45, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74,
+ 0x61, 0x20, 0x65, 0x73, 0x74, 0x20, 0x28, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x77, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e,
+ 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72,
+ 0x69, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x72, 0x73, 0x29, 0x2e, 0x20, 0x54, 0x61, 0x67,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e,
+ 0x67, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x74, 0x6f, 0x20,
+ 0x69, 0x74, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x43, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x20, 0x64, 0x65, 0x66, 0x20, 0x6f, 0x66, 0x20,
+ 0x25, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x20, 0x43,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x72, 0x64, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x6c, 0x74, 0x2c, 0x20, 0x67,
+ 0x74, 0x2c, 0x20, 0x61, 0x6d, 0x70, 0x2e, 0x20, 0x53, 0x74, 0x72, 0x69,
+ 0x70, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x7a, 0x65,
+ 0x72, 0x6f, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x23, 0x78, 0x30,
+ 0x30, 0x6e, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x3c, 0x2f,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x34, 0x2d, 0x30,
+ 0x32, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a,
+ 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x64,
+ 0x69, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x0d,
+ 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6e, 0x69, 0x67, 0x68, 0x74, 0x27,
+ 0x73, 0x20, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x72, 0x65, 0x61, 0x64, 0x69,
+ 0x6e, 0x67, 0x2e, 0x20, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x20,
+ 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x20,
+ 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x65, 0x6c, 0x6c,
+ 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x3a, 0x20, 0x57, 0x65, 0x62,
+ 0x73, 0x74, 0x65, 0x72, 0x27, 0x73, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x6f,
+ 0x6e, 0x64, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x61, 0x74, 0x65,
+ 0x73, 0x20, 0x69, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x27, 0x73, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x34, 0x2d, 0x30, 0x31, 0x20, 0x3a,
+ 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x63, 0x6f,
+ 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x72,
+ 0x6f, 0x6d, 0x20, 0x4a, 0x4a, 0x43, 0x2c, 0x20, 0x45, 0x4d, 0x2c, 0x20,
+ 0x48, 0x54, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6c, 0x66,
+ 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x33,
+ 0x2d, 0x33, 0x31, 0x20, 0x3a, 0x20, 0x54, 0x69, 0x6d, 0x20, 0x42, 0x72,
+ 0x61, 0x79, 0x20, 0x3a, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39,
+ 0x39, 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x39, 0x20, 0x3a, 0x20, 0x43,
+ 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x73, 0x6f, 0x6d, 0x65,
+ 0x20, 0x48, 0x65, 0x6e, 0x72, 0x79, 0x20, 0x54, 0x68, 0x6f, 0x6d, 0x70,
+ 0x73, 0x6f, 0x6e, 0x20, 0x28, 0x6f, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x29,
+ 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x0d, 0x0a, 0x43, 0x68, 0x61, 0x72,
+ 0x6c, 0x65, 0x73, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x66, 0x61, 0x72, 0x62,
+ 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x45, 0x52, 0x42, 0x20, 0x64,
+ 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x50, 0x45,
+ 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e,
+ 0x20, 0x6d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x6e, 0x65, 0x6f,
+ 0x75, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x0d, 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x64, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x0d,
+ 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x64, 0x65, 0x66, 0x20, 0x6f, 0x66,
+ 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x6c, 0x69, 0x74, 0x65, 0x72,
+ 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72,
+ 0x61, 0x6c, 0x73, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39,
+ 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x38, 0x20, 0x3a, 0x20, 0x43, 0x4d,
+ 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20,
+ 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x6f, 0x72, 0x72,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x20, 0x70,
+ 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x20, 0x54, 0x65, 0x72, 0x72, 0x79, 0x0d, 0x0a, 0x41, 0x6c, 0x6c,
+ 0x65, 0x6e, 0x2c, 0x20, 0x4e, 0x6f, 0x72, 0x62, 0x65, 0x72, 0x74, 0x20,
+ 0x4d, 0x69, 0x6b, 0x75, 0x6c, 0x61, 0x2c, 0x20, 0x4a, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x4a, 0x6f, 0x6e,
+ 0x20, 0x42, 0x6f, 0x73, 0x61, 0x6b, 0x2c, 0x20, 0x48, 0x65, 0x6e, 0x72,
+ 0x79, 0x20, 0x54, 0x68, 0x6f, 0x6d, 0x70, 0x73, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x50, 0x61, 0x75, 0x6c, 0x20, 0x47, 0x72, 0x6f, 0x73, 0x73, 0x6f, 0x2c,
+ 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x20,
+ 0x41, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x20, 0x67, 0x69, 0x76, 0x65,
+ 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x22, 0x77, 0x65, 0x6c, 0x6c,
+ 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x20, 0x28, 0x54, 0x65,
+ 0x72, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74,
+ 0x29, 0x2c, 0x20, 0x74, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x6c, 0x79, 0x0d, 0x0a, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x51,
+ 0x75, 0x6f, 0x74, 0x65, 0x64, 0x43, 0x44, 0x61, 0x74, 0x61, 0x20, 0x61,
+ 0x73, 0x20, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x61,
+ 0x73, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65,
+ 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x2c, 0x0d, 0x0a, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x65,
+ 0x6d, 0x70, 0x68, 0x3e, 0x6f, 0x6e, 0x6c, 0x79, 0x3c, 0x2f, 0x65, 0x6d,
+ 0x70, 0x68, 0x3e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x51, 0x75,
+ 0x6f, 0x74, 0x65, 0x64, 0x43, 0x44, 0x61, 0x74, 0x61, 0x20, 0x77, 0x61,
+ 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64,
+ 0x20, 0x76, 0x69, 0x63, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x61, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x2e, 0x20, 0x28, 0x49, 0x27, 0x64, 0x20, 0x63, 0x61,
+ 0x6c, 0x6c, 0x20, 0x69, 0x74, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x54, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x0d, 0x0a,
+ 0x38, 0x38, 0x37, 0x39, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x62, 0x6f, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e,
+ 0x29, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30,
+ 0x33, 0x2d, 0x32, 0x36, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63,
+ 0x51, 0x20, 0x3a, 0x20, 0x72, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6b,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x72,
+ 0x61, 0x66, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x61, 0x70, 0x70, 0x6c, 0x79,
+ 0x0d, 0x0a, 0x6d, 0x79, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73,
+ 0x20, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x30, 0x33, 0x2d, 0x32, 0x30,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x30, 0x33, 0x2d, 0x32, 0x31, 0x2e, 0x20,
+ 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x6c,
+ 0x64, 0x20, 0x27, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x27, 0x20,
+ 0x74, 0x6f, 0x20, 0x27, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74,
+ 0x27, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x0d, 0x0a, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x63, 0x61, 0x73,
+ 0x65, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x6d,
+ 0x65, 0x61, 0x6e, 0x74, 0x20, 0x27, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x72,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x27, 0x2e, 0x3c, 0x2f,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32,
+ 0x31, 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x6d, 0x61, 0x73,
+ 0x73, 0x69, 0x76, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73,
+ 0x20, 0x6f, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, 0x66, 0x6c,
+ 0x69, 0x67, 0x68, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x43, 0x68,
+ 0x69, 0x63, 0x61, 0x67, 0x6f, 0x20, 0x74, 0x6f, 0x20, 0x56, 0x61, 0x6e,
+ 0x63, 0x6f, 0x75, 0x76, 0x65, 0x72, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31,
+ 0x39, 0x39, 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x31, 0x20, 0x3a, 0x20,
+ 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x63, 0x6f, 0x72,
+ 0x72, 0x65, 0x63, 0x74, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x79,
+ 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31,
+ 0x39, 0x39, 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x30, 0x20, 0x3a, 0x20,
+ 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x63, 0x6f, 0x72,
+ 0x72, 0x65, 0x63, 0x74, 0x20, 0x74, 0x79, 0x70, 0x6f, 0x73, 0x20, 0x6c,
+ 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x43, 0x4d, 0x53,
+ 0x4d, 0x63, 0x51, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x70,
+ 0x79, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x3c, 0x2f,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x37, 0x2d, 0x30, 0x33, 0x2d, 0x32,
+ 0x30, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a,
+ 0x20, 0x63, 0x6f, 0x73, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x57,
+ 0x57, 0x57, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x41, 0x70, 0x72, 0x69, 0x6c, 0x20, 0x31, 0x39, 0x39, 0x37,
+ 0x3a, 0x20, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x6f,
+ 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
+ 0x0d, 0x0a, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x74, 0x6f, 0x20, 0x64,
+ 0x6f, 0x63, 0x64, 0x61, 0x74, 0x65, 0x2c, 0x20, 0x65, 0x74, 0x63, 0x2e,
+ 0x29, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x78, 0x41, 0x30, 0x20,
+ 0x74, 0x6f, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x20, 0x6e, 0x62, 0x73, 0x70, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x23, 0x31, 0x36, 0x30, 0x3b, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x20, 0x6c,
+ 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72,
+ 0x61, 0x70, 0x68, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x67,
+ 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f, 0x73, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x31, 0x2d, 0x31, 0x32, 0x20,
+ 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x72,
+ 0x65, 0x76, 0x69, 0x73, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x54, 0x69, 0x6d, 0x27, 0x73, 0x20, 0x65, 0x64, 0x69, 0x74, 0x73, 0x3a,
+ 0x20, 0x41, 0x64, 0x64, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52,
+ 0x45, 0x44, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74,
+ 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20,
+ 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x53, 0x20, 0x6f, 0x72, 0x20, 0x74,
+ 0x6f, 0x20, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x45, 0x44, 0x2e, 0x20,
+ 0x53, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x51, 0x75, 0x6f,
+ 0x74, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2c, 0x0d, 0x0a, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x29, 0x2e, 0x20, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74,
+ 0x20, 0x74, 0x72, 0x69, 0x76, 0x69, 0x61, 0x6c, 0x2d, 0x67, 0x72, 0x61,
+ 0x6d, 0x6d, 0x61, 0x72, 0x20, 0x64, 0x6f, 0x63, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x2e, 0x20, 0x52, 0x65, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x27, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x0d, 0x0a, 0x61, 0x73, 0x20,
+ 0x27, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x27, 0x20, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6d, 0x2e, 0x20,
+ 0x41, 0x6c, 0x73, 0x6f, 0x20, 0x65, 0x64, 0x69, 0x74, 0x73, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x4a, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x43, 0x6c,
+ 0x61, 0x72, 0x6b, 0x3a, 0x20, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x0d, 0x0a,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x5b, 0x5e,
+ 0x61, 0x62, 0x63, 0x5d, 0x20, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63,
+ 0x74, 0x73, 0x2e, 0x20, 0x43, 0x68, 0x61, 0x72, 0x72, 0x65, 0x66, 0x20,
+ 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6a,
+ 0x75, 0x73, 0x74, 0x20, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x20, 0x6e, 0x6f,
+ 0x74, 0x0d, 0x0a, 0x44, 0x69, 0x67, 0x69, 0x74, 0x2e, 0x20, 0x4c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x20,
+ 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x65,
+ 0x72, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x3a,
+ 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x3f, 0x20, 0x28, 0x45, 0x52,
+ 0x42, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e,
+ 0x20, 0x4f, 0x6e, 0x65, 0x0d, 0x0a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x50, 0x49, 0x20, 0x68, 0x61,
+ 0x73, 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x69, 0x63, 0x2e,
+ 0x20, 0x43, 0x6c, 0x61, 0x72, 0x69, 0x66, 0x79, 0x20, 0x64, 0x69, 0x73,
+ 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x2e, 0x20, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x20, 0x73, 0x68, 0x6f,
+ 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20,
+ 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x3b, 0x20, 0x64, 0x6f, 0x6e,
+ 0x27, 0x74, 0x20, 0x70, 0x72, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+ 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x76,
+ 0x65, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x44, 0x6f, 0x6e, 0x27, 0x74, 0x20,
+ 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6f,
+ 0x73, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x69, 0x65,
+ 0x73, 0x2e, 0x20, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x68,
+ 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x2d, 0x4e, 0x4e, 0x4e, 0x4e, 0x2e, 0x20,
+ 0x43, 0x6c, 0x61, 0x72, 0x69, 0x66, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x20, 0x55, 0x52, 0x4c, 0x73, 0x2e, 0x20, 0x41,
+ 0x6e, 0x64, 0x0d, 0x0a, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x6d, 0x79, 0x20, 0x6f, 0x77, 0x6e, 0x3a, 0x20, 0x43, 0x6f, 0x72, 0x72,
+ 0x65, 0x63, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x3a, 0x20, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x0d, 0x0a, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x22,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x3a, 0x3a, 0x3d,
+ 0x20, 0x63, 0x70, 0x22, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x67,
+ 0x6f, 0x6f, 0x64, 0x2e, 0x20, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39,
+ 0x39, 0x36, 0x2d, 0x31, 0x31, 0x2d, 0x31, 0x31, 0x20, 0x3a, 0x20, 0x43,
+ 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x72, 0x65, 0x76, 0x69,
+ 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65,
+ 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x72, 0x68,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31,
+ 0x31, 0x2d, 0x31, 0x30, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63,
+ 0x51, 0x20, 0x3a, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x20, 0x46, 0x69,
+ 0x78, 0x20, 0x2f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2c, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x53, 0x74, 0x69, 0x6c, 0x6c, 0x0d,
+ 0x0a, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x3a, 0x20, 0x41, 0x64, 0x64, 0x20,
+ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
+ 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x64, 0x65,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x73, 0x2e, 0x20, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x20, 0x73,
+ 0x74, 0x79, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x63, 0x0d, 0x0a, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x33, 0x31, 0x20, 0x3a,
+ 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x41, 0x64, 0x64, 0x20, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e,
+ 0x67, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x33, 0x30,
+ 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x43, 0x6c, 0x65, 0x61,
+ 0x6e, 0x20, 0x75, 0x70, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x2e,
+ 0x20, 0x53, 0x6c, 0x69, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x45, 0x52, 0x42,
+ 0x20, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x72,
+ 0x65, 0x20, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x2e, 0x3c, 0x2f, 0x73, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x32, 0x38, 0x20,
+ 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x43, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x20, 0x44, 0x54, 0x44, 0x2e, 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x27, 0x73, 0x20, 0x73,
+ 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0d,
+ 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f,
+ 0x20, 0x2f, 0x2f, 0x2e, 0x20, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75,
+ 0x63, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x41, 0x64, 0x64, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x77,
+ 0x68, 0x69, 0x74, 0x65, 0x2d, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x68,
+ 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x4c, 0x6f, 0x74,
+ 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e,
+ 0x75, 0x70, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36,
+ 0x2d, 0x31, 0x30, 0x2d, 0x32, 0x34, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53,
+ 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x20,
+ 0x74, 0x77, 0x65, 0x61, 0x6b, 0x73, 0x2c, 0x20, 0x69, 0x6d, 0x70, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x45,
+ 0x52, 0x42, 0x20, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2e, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73,
+ 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x2f, 0x2a, 0x20,
+ 0x2a, 0x2f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x2f, 0x2f, 0x2e, 0x20, 0x41,
+ 0x64, 0x64, 0x20, 0x62, 0x69, 0x62, 0x6c, 0x69, 0x6f, 0x67, 0x72, 0x61,
+ 0x70, 0x68, 0x69, 0x63, 0x20, 0x72, 0x65, 0x66, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2c, 0x0d, 0x0a, 0x48, 0x79, 0x54,
+ 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65,
+ 0x2e, 0x20, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x6c, 0x64,
+ 0x20, 0x43, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x73, 0x20, 0x4d, 0x73,
+ 0x44, 0x61, 0x74, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x69,
+ 0x74, 0x27, 0x73, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x6f, 0x6e,
+ 0x6c, 0x79, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x73, 0x65,
+ 0x65, 0x6e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65,
+ 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20,
+ 0x43, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70,
+ 0x61, 0x69, 0x72, 0x73, 0x2c, 0x0d, 0x0a, 0x65, 0x78, 0x63, 0x65, 0x70,
+ 0x74, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c,
+ 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x27, 0x3f, 0x27, 0x2e, 0x20,
+ 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c,
+ 0x64, 0x0d, 0x0a, 0x62, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70,
+ 0x70, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c,
+ 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39,
+ 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x31, 0x36, 0x20, 0x3a, 0x20, 0x54,
+ 0x42, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x20, 0x64, 0x6f,
+ 0x77, 0x6e, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x20, 0x65, 0x78, 0x63,
+ 0x69, 0x73, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x44, 0x53, 0x44, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3b, 0x20,
+ 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x0d, 0x0a, 0x73,
+ 0x6f, 0x6d, 0x65, 0x20, 0x45, 0x42, 0x4e, 0x46, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x3f, 0x3f,
+ 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x73,
+ 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x63, 0x68, 0x65, 0x63,
+ 0x6b, 0x2c, 0x20, 0x66, 0x69, 0x78, 0x20, 0x75, 0x70, 0x20, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x73, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x79,
+ 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x2c, 0x0d,
+ 0x0a, 0x67, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74,
+ 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x20,
+ 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x61, 0x20, 0x66, 0x65,
+ 0x77, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d,
+ 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2f, 0x31, 0x31, 0x20, 0x3a, 0x20, 0x43,
+ 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x76, 0x61, 0x72, 0x69,
+ 0x6f, 0x75, 0x73, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61,
+ 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x69, 0x73, 0x74,
+ 0x69, 0x63, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x72, 0x67, 0x61,
+ 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0d, 0x0a,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, 0x20, 0x52, 0x65, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x6c,
+ 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x78, 0x6d, 0x6c, 0x70, 0x69, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x70, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x6d, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72,
+ 0x65, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x20, 0x70, 0x69, 0x63, 0x20, 0x72, 0x65, 0x6c, 0x69,
+ 0x61, 0x62, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x45, 0x52, 0x42, 0x20, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x2e,
+ 0x20, 0x44, 0x72, 0x6f, 0x70, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x67,
+ 0x72, 0x61, 0x70, 0x68, 0x20, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x63, 0x6f,
+ 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d,
+ 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x41, 0x64, 0x64, 0x20, 0x6d,
+ 0x61, 0x74, 0x63, 0x68, 0x2c, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x74, 0x65,
+ 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x2e, 0x20, 0x4d,
+ 0x6f, 0x76, 0x65, 0x20, 0x6f, 0x6c, 0x64, 0x20, 0x32, 0x2e, 0x32, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x70, 0x70, 0x73, 0x20,
+ 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x2e, 0x20,
+ 0x4d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x0d, 0x0a, 0x50, 0x49, 0x73, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x64,
+ 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x20, 0x65,
+ 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x53, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x64, 0x69, 0x73, 0x63,
+ 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x64,
+ 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x20,
+ 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2e, 0x20, 0x44, 0x72, 0x6f, 0x70,
+ 0x20, 0x6f, 0x6c, 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x27, 0x50, 0x49, 0x20, 0x73, 0x79, 0x6e, 0x74,
+ 0x61, 0x78, 0x27, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x6f, 0x63, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x61, 0x64, 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61,
+ 0x6c, 0x2d, 0x44, 0x54, 0x44, 0x20, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72,
+ 0x79, 0x20, 0x50, 0x49, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x64,
+ 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20,
+ 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x52, 0x65, 0x76,
+ 0x69, 0x73, 0x65, 0x20, 0x44, 0x53, 0x44, 0x20, 0x73, 0x79, 0x6e, 0x74,
+ 0x61, 0x78, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
+ 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x54, 0x69, 0x6d, 0x27, 0x73, 0x20,
+ 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2d, 0x69, 0x6e, 0x2d, 0x61, 0x2d,
+ 0x50, 0x49, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d,
+ 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31,
+ 0x30, 0x2d, 0x31, 0x30, 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20,
+ 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x72, 0x73, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65,
+ 0x3f, 0x29, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d,
+ 0x31, 0x30, 0x2d, 0x30, 0x39, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d,
+ 0x63, 0x51, 0x20, 0x3a, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2c, 0x20, 0x63,
+ 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x74,
+ 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x32, 0x2e, 0x33, 0x20, 0x28,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x29, 0x3c,
+ 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d,
+ 0x30, 0x39, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20,
+ 0x3a, 0x20, 0x72, 0x65, 0x2d, 0x75, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x65,
+ 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63,
+ 0x65, 0x2c, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x0d,
+ 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79,
+ 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65,
+ 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x3c, 0x2f, 0x73, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x38, 0x20,
+ 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74,
+ 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x20, 0x68, 0x6f, 0x6d, 0x6f, 0x67,
+ 0x65, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61,
+ 0x73, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d,
+ 0x31, 0x30, 0x2d, 0x30, 0x38, 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a,
+ 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x63, 0x75, 0x72, 0x72, 0x65,
+ 0x6e, 0x74, 0x22, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x76, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x43, 0x44, 0x41, 0x54, 0x41,
+ 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x31, 0x30,
+ 0x2d, 0x30, 0x32, 0x20, 0x3a, 0x20, 0x54, 0x42, 0x20, 0x3a, 0x20, 0x72,
+ 0x65, 0x6d, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20,
+ 0x73, 0x6b, 0x65, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x20, 0x2b, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x36, 0x2d, 0x30, 0x39, 0x2d, 0x33, 0x30, 0x20, 0x3a,
+ 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x61, 0x64,
+ 0x64, 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x6d, 0x6f, 0x72, 0x65,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x72,
+ 0x69, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x54, 0x69,
+ 0x6d, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d,
+ 0x30, 0x39, 0x2d, 0x32, 0x30, 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d,
+ 0x63, 0x51, 0x20, 0x3a, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x20,
+ 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67,
+ 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x73, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x31, 0x39, 0x39, 0x36, 0x2d, 0x30, 0x39, 0x2d, 0x31, 0x39, 0x20, 0x3a,
+ 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20, 0x62, 0x65,
+ 0x67, 0x69, 0x6e, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69,
+ 0x62, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x64, 0x72, 0x61, 0x66, 0x74, 0x2e, 0x3c, 0x2f, 0x73,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x31, 0x39, 0x39, 0x36, 0x2d, 0x30, 0x39, 0x2d, 0x31, 0x33,
+ 0x20, 0x3a, 0x20, 0x43, 0x4d, 0x53, 0x4d, 0x63, 0x51, 0x20, 0x3a, 0x20,
+ 0x6d, 0x61, 0x64, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x6e, 0x65,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x30, 0x39, 0x2d, 0x30, 0x36, 0x2c, 0x20, 0x64, 0x6f,
+ 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x6b,
+ 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x73, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+ 0x64, 0x65, 0x73, 0x63, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x65, 0x63, 0x2d, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x49, 0x6e, 0x74, 0x72, 0x6f,
+ 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70,
+ 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x61,
+ 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x58,
+ 0x4d, 0x4c, 0x2c, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x0d, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x64, 0x6f, 0x63, 0x22, 0x3e,
+ 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c,
+ 0x79, 0x0d, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f,
+ 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
+ 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x6e, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c,
+ 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63,
+ 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20,
+ 0x53, 0x47, 0x4d, 0x4c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x75,
+ 0x70, 0x0d, 0x0a, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20,
+ 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x49, 0x53, 0x4f, 0x38, 0x38, 0x37, 0x39, 0x22, 0x2f, 0x3e, 0x2e,
+ 0x20, 0x42, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x75,
+ 0x70, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+ 0x20, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65,
+ 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x20, 0x50, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73,
+ 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22,
+ 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a,
+ 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x22, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a, 0x4d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x73, 0x20, 0x73, 0x74,
+ 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x0d, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e,
+ 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73,
+ 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61,
+ 0x67, 0x65, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x3d, 0x22, 0x58, 0x4d, 0x4c, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x22, 0x3e, 0x41, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77,
+ 0x61, 0x72, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x63,
+ 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x72, 0x65, 0x61, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70,
+ 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x61, 0x70, 0x70, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x49, 0x74, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x61, 0x73, 0x73, 0x75,
+ 0x6d, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x20, 0x69, 0x73, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x69,
+ 0x74, 0x73, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x62,
+ 0x65, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c,
+ 0x0d, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x62, 0x65, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x65, 0x68, 0x61,
+ 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x68, 0x6f, 0x77, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x0d, 0x0a, 0x64,
+ 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76,
+ 0x69, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x6f, 0x72, 0x69, 0x67, 0x69,
+ 0x6e, 0x2d, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x47, 0x6f, 0x61, 0x6c, 0x73, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x58, 0x4d, 0x4c,
+ 0x20, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70,
+ 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f,
+ 0x75, 0x70, 0x20, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c,
+ 0x6c, 0x79, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x0d, 0x0a, 0x45, 0x64,
+ 0x69, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x20, 0x52, 0x65, 0x76, 0x69,
+ 0x65, 0x77, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x29, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x75, 0x73, 0x70, 0x69, 0x63, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64,
+ 0x20, 0x57, 0x69, 0x64, 0x65, 0x20, 0x57, 0x65, 0x62, 0x20, 0x43, 0x6f,
+ 0x6e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x75, 0x6d, 0x0d, 0x0a, 0x28, 0x57,
+ 0x33, 0x43, 0x29, 0x20, 0x69, 0x6e, 0x20, 0x31, 0x39, 0x39, 0x36, 0x2e,
+ 0x20, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x69,
+ 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x4a, 0x6f, 0x6e, 0x20, 0x42,
+ 0x6f, 0x73, 0x61, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x75, 0x6e, 0x20,
+ 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63,
+ 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61,
+ 0x6c, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x47,
+ 0x72, 0x6f, 0x75, 0x70, 0x20, 0x28, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f,
+ 0x75, 0x73, 0x6c, 0x79, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x0d, 0x0a,
+ 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75,
+ 0x70, 0x29, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6f, 0x72, 0x67, 0x61,
+ 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x57, 0x33, 0x43, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x57, 0x6f, 0x72, 0x6b,
+ 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x69,
+ 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x78, 0x2e, 0x20,
+ 0x44, 0x61, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x6f, 0x6c, 0x6c, 0x79,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x57, 0x47, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x57, 0x33, 0x43, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67,
+ 0x6e, 0x20, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x61, 0x72, 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20,
+ 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x72,
+ 0x61, 0x69, 0x67, 0x68, 0x74, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64,
+ 0x6c, 0x79, 0x20, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x76,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x65, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20,
+ 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x77, 0x69,
+ 0x64, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62,
+ 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x74, 0x20,
+ 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x65, 0x61, 0x73,
+ 0x79, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x70,
+ 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f,
+ 0x66, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66,
+ 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20,
+ 0x6b, 0x65, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x6d, 0x69,
+ 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x2c, 0x20, 0x69, 0x64, 0x65, 0x61, 0x6c,
+ 0x6c, 0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75,
+ 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x2d,
+ 0x6c, 0x65, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x63,
+ 0x6c, 0x65, 0x61, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
+ 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64,
+ 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64,
+ 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e,
+ 0x63, 0x69, 0x73, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62,
+ 0x65, 0x20, 0x65, 0x61, 0x73, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x54, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x65, 0x73, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x6e,
+ 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61,
+ 0x6e, 0x63, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74,
+ 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73,
+ 0x20, 0x28, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x0d, 0x0a, 0x31,
+ 0x30, 0x36, 0x34, 0x36, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x52, 0x46, 0x43, 0x20, 0x31, 0x37,
+ 0x36, 0x36, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x67, 0x73, 0x2c,
+ 0x0d, 0x0a, 0x49, 0x53, 0x4f, 0x20, 0x36, 0x33, 0x39, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x33, 0x31, 0x36, 0x36, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x29, 0x2c,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x0d, 0x0a, 0x61,
+ 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73,
+ 0x73, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x26, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x58, 0x4d, 0x4c, 0x3b, 0x20, 0x61, 0x6e,
+ 0x64, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+ 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x70, 0x72,
+ 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x69, 0x74, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, 0x21, 0x2d, 0x2d,
+ 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x26, 0x64, 0x6f, 0x63,
+ 0x2e, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x3b, 0x2e, 0x2d,
+ 0x2d, 0x3e, 0x20, 0x26, 0x64, 0x6f, 0x63, 0x2e, 0x64, 0x69, 0x73, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x6c, 0x6f,
+ 0x67, 0x79, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54,
+ 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x6c, 0x6f,
+ 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x0d,
+ 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x69, 0x73, 0x74,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x74,
+ 0x68, 0x6f, 0x73, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3a, 0x20, 0x3c, 0x67, 0x6c, 0x69,
+ 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x6d, 0x61, 0x79, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61,
+ 0x79, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x4d, 0x61, 0x79,
+ 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x73, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x70,
+ 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x62, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x73, 0x20, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x6d, 0x75, 0x73, 0x74, 0x3c,
+ 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d,
+ 0x75, 0x73, 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x4d,
+ 0x75, 0x73, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x0d, 0x0a, 0x61, 0x72,
+ 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x73, 0x20,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x3b, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x2e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x20,
+ 0x4e, 0x4f, 0x54, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x21, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73,
+ 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x61, 0x20, 0x27, 0x6d, 0x75, 0x73,
+ 0x74, 0x27, 0x20, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x61, 0x73,
+ 0x20, 0x27, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x27, 0x2e,
+ 0x20, 0x2d, 0x4d, 0x53, 0x4d, 0x20, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x41, 0x20, 0x76, 0x69,
+ 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0d, 0x0a, 0x72, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x6e, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77,
+ 0x61, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x64, 0x65, 0x74, 0x65,
+ 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72,
+ 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x72, 0x65, 0x63, 0x6f,
+ 0x76, 0x65, 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x69, 0x74, 0x2e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x66, 0x61,
+ 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3c, 0x2f, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x66, 0x61, 0x74,
+ 0x61, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x46, 0x61,
+ 0x74, 0x61, 0x6c, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x41,
+ 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69,
+ 0x6e, 0x67, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d,
+ 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72,
+ 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x0d, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20,
+ 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69,
+ 0x6e, 0x75, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x64, 0x61, 0x74, 0x61,
+ 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65,
+ 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x75, 0x63,
+ 0x68, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x49, 0x6e, 0x20, 0x6f, 0x72, 0x64,
+ 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
+ 0x74, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x75,
+ 0x6e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x0d, 0x0a,
+ 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x28,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69,
+ 0x6e, 0x67, 0x6c, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x29, 0x20, 0x61, 0x76, 0x61,
+ 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x20, 0x4f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x20, 0x66,
+ 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69,
+ 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2c, 0x20,
+ 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x69, 0x6e, 0x75, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69,
+ 0x6e, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x64,
+ 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x27, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x77, 0x61, 0x79,
+ 0x29, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x61, 0x74, 0x75, 0x73, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x41, 0x74,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67,
+ 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0d, 0x0a, 0x6d,
+ 0x61, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x28,
+ 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x61, 0x6c, 0x20, 0x76,
+ 0x65, 0x72, 0x62, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x29, 0x20, 0x62, 0x65, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x62, 0x65, 0x64, 0x3b, 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x69, 0x74,
+ 0x20, 0x64, 0x6f, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73,
+ 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f,
+ 0x72, 0x20, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x76, 0x61, 0x6c, 0x69,
+ 0x64, 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61,
+ 0x69, 0x6e, 0x74, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x76, 0x63, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22, 0x3e, 0x41, 0x20,
+ 0x72, 0x75, 0x6c, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x61,
+ 0x6c, 0x6c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76, 0x61, 0x6c, 0x69,
+ 0x64, 0x22, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x56, 0x69,
+ 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x63, 0x6f,
+ 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x3b, 0x20, 0x74, 0x68,
+ 0x65, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x2c, 0x20, 0x61, 0x74, 0x20,
+ 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x77, 0x65, 0x6c, 0x6c,
+ 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x77, 0x66,
+ 0x63, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x57, 0x65, 0x6c,
+ 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73,
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x22,
+ 0x3e, 0x41, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x74,
+ 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x77,
+ 0x65, 0x6c, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x3e, 0x77,
+ 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20,
+ 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74,
+ 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x22, 0x3e, 0x66,
+ 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x3d, 0x22, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x3e, 0x28, 0x4f, 0x66,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x72, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x29, 0x20, 0x54, 0x77, 0x6f, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x0d, 0x0a, 0x6f, 0x72, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20,
+ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63,
+ 0x61, 0x6c, 0x2e, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c,
+ 0x65, 0x0d, 0x0a, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x53,
+ 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20,
+ 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x62, 0x6f,
+ 0x74, 0x68, 0x20, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73,
+ 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x62, 0x61, 0x73, 0x65,
+ 0x2b, 0x64, 0x69, 0x61, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x73, 0x29, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x79,
+ 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61,
+ 0x6d, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x6f, 0x74,
+ 0x68, 0x0d, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x35, 0x22, 0x3e, 0x5b,
+ 0x45, 0x38, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x74,
+ 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73,
+ 0x6f, 0x6d, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61,
+ 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x20, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x4e, 0x6f, 0x0d, 0x0a, 0x63, 0x61, 0x73,
+ 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73,
+ 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x2e, 0x20,
+ 0x28, 0x4f, 0x66, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72,
+ 0x3a, 0x29, 0x20, 0x41, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x67,
+ 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70,
+ 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x66,
+ 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x20,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
+ 0x64, 0x20, 0x62, 0x79, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x70,
+ 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x28,
+ 0x4f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x3a, 0x29, 0x20, 0x41, 0x6e, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x65, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x6e,
+ 0x20, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x73, 0x68,
+ 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x20, 0x3c, 0x73, 0x70, 0x65,
+ 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x2f,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x22,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x46, 0x6f, 0x72, 0x20, 0x43,
+ 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+ 0x22, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x37,
+ 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x4d, 0x61, 0x72, 0x6b, 0x73, 0x0d, 0x0a, 0x61, 0x20, 0x73, 0x65,
+ 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x62, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x3e, 0x20, 0x61, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20,
+ 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x0d, 0x0a, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x72, 0x65, 0x6d, 0x61,
+ 0x69, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62,
+ 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x53, 0x47, 0x4d, 0x4c,
+ 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c,
+ 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x66,
+ 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6f, 0x70, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x46, 0x6f,
+ 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x38, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x37,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x4d, 0x61, 0x72, 0x6b, 0x73,
+ 0x0d, 0x0a, 0x61, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x61, 0x20, 0x6e,
+ 0x6f, 0x6e, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72,
+ 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62,
+ 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65,
+ 0x64, 0x0d, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x53,
+ 0x47, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x70, 0x72, 0x65,
+ 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x26, 0x57, 0x65,
+ 0x62, 0x53, 0x47, 0x4d, 0x4c, 0x3b, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x21, 0x2d, 0x2d, 0x20, 0x26, 0x44, 0x6f, 0x63, 0x73, 0x3b, 0x20, 0x2d,
+ 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x64, 0x6f, 0x63, 0x22, 0x20, 0x74,
+ 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x58, 0x4d, 0x4c, 0x20, 0x44, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x20, 0x41, 0x20, 0x64, 0x61,
+ 0x74, 0x61, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x73,
+ 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x58, 0x4d,
+ 0x4c, 0x0d, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74,
+ 0x20, 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x77, 0x65, 0x6c,
+ 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x3e, 0x77, 0x65, 0x6c,
+ 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x73, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x41, 0x20, 0x77, 0x65, 0x6c,
+ 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x62, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x66,
+ 0x20, 0x69, 0x74, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x73, 0x20, 0x63, 0x65,
+ 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74,
+ 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x61, 0x63,
+ 0x68, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20,
+ 0x61, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x20,
+ 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x0d,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65,
+ 0x64, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x20, 0x63,
+ 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x0d, 0x0a, 0x41, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6e, 0x74, 0x72, 0x65, 0x66, 0x22, 0x3e, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74,
+ 0x6f, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x63, 0x61, 0x75,
+ 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20,
+ 0x41, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62,
+ 0x65, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x72, 0x6f, 0x6f, 0x74, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x20, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f,
+ 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69,
+ 0x63, 0x69, 0x74, 0x0d, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x2e,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61,
+ 0x6c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x20, 0x70,
+ 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x2c, 0x20, 0x61, 0x73, 0x20,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x57, 0x65, 0x6c, 0x6c, 0x2d, 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x66, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x57,
+ 0x65, 0x6c, 0x6c, 0x2d, 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x3e,
+ 0x20, 0x41, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f,
+ 0x72, 0x6d, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x66, 0x3a, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6f, 0x6c,
+ 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x54, 0x61, 0x6b, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x74, 0x20, 0x6d, 0x65,
+ 0x65, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e,
+ 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+ 0x6e, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x45, 0x61, 0x63, 0x68,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x69,
+ 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65,
+ 0x64, 0x22, 0x3e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x6c, 0x61, 0x6e,
+ 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x70,
+ 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x22, 0x3e, 0x70, 0x72, 0x6f, 0x6c, 0x6f,
+ 0x67, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d, 0x69, 0x73, 0x63, 0x22, 0x3e,
+ 0x4d, 0x69, 0x73, 0x63, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20,
+ 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x2a, 0x20, 0x4e,
+ 0x2e, 0x42, 0x2e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x61,
+ 0x64, 0x65, 0x72, 0x73, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c,
+ 0x79, 0x20, 0x4a, 0x43, 0x29, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67,
+ 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20,
+ 0x61, 0x77, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x72, 0x65, 0x64, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x2e, 0x20, 0x49,
+ 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20,
+ 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65,
+ 0x64, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x3a, 0x0d, 0x0a, 0x69, 0x74,
+ 0x20, 0x2a, 0x73, 0x61, 0x79, 0x73, 0x2a, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x7a, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61,
+ 0x6c, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d,
+ 0x6d, 0x61, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x74,
+ 0x27, 0x73, 0x0d, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c,
+ 0x79, 0x20, 0x72, 0x65, 0x64, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x2e,
+ 0x20, 0x49, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x74, 0x68, 0x69,
+ 0x6e, 0x6b, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x72, 0x68, 0x65, 0x74,
+ 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x0d, 0x0a, 0x72, 0x65,
+ 0x64, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x75,
+ 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x2c, 0x20,
+ 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x49,
+ 0x27, 0x6d, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x69,
+ 0x74, 0x2e, 0x20, 0x49, 0x74, 0x0d, 0x0a, 0x63, 0x6f, 0x75, 0x6c, 0x64,
+ 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65,
+ 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74,
+ 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x66, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x73, 0x74,
+ 0x72, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x2e, 0x20, 0x2d, 0x4d, 0x53, 0x4d,
+ 0x20, 0x2a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x6f, 0x6f, 0x74,
+ 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x52, 0x6f, 0x6f, 0x74,
+ 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x54, 0x68,
+ 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74,
+ 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x2c, 0x0d, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x72, 0x6f,
+ 0x6f, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2c, 0x20, 0x6f,
+ 0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68,
+ 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x0d, 0x0a, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x31,
+ 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x46, 0x6f, 0x72, 0x0d,
+ 0x0a, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74, 0x61,
+ 0x67, 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69,
+ 0x73, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x74, 0x61, 0x67, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20,
+ 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x20,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x0d, 0x0a, 0x64,
+ 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65,
+ 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x6e, 0x65, 0x73,
+ 0x74, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x20,
+ 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x2f, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e, 0x41, 0x73, 0x20, 0x61,
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x66,
+ 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6e, 0x6f, 0x6e, 0x2d,
+ 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x43, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3c, 0x65, 0x6c, 0x3e,
+ 0x50, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x3c, 0x65,
+ 0x6c, 0x3e, 0x43, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x20, 0x69, 0x73, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x50, 0x3c,
+ 0x2f, 0x65, 0x6c, 0x3e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x0d, 0x0a, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x65, 0x6c, 0x3e,
+ 0x50, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x2e, 0x20, 0x3c, 0x65, 0x6c, 0x3e,
+ 0x50, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x43, 0x3c, 0x2f,
+ 0x65, 0x6c, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x65, 0x6c,
+ 0x3e, 0x43, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x20, 0x61, 0x73, 0x0d, 0x0a,
+ 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x6f, 0x66, 0x20,
+ 0x3c, 0x65, 0x6c, 0x3e, 0x50, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x68,
+ 0x61, 0x72, 0x73, 0x65, 0x74, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20,
+ 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x54, 0x65, 0x78, 0x74, 0x22, 0x3e,
+ 0x41, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x20, 0x73,
+ 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x61, 0x79, 0x0d, 0x0a,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x22,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x43, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x41, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x74, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x75, 0x6e, 0x69,
+ 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x61, 0x73,
+ 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30,
+ 0x36, 0x34, 0x36, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x36, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x37, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x28, 0x73, 0x65, 0x65, 0x0d, 0x0a, 0x61, 0x6c,
+ 0x73, 0x6f, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34, 0x36,
+ 0x2d, 0x32, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x29, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2e, 0x20, 0x4c, 0x65, 0x67, 0x61,
+ 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x61, 0x62, 0x2c, 0x20, 0x63, 0x61,
+ 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x0d, 0x0a, 0x72, 0x65, 0x74, 0x75,
+ 0x72, 0x6e, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x65, 0x65,
+ 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x65, 0x67, 0x61, 0x6c, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x33, 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x35, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x6f, 0x66, 0x20,
+ 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64,
+ 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x39,
+ 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20,
+ 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x20, 0x63, 0x69,
+ 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63,
+ 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63,
+ 0x2d, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x74,
+ 0x64, 0x73, 0x22, 0x2f, 0x3e, 0x20, 0x77, 0x65, 0x72, 0x65, 0x0d, 0x0a,
+ 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x61,
+ 0x73, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x20,
+ 0x4e, 0x65, 0x77, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x61, 0x64,
+ 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x73,
+ 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x20,
+ 0x62, 0x79, 0x20, 0x61, 0x6d, 0x65, 0x6e, 0x64, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x65, 0x64, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x65,
+ 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x0d,
+ 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x61,
+ 0x6e, 0x67, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65,
+ 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x65,
+ 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x79, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c,
+ 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a,
+ 0x36, 0x2e, 0x38, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72,
+ 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x55, 0x6e, 0x69, 0x63,
+ 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x36, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x37, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x28, 0x73, 0x65, 0x65, 0x0d, 0x0a, 0x61,
+ 0x6c, 0x73, 0x6f, 0x20, 0x44, 0x32, 0x31, 0x20, 0x69, 0x6e, 0x20, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x2e, 0x36, 0x20, 0x6f,
+ 0x66, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x33, 0x22,
+ 0x2f, 0x3e, 0x29, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x2c, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x72,
+ 0x61, 0x67, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x68, 0x61, 0x72,
+ 0x33, 0x32, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x52, 0x61,
+ 0x6e, 0x67, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70,
+ 0x63, 0x77, 0x32, 0x3d, 0x22, 0x34, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34,
+ 0x3d, 0x22, 0x31, 0x37, 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35,
+ 0x3d, 0x22, 0x31, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x43, 0x68,
+ 0x61, 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x23, 0x78, 0x39, 0x20, 0x7c, 0x20, 0x23, 0x78, 0x41, 0x20, 0x7c,
+ 0x20, 0x23, 0x78, 0x44, 0x20, 0x7c, 0x20, 0x5b, 0x23, 0x78, 0x32, 0x30,
+ 0x2d, 0x23, 0x78, 0x44, 0x37, 0x46, 0x46, 0x5d, 0x20, 0x7c, 0x20, 0x5b,
+ 0x23, 0x78, 0x45, 0x30, 0x30, 0x30, 0x2d, 0x23, 0x78, 0x46, 0x46, 0x46,
+ 0x44, 0x5d, 0x20, 0x7c, 0x20, 0x5b, 0x23, 0x78, 0x31, 0x30, 0x30, 0x30,
+ 0x30, 0x2d, 0x23, 0x78, 0x31, 0x30, 0x46, 0x46, 0x46, 0x46, 0x5d, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x63, 0x6f, 0x6d, 0x3e,
+ 0x61, 0x6e, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x65,
+ 0x78, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x67, 0x61, 0x74, 0x65, 0x20, 0x62,
+ 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2c, 0x20, 0x46, 0x46, 0x46, 0x45, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x46, 0x46, 0x46, 0x46, 0x2e, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68,
+ 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x6f,
+ 0x69, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x62, 0x69,
+ 0x74, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x20, 0x6d,
+ 0x61, 0x79, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x63, 0x63, 0x65,
+ 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x0d,
+ 0x0a, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x3b, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x69, 0x6e,
+ 0x67, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x75, 0x73, 0x65, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x62, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x70, 0x6c, 0x61, 0x79,
+ 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73,
+ 0x73, 0x65, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x61, 0x72, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x52, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20,
+ 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20,
+ 0x62, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65,
+ 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x68, 0x65,
+ 0x78, 0x61, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x65, 0x71,
+ 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x20, 0x63, 0x6f,
+ 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69,
+ 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2d, 0x73, 0x79, 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x53, 0x79,
+ 0x6e, 0x74, 0x61, 0x63, 0x74, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e, 0x73,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62,
+ 0x6f, 0x6c, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x77, 0x69, 0x64,
+ 0x65, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67,
+ 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x28, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d,
+ 0x6f, 0x72, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x28, 0x23,
+ 0x78, 0x32, 0x30, 0x29, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61,
+ 0x67, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x2c, 0x20,
+ 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x65, 0x65, 0x64, 0x73, 0x2c, 0x20,
+ 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x57, 0x68, 0x69, 0x74, 0x65, 0x20, 0x53, 0x70,
+ 0x61, 0x63, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70,
+ 0x63, 0x77, 0x32, 0x3d, 0x22, 0x34, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34,
+ 0x3d, 0x22, 0x31, 0x37, 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35,
+ 0x3d, 0x22, 0x31, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x23, 0x78, 0x32, 0x30,
+ 0x20, 0x7c, 0x20, 0x23, 0x78, 0x39, 0x20, 0x7c, 0x20, 0x23, 0x78, 0x44,
+ 0x20, 0x7c, 0x20, 0x23, 0x78, 0x41, 0x29, 0x2b, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x76,
+ 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x6c,
+ 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x64, 0x69, 0x67, 0x69,
+ 0x74, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72,
+ 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73,
+ 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x30, 0x22,
+ 0x3e, 0x5b, 0x45, 0x33, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x41, 0x0d, 0x0a, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e,
+ 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x20,
+ 0x6f, 0x72, 0x20, 0x73, 0x79, 0x6c, 0x6c, 0x61, 0x62, 0x69, 0x63, 0x20,
+ 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x65,
+ 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x0d, 0x0a, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76,
+ 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72,
+ 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x43, 0x68, 0x61, 0x72,
+ 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x22, 0x2f, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x41, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65,
+ 0x72, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x70, 0x75, 0x6e, 0x63, 0x74, 0x75,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x0d, 0x0a, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20,
+ 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x68, 0x79, 0x70, 0x68,
+ 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63,
+ 0x6f, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x73,
+ 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x73, 0x74,
+ 0x6f, 0x70, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x0d, 0x0a, 0x61, 0x73, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x3e, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x62, 0x65, 0x67,
+ 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x78, 0x6d, 0x6c, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20,
+ 0x61, 0x6e, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6d,
+ 0x61, 0x74, 0x63, 0x68, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x28,
+ 0x28, 0x27, 0x58, 0x27, 0x7c, 0x27, 0x78, 0x27, 0x29, 0x20, 0x28, 0x27,
+ 0x4d, 0x27, 0x7c, 0x27, 0x6d, 0x27, 0x29, 0x20, 0x28, 0x27, 0x4c, 0x27,
+ 0x7c, 0x27, 0x6c, 0x27, 0x29, 0x29, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x61,
+ 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x72, 0x20,
+ 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6e, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x38, 0x22, 0x3e, 0x5b, 0x45,
+ 0x39, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x65,
+ 0x0d, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x52, 0x65, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c,
+ 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x2f, 0x3e,
+ 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x6d,
+ 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68,
+ 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x75, 0x74,
+ 0x68, 0x6f, 0x72, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x65, 0x78, 0x63, 0x65,
+ 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65,
+ 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x0d, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41,
+ 0x6e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x29,
+ 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6d, 0x69, 0x78, 0x74,
+ 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0d,
+ 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x72,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4c,
+ 0x65, 0x74, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x4c, 0x65, 0x74, 0x74, 0x65,
+ 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x69, 0x67,
+ 0x69, 0x74, 0x22, 0x3e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x27, 0x2e, 0x27, 0x20, 0x7c, 0x20,
+ 0x27, 0x2d, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x27, 0x20, 0x7c, 0x20,
+ 0x27, 0x3a, 0x27, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
+ 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x6f, 0x6d,
+ 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74, 0x65, 0x6e,
+ 0x64, 0x65, 0x72, 0x22, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65,
+ 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x22,
+ 0x3e, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x3a, 0x27,
+ 0x29, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x29, 0x2a, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e,
+ 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65,
+ 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29,
+ 0x2a, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x6d, 0x74, 0x6f, 0x6b,
+ 0x65, 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x43, 0x68, 0x61, 0x72,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2b, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65,
+ 0x6e, 0x73, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d,
+ 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d, 0x74, 0x6f,
+ 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x61, 0x20, 0x64,
+ 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x2e, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x28, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x0d,
+ 0x0a, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c,
+ 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29,
+ 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c,
+ 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x73,
+ 0x63, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x22, 0x27, 0x20, 0x28, 0x5b, 0x5e, 0x25,
+ 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x22, 0x5d, 0x20, 0x7c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45,
+ 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x50,
+ 0x45, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x52, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x20, 0x27,
+ 0x22, 0x27, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x20,
+ 0x22, 0x27, 0x22, 0x20, 0x28, 0x5b, 0x5e, 0x25, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x27, 0x5d, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x50, 0x45, 0x52, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x20, 0x22, 0x27, 0x22, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x41, 0x74, 0x74,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x22, 0x27, 0x20, 0x28, 0x5b, 0x5e, 0x26,
+ 0x6c, 0x74, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x22, 0x5d, 0x20, 0x7c,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e,
+ 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x29, 0x2a, 0x0d, 0x0a, 0x27, 0x22, 0x27, 0x20, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x20, 0x22, 0x27, 0x22, 0x20, 0x28,
+ 0x5b, 0x5e, 0x26, 0x6c, 0x74, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x27,
+ 0x5d, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x0d, 0x0a, 0x22, 0x27, 0x22,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
+ 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69,
+ 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x28, 0x27, 0x22, 0x27, 0x20, 0x5b, 0x5e, 0x22,
+ 0x5d, 0x2a, 0x20, 0x27, 0x22, 0x27, 0x29, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x28, 0x22, 0x27, 0x22, 0x20, 0x5b, 0x5e, 0x27, 0x5d,
+ 0x2a, 0x20, 0x22, 0x27, 0x22, 0x29, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x50, 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50, 0x75,
+ 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x22, 0x27,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x50, 0x75, 0x62, 0x69, 0x64, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e,
+ 0x50, 0x75, 0x62, 0x69, 0x64, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x2a, 0x20, 0x27, 0x22, 0x27, 0x0d, 0x0a, 0x7c, 0x20, 0x22,
+ 0x27, 0x22, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x75, 0x62, 0x69, 0x64, 0x43, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0x50, 0x75, 0x62, 0x69, 0x64, 0x43, 0x68, 0x61, 0x72,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x2d, 0x20, 0x22, 0x27, 0x22, 0x29,
+ 0x2a, 0x20, 0x22, 0x27, 0x22, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50,
+ 0x75, 0x62, 0x69, 0x64, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50, 0x75, 0x62, 0x69, 0x64, 0x43, 0x68,
+ 0x61, 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x23, 0x78, 0x32, 0x30, 0x20, 0x7c, 0x20, 0x23, 0x78, 0x44, 0x20,
+ 0x7c, 0x20, 0x23, 0x78, 0x41, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x2d, 0x27, 0x28,
+ 0x29, 0x2b, 0x2c, 0x2e, 0x2f, 0x3a, 0x3d, 0x3f, 0x3b, 0x21, 0x2a, 0x23,
+ 0x40, 0x24, 0x5f, 0x25, 0x5d, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6e, 0x6f, 0x74,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x32, 0x22, 0x3e, 0x5b, 0x45,
+ 0x37, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x6c, 0x74,
+ 0x68, 0x6f, 0x75, 0x67, 0x68, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67,
+ 0x6c, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x0d, 0x0a, 0x28, 0x65,
+ 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26,
+ 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d,
+ 0x79, 0x6c, 0x74, 0x20, 0x22, 0x26, 0x6c, 0x74, 0x3b, 0x22, 0x3e, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x20,
+ 0x61, 0x64, 0x76, 0x69, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61,
+ 0x76, 0x6f, 0x69, 0x64, 0x0d, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70,
+ 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x69, 0x6e, 0x63,
+ 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
+ 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x61, 0x20, 0x77, 0x65, 0x6c, 0x6c,
+ 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x0d,
+ 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x54, 0x65, 0x78,
+ 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x64,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x22, 0x0d, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x22, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x65, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x2d,
+ 0x74, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6d, 0x70,
+ 0x74, 0x79, 0x22, 0x3e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x22, 0x3e,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x72, 0x65, 0x66, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x64, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d,
+ 0x69, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x69, 0x22, 0x3e, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61,
+ 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x38, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x39,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x58, 0x4d, 0x4c, 0x44,
+ 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6c,
+ 0x22, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x77,
+ 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x28,
+ 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x69, 0x73, 0x2c, 0x20, 0x6f, 0x75,
+ 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69,
+ 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x29, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72,
+ 0x64, 0x61, 0x74, 0x61, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x44, 0x61,
+ 0x74, 0x61, 0x22, 0x3e, 0x41, 0x6c, 0x6c, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x0d, 0x0a, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x61, 0x6d, 0x70, 0x65,
+ 0x72, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x28, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x29, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74,
+ 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b,
+ 0x65, 0x74, 0x20, 0x28, 0x26, 0x6c, 0x74, 0x3b, 0x29, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72,
+ 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3c, 0x65, 0x6d, 0x70,
+ 0x68, 0x3e, 0x6f, 0x6e, 0x6c, 0x79, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68,
+ 0x3e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x6f, 0x72,
+ 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22,
+ 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x70, 0x69, 0x22, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x63, 0x64, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31,
+ 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x54, 0x68, 0x65, 0x79, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20,
+ 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x6c, 0x69, 0x74, 0x65, 0x6e, 0x74, 0x76, 0x61, 0x6c,
+ 0x22, 0x3e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x73, 0x65, 0x65,
+ 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x46, 0x49, 0x4e,
+ 0x41, 0x4c, 0x20, 0x45, 0x44, 0x49, 0x54, 0x3a, 0x20, 0x72, 0x65, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x69,
+ 0x74, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a,
+ 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x6e, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x77,
+ 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x22, 0x3e, 0x65, 0x73, 0x63, 0x61,
+ 0x70, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x69, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61,
+ 0x72, 0x72, 0x65, 0x66, 0x22, 0x3e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69,
+ 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73,
+ 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x6d, 0x70, 0x3b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x73,
+ 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x2e, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x6e, 0x67,
+ 0x6c, 0x65, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x28,
+ 0x3e, 0x29, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x67, 0x74, 0x3b,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d,
+ 0x70, 0x61, 0x74, 0x22, 0x3e, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d,
+ 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x62, 0x65,
+ 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x0d, 0x0a, 0x75, 0x73,
+ 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x67, 0x74,
+ 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69,
+ 0x74, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20,
+ 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2c, 0x20,
+ 0x77, 0x68, 0x65, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x63, 0x64, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41, 0x0d, 0x0a, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x2c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e,
+ 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x64, 0x65, 0x6c,
+ 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e,
+ 0x79, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x2e, 0x20, 0x49, 0x6e,
+ 0x20, 0x61, 0x20, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x73,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
+ 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x2d, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x63, 0x6c,
+ 0x6f, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x65, 0x72, 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x61, 0x70, 0x6f, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x68, 0x65, 0x20,
+ 0x6f, 0x72, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x28, 0x27, 0x29, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+ 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x70,
+ 0x6f, 0x73, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x28, 0x22, 0x29, 0x20, 0x61, 0x73, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e,
+ 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x44, 0x61, 0x74,
+ 0x61, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43,
+ 0x68, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x5b,
+ 0x5e, 0x26, 0x6c, 0x74, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x5d, 0x2a,
+ 0x20, 0x2d, 0x20, 0x28, 0x5b, 0x5e, 0x26, 0x6c, 0x74, 0x3b, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x5d, 0x2a, 0x20, 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74,
+ 0x3b, 0x27, 0x20, 0x5b, 0x5e, 0x26, 0x6c, 0x74, 0x3b, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x5d, 0x2a, 0x29, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69,
+ 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x79, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x75,
+ 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x22,
+ 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3b, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61,
+ 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x61, 0x74, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x0d,
+ 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x2e,
+ 0x20, 0x54, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x0d, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3b, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20,
+ 0x6d, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65,
+ 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x2c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20,
+ 0x69, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72,
+ 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63,
+ 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
+ 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x2d, 0x2d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x28, 0x64, 0x6f, 0x75, 0x62,
+ 0x6c, 0x65, 0x2d, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x29, 0x0d, 0x0a,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x63, 0x63,
+ 0x75, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d,
+ 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x36, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x33, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e,
+ 0x69, 0x7a, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d,
+ 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73,
+ 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x2d, 0x2d, 0x27, 0x20, 0x28, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x2d,
+ 0x20, 0x27, 0x2d, 0x27, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x27, 0x2d, 0x27,
+ 0x0d, 0x0a, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61,
+ 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x2d, 0x20, 0x27, 0x2d, 0x27,
+ 0x29, 0x29, 0x29, 0x2a, 0x20, 0x27, 0x2d, 0x2d, 0x3e, 0x27, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70,
+ 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x26, 0x63, 0x6f, 0x6d, 0x6f,
+ 0x3b, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x26, 0x6c, 0x74, 0x3b, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x20, 0x26,
+ 0x6c, 0x74, 0x3b, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x20, 0x26, 0x63, 0x6f,
+ 0x6d, 0x63, 0x3b, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x32, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x37, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x0d, 0x0a, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d,
+ 0x61, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69,
+ 0x6e, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2d, 0x2d, 0x2d, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x20, 0x54, 0x68, 0x65,
+ 0x0d, 0x0a, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
+ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x3c,
+ 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x6e, 0x6f, 0x74, 0x3c, 0x2f, 0x65, 0x6d,
+ 0x70, 0x68, 0x3e, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x2d, 0x2d, 0x20, 0x42, 0x2b, 0x2c,
+ 0x20, 0x42, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x42, 0x2d, 0x2d, 0x2d, 0x3e,
+ 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76,
+ 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x70, 0x69, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x69, 0x22,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x28, 0x50, 0x49,
+ 0x73, 0x29, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c,
+ 0x68, 0x73, 0x3e, 0x50, 0x49, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x3f, 0x27, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x50, 0x49, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x3e, 0x50, 0x49,
+ 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x20, 0x2d, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x2a, 0x20, 0x26, 0x70, 0x69, 0x63, 0x3b, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72,
+ 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a,
+ 0x29, 0x29, 0x29, 0x3f, 0x20, 0x26, 0x70, 0x69, 0x63, 0x3b, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50, 0x49, 0x54,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x2d, 0x20, 0x28, 0x28,
+ 0x27, 0x58, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x78, 0x27, 0x29, 0x20, 0x28,
+ 0x27, 0x4d, 0x27, 0x20, 0x7c, 0x0d, 0x0a, 0x27, 0x6d, 0x27, 0x29, 0x20,
+ 0x28, 0x27, 0x4c, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x6c, 0x27, 0x29, 0x29,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x50, 0x49, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x27, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68,
+ 0x61, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70,
+ 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67,
+ 0x68, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68,
+ 0x65, 0x20, 0x50, 0x49, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x0d,
+ 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x22, 0x3e, 0x50, 0x49, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x29, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x72,
+ 0x67, 0x65, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x58,
+ 0x4d, 0x4c, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x78, 0x6d, 0x6c, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x20,
+ 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x66,
+ 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0d, 0x0a,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6d, 0x65, 0x63,
+ 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x0d, 0x0a, 0x6d, 0x61, 0x79, 0x20,
+ 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x49,
+ 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x2e, 0x20, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x33, 0x22, 0x3e, 0x5b, 0x45,
+ 0x36, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x50, 0x61, 0x72,
+ 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65,
+ 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76,
+ 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x64, 0x61, 0x74, 0x61, 0x2d,
+ 0x73, 0x65, 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x53, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x64, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x6d, 0x61, 0x79,
+ 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x77, 0x68,
+ 0x65, 0x72, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65,
+ 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73,
+ 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x6d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x2e, 0x0d, 0x0a, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62,
+ 0x65, 0x67, 0x69, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c,
+ 0x74, 0x3b, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3a, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x44, 0x41,
+ 0x54, 0x41, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x53,
+ 0x65, 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x43, 0x44, 0x53, 0x65, 0x63, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x53, 0x74, 0x61, 0x72, 0x74,
+ 0x22, 0x3e, 0x43, 0x44, 0x53, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x43, 0x44,
+ 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x44,
+ 0x45, 0x6e, 0x64, 0x22, 0x3e, 0x43, 0x44, 0x45, 0x6e, 0x64, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x53,
+ 0x74, 0x61, 0x72, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73,
+ 0x3e, 0x43, 0x44, 0x53, 0x74, 0x61, 0x72, 0x74, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x27, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x43, 0x44, 0x61, 0x74, 0x61, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2a, 0x20, 0x2d, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x0d, 0x0a,
+ 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x27, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61,
+ 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x2a, 0x29, 0x29, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x44,
+ 0x45, 0x6e, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x43, 0x44, 0x45, 0x6e, 0x64, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x27,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e,
+ 0x20, 0x61, 0x20, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x44, 0x45, 0x6e, 0x64, 0x22, 0x3e, 0x43, 0x44,
+ 0x45, 0x6e, 0x64, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x0d, 0x0a, 0x72, 0x65, 0x63, 0x6f,
+ 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x73,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6c, 0x69, 0x74,
+ 0x65, 0x72, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0x20, 0x74,
+ 0x68, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74,
+ 0x29, 0x20, 0x62, 0x65, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64,
+ 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64,
+ 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x6d, 0x70, 0x3b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x2e, 0x20, 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70,
+ 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74,
+ 0x3b, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b,
+ 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e,
+ 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61,
+ 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x22, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75,
+ 0x70, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3a,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c,
+ 0x74, 0x3b, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x26, 0x6c,
+ 0x74, 0x3b, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e, 0x48,
+ 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21,
+ 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e,
+ 0x67, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x20, 0x3c, 0x2f, 0x65,
+ 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x2d, 0x64, 0x74,
+ 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x50,
+ 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x44, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20,
+ 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20,
+ 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x58, 0x4d, 0x4c, 0x20, 0x44, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x58,
+ 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x37,
+ 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x58, 0x4d,
+ 0x4c, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20,
+ 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
+ 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x6c, 0x65, 0x74, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22,
+ 0x3e, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3a, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b,
+ 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31, 0x2e, 0x30,
+ 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e,
+ 0x67, 0x3e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72,
+ 0x6c, 0x64, 0x21, 0x3c, 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e,
+ 0x67, 0x3e, 0x20, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x69,
+ 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x5b, 0x3c, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e,
+ 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64,
+ 0x21, 0x3c, 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e,
+ 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x31, 0x2e, 0x30,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e,
+ 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x69,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x31, 0x2e, 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74,
+ 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x74,
+ 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x67, 0x69, 0x76, 0x65,
+ 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x31, 0x2e,
+ 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x62, 0x75, 0x74, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x64,
+ 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x69,
+ 0x63, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69,
+ 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f,
+ 0x64, 0x75, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x75, 0x74,
+ 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73,
+ 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x58, 0x4d, 0x4c, 0x2c, 0x20, 0x6e, 0x6f,
+ 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x2c, 0x20, 0x74,
+ 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61,
+ 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x65, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x66, 0x75,
+ 0x74, 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x75,
+ 0x6c, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74,
+ 0x6f, 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69,
+ 0x63, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65,
+ 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x73,
+ 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63,
+ 0x6f, 0x6d, 0x65, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72,
+ 0x79, 0x2e, 0x0d, 0x0a, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61,
+ 0x6c, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69,
+ 0x76, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x62, 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x74,
+ 0x6f, 0x72, 0x61, 0x67, 0x65, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x6c,
+ 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x69, 0x74, 0x73, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x0d, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73,
+ 0x2e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+ 0x65, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69,
+ 0x73, 0x6d, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x74, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c,
+ 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x0d, 0x0a,
+ 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x75, 0x6e, 0x69,
+ 0x74, 0x73, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76, 0x61, 0x6c, 0x69,
+ 0x64, 0x22, 0x0d, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x56, 0x61,
+ 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x69, 0x66,
+ 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e,
+ 0x74, 0x73, 0x0d, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x74, 0x2e, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x62, 0x65, 0x66,
+ 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73,
+ 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x78, 0x6d, 0x6c, 0x64,
+ 0x6f, 0x63, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x50, 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70,
+ 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x37, 0x2e, 0x35, 0x22, 0x20, 0x70,
+ 0x63, 0x77, 0x35, 0x3d, 0x22, 0x39, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x70,
+ 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x70, 0x72, 0x6f, 0x6c, 0x6f, 0x67, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x58, 0x4d, 0x4c, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x44, 0x65, 0x63, 0x6c, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d, 0x69, 0x73, 0x63, 0x22, 0x3e,
+ 0x4d, 0x69, 0x73, 0x63, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x0d, 0x0a,
+ 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x63,
+ 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d, 0x69, 0x73, 0x63, 0x22,
+ 0x3e, 0x4d, 0x69, 0x73, 0x63, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x29,
+ 0x3f, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x58, 0x4d, 0x4c, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x58,
+ 0x4d, 0x4c, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x26, 0x70, 0x69, 0x6f, 0x3b, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3e,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x45, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x44, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x53,
+ 0x44, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x26, 0x70, 0x69, 0x63, 0x3b, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x27, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x27, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x45, 0x71, 0x22, 0x3e, 0x45, 0x71, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x28, 0x22, 0x27, 0x22, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x3e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x4e, 0x75, 0x6d, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x22, 0x27,
+ 0x22, 0x20, 0x7c, 0x20, 0x27, 0x22, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x3e, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x27, 0x22, 0x27, 0x29, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x35,
+ 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x45, 0x71, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x45, 0x71, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x27, 0x3d, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x3f, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c,
+ 0x68, 0x73, 0x3e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75,
+ 0x6d, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f,
+ 0x2e, 0x3a, 0x5d, 0x20, 0x7c, 0x20, 0x27, 0x2d, 0x27, 0x29, 0x2b, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d, 0x69, 0x73, 0x63, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4d, 0x69, 0x73, 0x63, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49, 0x22,
+ 0x3e, 0x50, 0x49, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79,
+ 0x70, 0x65, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x44, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20,
+ 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d,
+ 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x72,
+ 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x0d, 0x0a,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20,
+ 0x61, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20,
+ 0x54, 0x68, 0x69, 0x73, 0x0d, 0x0a, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61,
+ 0x72, 0x20, 0x69, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61,
+ 0x73, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61,
+ 0x6e, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x28, 0x61, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x61, 0x6c, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74,
+ 0x2c, 0x20, 0x6f, 0x72, 0x0d, 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x6f,
+ 0x20, 0x62, 0x6f, 0x74, 0x68, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x44,
+ 0x54, 0x44, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73,
+ 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x73,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x6e,
+ 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72,
+ 0x6d, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x20,
+ 0x41, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x6d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x69,
+ 0x73, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c,
+ 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e,
+ 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x6e, 0x6f, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x6e, 0x6f, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65,
+ 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x50, 0x45, 0x22, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x61,
+ 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x0d,
+ 0x0a, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x34, 0x22, 0x3e, 0x5b,
+ 0x45, 0x31, 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x66, 0x75,
+ 0x72, 0x74, 0x68, 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x65, 0x20, 0x3c, 0x73, 0x70,
+ 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x2d,
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x64, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20,
+ 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77,
+ 0x34, 0x3d, 0x22, 0x31, 0x37, 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77,
+ 0x35, 0x3d, 0x22, 0x39, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x64, 0x6f, 0x63,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x64,
+ 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68,
+ 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x44, 0x4f, 0x43, 0x54,
+ 0x59, 0x50, 0x45, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e,
+ 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x3f,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x0d,
+ 0x0a, 0x28, 0x27, 0x5b, 0x27, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x6d, 0x61, 0x72, 0x6b, 0x75,
+ 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75,
+ 0x70, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70, 0x22, 0x3e, 0x44, 0x65, 0x63,
+ 0x6c, 0x53, 0x65, 0x70, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x0d,
+ 0x0a, 0x27, 0x5d, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x29, 0x3f, 0x20, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x76, 0x63, 0x2d, 0x72, 0x6f, 0x6f, 0x74, 0x74, 0x79, 0x70, 0x65, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x45, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x22, 0x0d, 0x0a,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45,
+ 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x44, 0x65, 0x63, 0x6c, 0x53,
+ 0x65, 0x70, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x22, 0x3e, 0x50, 0x45, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e,
+ 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x50, 0x45, 0x2d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x2d, 0x44,
+ 0x65, 0x63, 0x6c, 0x73, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31,
+ 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x64,
+ 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68,
+ 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63,
+ 0x6c, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65,
+ 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41,
+ 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e,
+ 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x50, 0x49, 0x22, 0x3e, 0x50, 0x49, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x4d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x2f, 0x3e,
+ 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x77, 0x66,
+ 0x63, 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x22, 0x2f, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64,
+ 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x32,
+ 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x20, 0x61, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66,
+ 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x64,
+ 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65,
+ 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75,
+ 0x62, 0x73, 0x65, 0x74, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x75, 0x70,
+ 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x20, 0x6f, 0x72,
+ 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65,
+ 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6f,
+ 0x66, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x22, 0x3e, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72,
+ 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6c, 0x61,
+ 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69,
+ 0x64, 0x75, 0x61, 0x6c, 0x0d, 0x0a, 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72,
+ 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x44,
+ 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x6f, 0x6e, 0x29, 0x20, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x61, 0x66, 0x74, 0x65, 0x72, 0x3c,
+ 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x22, 0x3e, 0x69,
+ 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x37, 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x35, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x61, 0x6e, 0x79, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x54, 0x44, 0x20, 0x28, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x29, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x69, 0x6e,
+ 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2c, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e,
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x0d,
+ 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72,
+ 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x28, 0x73, 0x65, 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63,
+ 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x65, 0x63,
+ 0x74, 0x22, 0x2f, 0x3e, 0x29, 0x2e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x79,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x72, 0x65,
+ 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75,
+ 0x62, 0x73, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x74,
+ 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x65, 0x6c, 0x6f,
+ 0x77, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x72,
+ 0x6f, 0x6f, 0x74, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x45, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x3e, 0x72,
+ 0x6f, 0x6f, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x4d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x44,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x50,
+ 0x45, 0x20, 0x4e, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x50, 0x61, 0x72,
+ 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74,
+ 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c,
+ 0x79, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x54,
+ 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61,
+ 0x79, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x6d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x6d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x29, 0x20, 0x69, 0x73, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x52,
+ 0x65, 0x66, 0x22, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x66, 0x63, 0x2d, 0x50, 0x45, 0x69,
+ 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x50,
+ 0x45, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x44, 0x54, 0x44, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2c, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x22, 0x3e,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72,
+ 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ 0x6f, 0x63, 0x63, 0x75, 0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x0d, 0x0a, 0x28, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f,
+ 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79,
+ 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x63, 0x63, 0x75,
+ 0x72, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e,
+ 0x29, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63,
+ 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x45, 0x78, 0x74, 0x53,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x39, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x0d, 0x0a, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x65,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73,
+ 0x65, 0x74, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2c, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x53, 0x75,
+ 0x62, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x53, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x50, 0x45, 0x2d, 0x62, 0x65, 0x74, 0x77, 0x65,
+ 0x65, 0x6e, 0x2d, 0x44, 0x65, 0x63, 0x6c, 0x73, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30,
+ 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x50, 0x45, 0x0d, 0x0a,
+ 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x44, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70,
+ 0x22, 0x3e, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73,
+ 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x53,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77,
+ 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x4c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b,
+ 0x45, 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70, 0x22,
+ 0x3e, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65, 0x70, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x0d, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
+ 0x6c, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x70, 0x65, 0x72,
+ 0x73, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x77, 0x68, 0x69,
+ 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x22,
+ 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2e, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c,
+ 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x31,
+ 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x74, 0x68, 0x65,
+ 0x73, 0x65, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f,
+ 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20,
+ 0x62, 0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x3b,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x65, 0x78, 0x74, 0x2d, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77,
+ 0x32, 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22,
+ 0x31, 0x37, 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22,
+ 0x39, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x53, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x6c,
+ 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x54, 0x65, 0x78, 0x74,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65,
+ 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74,
+ 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e,
+ 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x65, 0x78, 0x74,
+ 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x6d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x6d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74, 0x22, 0x3e, 0x63,
+ 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65,
+ 0x63, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x63,
+ 0x6c, 0x53, 0x65, 0x70, 0x22, 0x3e, 0x44, 0x65, 0x63, 0x6c, 0x53, 0x65,
+ 0x70, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39,
+ 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
+ 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x20,
+ 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x6d, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x50, 0x45, 0x52, 0x65, 0x66, 0x22, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d,
+ 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20,
+ 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e,
+ 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x6d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2c, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x6e,
+ 0x6c, 0x79, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x62, 0x65, 0x74,
+ 0x77, 0x65, 0x65, 0x6e, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20,
+ 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d,
+ 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41,
+ 0x54, 0x41, 0x5b, 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x3f, 0x3e,
+ 0x20, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x67,
+ 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x59, 0x53, 0x54,
+ 0x45, 0x4d, 0x20, 0x22, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 0x64, 0x74,
+ 0x64, 0x22, 0x3e, 0x20, 0x3c, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e,
+ 0x67, 0x3e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72,
+ 0x6c, 0x64, 0x21, 0x3c, 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e,
+ 0x67, 0x3e, 0x20, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x73, 0x79, 0x73, 0x69, 0x64, 0x22, 0x3e, 0x73, 0x79, 0x73, 0x74,
+ 0x65, 0x6d, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 0x64, 0x74, 0x64, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x38, 0x22, 0x3e,
+ 0x5b, 0x45, 0x37, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x0d, 0x0a, 0x28, 0x61, 0x20, 0x55,
+ 0x52, 0x49, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x29, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x20, 0x44, 0x54, 0x44, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20,
+ 0x62, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+ 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c,
+ 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 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, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x20, 0x3f, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x67,
+ 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x5b, 0x0d, 0x0a, 0x20,
+ 0x20, 0x3c, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x67,
+ 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x23, 0x50, 0x43,
+ 0x44, 0x41, 0x54, 0x41, 0x29, 0x3e, 0x0d, 0x0a, 0x5d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e, 0x48, 0x65,
+ 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x3c,
+ 0x2f, 0x67, 0x72, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x3e, 0x5d, 0x5d,
+ 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49,
+ 0x66, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65,
+ 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x62,
+ 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x2e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x27, 0x69, 0x73, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x27, 0x3f, 0x20, 0x62, 0x6f, 0x6f, 0x2e, 0x20, 0x77, 0x68, 0x61,
+ 0x7a, 0x7a, 0x61, 0x74, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x3f, 0x20, 0x2d,
+ 0x2d, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d,
+ 0x0a, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x74, 0x61, 0x6b, 0x65,
+ 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x72, 0x6d, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f,
+ 0x6e, 0x65, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4d,
+ 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x61,
+ 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61,
+ 0x73, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x6f, 0x20,
+ 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3b, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,
+ 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x0d, 0x0a, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x75,
+ 0x63, 0x68, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x34, 0x22, 0x3e, 0x5b,
+ 0x45, 0x36, 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a,
+ 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x78, 0x74, 0x6d, 0x6b, 0x70,
+ 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x4d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a,
+ 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69,
+ 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f,
+ 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x28, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x72,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x62,
+ 0x65, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6e, 0x6f,
+ 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20,
+ 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x6d, 0x29, 0x2e, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c,
+ 0x64, 0x74, 0x64, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65,
+ 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20,
+ 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x44, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22, 0x34, 0x22,
+ 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x39, 0x2e, 0x35, 0x22,
+ 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x39, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x44, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x44, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x27, 0x73, 0x74, 0x61,
+ 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x27, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x71, 0x22,
+ 0x3e, 0x45, 0x71, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x28, 0x28,
+ 0x22, 0x27, 0x22, 0x20, 0x28, 0x27, 0x79, 0x65, 0x73, 0x27, 0x20, 0x7c,
+ 0x20, 0x27, 0x6e, 0x6f, 0x27, 0x29, 0x20, 0x22, 0x27, 0x22, 0x29, 0x20,
+ 0x7c, 0x20, 0x28, 0x27, 0x22, 0x27, 0x20, 0x28, 0x27, 0x79, 0x65, 0x73,
+ 0x27, 0x20, 0x7c, 0x20, 0x27, 0x6e, 0x6f, 0x27, 0x29, 0x20, 0x27, 0x22,
+ 0x27, 0x29, 0x29, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76,
+ 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x63, 0x68,
+ 0x65, 0x63, 0x6b, 0x2d, 0x72, 0x6d, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73,
+ 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x6e,
+ 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e,
+ 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x61,
+ 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x79, 0x65, 0x73, 0x3c, 0x2f, 0x61,
+ 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63,
+ 0x61, 0x74, 0x65, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x34, 0x22, 0x3e, 0x5b,
+ 0x45, 0x36, 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x65, 0x78, 0x74, 0x6d, 0x6b, 0x70, 0x64, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x0d, 0x0a, 0x61,
+ 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61,
+ 0x73, 0x73, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20,
+ 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c,
+ 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x6e, 0x6f, 0x3c, 0x2f, 0x61,
+ 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63,
+ 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x65,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x6d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x6e,
+ 0x6f, 0x74, 0x65, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68,
+ 0x3e, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x3b, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20,
+ 0x69, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x2c, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x65, 0x6d,
+ 0x70, 0x68, 0x3e, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68,
+ 0x6f, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x6c, 0x79, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x2c, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73,
+ 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f,
+ 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d,
+ 0x0a, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x65, 0x61, 0x6e,
+ 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x6f, 0x0d, 0x0a, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f,
+ 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c,
+ 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x6e, 0x6f, 0x3c, 0x2f, 0x61,
+ 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x73,
+ 0x73, 0x75, 0x6d, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x79, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d, 0x22,
+ 0x6e, 0x6f, 0x22, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x68,
+ 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x61,
+ 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x69, 0x63, 0x61, 0x6c,
+ 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x61,
+ 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6d, 0x65,
+ 0x0d, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x64, 0x65,
+ 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2d, 0x72,
+ 0x6d, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x53, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x44, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x73, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68, 0x61, 0x76,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x3c, 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x6e, 0x6f, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x20, 0x69, 0x66, 0x0d, 0x0a,
+ 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x22, 0x3e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x2c, 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6c,
+ 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x0d, 0x0a, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x28, 0x6f, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x26, 0x6d, 0x61, 0x67, 0x69, 0x63,
+ 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x29, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x22, 0x3e,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x2c, 0x20, 0x6f, 0x72, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74,
+ 0x6f, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x41, 0x56, 0x4e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a, 0x77,
+ 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61,
+ 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c, 0x65,
+ 0x6d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c,
+ 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20,
+ 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x69, 0x6e, 0x73, 0x74,
+ 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x6f, 0x73,
+ 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75,
+ 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20,
+ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64,
+ 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67,
+ 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x26, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x58, 0x4d, 0x4c, 0x3b, 0x22, 0x20, 0x73,
+ 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d, 0x27, 0x79,
+ 0x65, 0x73, 0x27, 0x3f, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x77,
+ 0x68, 0x69, 0x74, 0x65, 0x2d, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x57, 0x68, 0x69, 0x74,
+ 0x65, 0x20, 0x53, 0x70, 0x61, 0x63, 0x65, 0x20, 0x48, 0x61, 0x6e, 0x64,
+ 0x6c, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20,
+ 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e,
+ 0x69, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x77, 0x68, 0x69, 0x74, 0x65,
+ 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x28, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2c,
+ 0x20, 0x74, 0x61, 0x62, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62,
+ 0x6c, 0x61, 0x6e, 0x6b, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x33,
+ 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x0d, 0x0a, 0x64,
+ 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
+ 0x6c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x29, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x73, 0x65, 0x74, 0x20, 0x61, 0x70, 0x61, 0x72, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x61,
+ 0x64, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x53, 0x75,
+ 0x63, 0x68, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61,
+ 0x6c, 0x6c, 0x79, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x2e, 0x20, 0x4f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x6e, 0x74, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
+ 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65,
+ 0x6c, 0x69, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70,
+ 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6f, 0x65, 0x74, 0x72, 0x79,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x70, 0x61, 0x73, 0x73,
+ 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x72, 0x6b,
+ 0x75, 0x70, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0d, 0x0a, 0x41, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e,
+ 0x67, 0x22, 0x3e, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x73, 0x6f,
+ 0x0d, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74,
+ 0x65, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x69, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c, 0x65,
+ 0x6d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x61, 0x74, 0x74, 0x72, 0x22, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x3c, 0x61, 0x74, 0x74,
+ 0x3e, 0x78, 0x6d, 0x6c, 0x3a, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x3e, 0x0d, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+ 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x6e,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x0d, 0x0a, 0x77, 0x68,
+ 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x73, 0x68,
+ 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x49,
+ 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0d,
+ 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20,
+ 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x3e, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x69, 0x66,
+ 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e,
+ 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3e, 0x65, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x77,
+ 0x68, 0x6f, 0x73, 0x65, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x38, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x31, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0d, 0x0a, 0x61,
+ 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x62, 0x6f,
+ 0x74, 0x68, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x3e, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x76,
+ 0x61, 0x6c, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x61, 0x74, 0x74,
+ 0x76, 0x61, 0x6c, 0x3e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x2e, 0x0d, 0x0a,
+ 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x21, 0x5b,
+ 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x21, 0x41, 0x54, 0x54, 0x4c,
+ 0x49, 0x53, 0x54, 0x20, 0x70, 0x6f, 0x65, 0x6d, 0x20, 0x20, 0x78, 0x6d,
+ 0x6c, 0x3a, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x28, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x7c, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x29, 0x20, 0x27, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x27, 0x3e, 0x5d, 0x5d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x2d, 0x2d, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x38,
+ 0x31, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d,
+ 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x41, 0x54, 0x54, 0x4c, 0x49, 0x53,
+ 0x54, 0x20, 0x70, 0x72, 0x65, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x20, 0x28, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x29, 0x20, 0x23, 0x46, 0x49, 0x58, 0x45, 0x44, 0x20, 0x27, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x27, 0x3e, 0x3c, 0x2f, 0x65,
+ 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c,
+ 0x3e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x2f, 0x61, 0x74,
+ 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
+ 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x27, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x2d, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x76, 0x61,
+ 0x6c, 0x3e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x76, 0x61, 0x6c, 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x64,
+ 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x0d, 0x0a,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69,
+ 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70,
+ 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20,
+ 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x6e, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69,
+ 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e, 0x78, 0x6d, 0x6c,
+ 0x3a, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x3e, 0x72,
+ 0x6f, 0x6f, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65,
+ 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65,
+ 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x64, 0x20, 0x6e, 0x6f,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x61, 0x73, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e,
+ 0x67, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x0d, 0x0a, 0x69,
+ 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76,
+ 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x6c, 0x69,
+ 0x6e, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x64, 0x2d, 0x6f, 0x66, 0x2d,
+ 0x4c, 0x69, 0x6e, 0x65, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e,
+ 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x75, 0x74, 0x65, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x64,
+ 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e,
+ 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f,
+ 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74,
+ 0x6f, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x54, 0x68,
+ 0x65, 0x73, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20,
+ 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d,
+ 0x0a, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x2d, 0x72, 0x65,
+ 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x23, 0x78, 0x44, 0x29, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x66, 0x65, 0x65, 0x64,
+ 0x20, 0x28, 0x23, 0x78, 0x41, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65,
+ 0x6c, 0x22, 0x3e, 0x54, 0x6f, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69,
+ 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x70, 0x70,
+ 0x22, 0x3e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x72, 0x65, 0x76, 0x65, 0x72, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74,
+ 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x65, 0x69, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x20, 0x74, 0x77, 0x6f, 0x2d, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x23, 0x78,
+ 0x44, 0x23, 0x78, 0x41, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64,
+ 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x23, 0x78, 0x44, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22,
+ 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x23, 0x78, 0x41, 0x2e, 0x20, 0x28, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20,
+ 0x63, 0x61, 0x6e, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x69,
+ 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f,
+ 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73,
+ 0x20, 0x74, 0x6f, 0x20, 0x23, 0x78, 0x41, 0x20, 0x6f, 0x6e, 0x20, 0x69,
+ 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
+ 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x29, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x34, 0x22, 0x3e,
+ 0x5b, 0x45, 0x31, 0x30, 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x54, 0x6f, 0x0d, 0x0a, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x70, 0x70, 0x22, 0x3e,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x0d, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x70, 0x72, 0x6f,
+ 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
+ 0x61, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61,
+ 0x6c, 0x6c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x72, 0x65, 0x61,
+ 0x6b, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x28, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x29, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74,
+ 0x2c, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x61, 0x72,
+ 0x73, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x62, 0x79, 0x20, 0x74, 0x72, 0x61,
+ 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x62, 0x6f,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x2d, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x71,
+ 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x23, 0x78, 0x44, 0x20, 0x23, 0x78,
+ 0x41, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x23, 0x78,
+ 0x44, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x0d, 0x0a, 0x23, 0x78, 0x41, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20,
+ 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x23, 0x78, 0x41, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65,
+ 0x63, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x2d, 0x74, 0x61, 0x67, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73,
+ 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75,
+ 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61,
+ 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x0d,
+ 0x0a, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x77, 0x72,
+ 0x69, 0x74, 0x74, 0x65, 0x6e, 0x2e, 0x20, 0x41, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74,
+ 0x74, 0x72, 0x22, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d,
+ 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e,
+ 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x74,
+ 0x74, 0x3e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e,
+ 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x0d, 0x0a, 0x75, 0x73, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x2e, 0x0d, 0x0a, 0x49, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x64,
+ 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d,
+ 0x0a, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37,
+ 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x3c, 0x62,
+ 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x52,
+ 0x46, 0x43, 0x31, 0x37, 0x36, 0x36, 0x22, 0x2f, 0x3e, 0x2c, 0x20, 0x3c,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x54, 0x61, 0x67,
+ 0x73, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x75,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x53, 0x74, 0x61,
+ 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x20, 0x54, 0x72, 0x61, 0x63, 0x6b,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x37, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x33, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x52, 0x46, 0x43, 0x31, 0x37,
+ 0x36, 0x36, 0x22, 0x2f, 0x3e, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+ 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x77, 0x6f, 0x2d,
+ 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x61, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0d, 0x0a, 0x62, 0x79,
+ 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39, 0x22, 0x2f, 0x3e, 0x2c,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x77, 0x6f, 0x2d, 0x6c, 0x65,
+ 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x3c, 0x62, 0x69,
+ 0x62, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x49,
+ 0x53, 0x4f, 0x33, 0x31, 0x36, 0x36, 0x22, 0x2f, 0x3e, 0x2c, 0x20, 0x6f,
+ 0x72, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x73, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
+ 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x0d, 0x0a, 0x41, 0x73,
+ 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x73, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x38, 0x22, 0x3e,
+ 0x5b, 0x45, 0x35, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c,
+ 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x49, 0x41, 0x4e, 0x41, 0x2d, 0x4c, 0x41, 0x4e, 0x47, 0x43, 0x4f, 0x44,
+ 0x45, 0x53, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x3e, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78,
+ 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x52, 0x46, 0x43, 0x31, 0x37,
+ 0x36, 0x36, 0x22, 0x2f, 0x3e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x69,
+ 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x74, 0x68, 0x72,
+ 0x65, 0x65, 0x2d, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6c, 0x61,
+ 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61,
+ 0x67, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65,
+ 0x64, 0x20, 0x62, 0x79, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39,
+ 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x33, 0x22,
+ 0x3e, 0x5b, 0x45, 0x37, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x28, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x0d, 0x0a, 0x33, 0x33, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68,
+ 0x20, 0x33, 0x38, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65,
+ 0x6e, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2e, 0x29, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
+ 0x49, 0x44, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4c,
+ 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x49, 0x44, 0x3c, 0x2f, 0x6c,
+ 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x61, 0x6e, 0x67,
+ 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x4c, 0x61, 0x6e, 0x67, 0x63, 0x6f,
+ 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x27, 0x2d, 0x27,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x53, 0x75,
+ 0x62, 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x61, 0x6e, 0x67, 0x63, 0x6f,
+ 0x64, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4c,
+ 0x61, 0x6e, 0x67, 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39,
+ 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39,
+ 0x43, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x49, 0x61, 0x6e, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x49, 0x61,
+ 0x6e, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22,
+ 0x3e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x49, 0x53, 0x4f, 0x36,
+ 0x33, 0x39, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c,
+ 0x68, 0x73, 0x3e, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39, 0x43, 0x6f, 0x64,
+ 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x20, 0x7c, 0x20, 0x5b, 0x41, 0x2d,
+ 0x5a, 0x5d, 0x29, 0x20, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x20, 0x7c,
+ 0x20, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x29, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x49, 0x61, 0x6e, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x49, 0x61, 0x6e, 0x61, 0x43, 0x6f,
+ 0x64, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x28, 0x27, 0x69, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x49, 0x27, 0x29,
+ 0x20, 0x27, 0x2d, 0x27, 0x20, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x20,
+ 0x7c, 0x20, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x29, 0x2b, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x55, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x55, 0x73, 0x65, 0x72,
+ 0x43, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x28, 0x27, 0x78, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x58,
+ 0x27, 0x29, 0x20, 0x27, 0x2d, 0x27, 0x20, 0x28, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x5d, 0x20, 0x7c, 0x20, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x29, 0x2b, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x75, 0x62,
+ 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x20, 0x7c, 0x20,
+ 0x5b, 0x41, 0x2d, 0x5a, 0x5d, 0x29, 0x2b, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x61, 0x6e, 0x67, 0x63, 0x6f, 0x64, 0x65,
+ 0x22, 0x3e, 0x4c, 0x61, 0x6e, 0x67, 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x61, 0x20, 0x74, 0x77, 0x6f,
+ 0x2d, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39, 0x22, 0x2f, 0x3e, 0x2c, 0x20,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x43, 0x6f,
+ 0x64, 0x65, 0x73, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
+ 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x61, 0x20,
+ 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x72, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+ 0x20, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x4e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x20,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x49, 0x41, 0x4e, 0x41, 0x2d, 0x4c, 0x41,
+ 0x4e, 0x47, 0x43, 0x4f, 0x44, 0x45, 0x53, 0x22, 0x2f, 0x3e, 0x3b, 0x20,
+ 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x69, 0x2d, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20,
+ 0x28, 0x6f, 0x72, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x49, 0x2d, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x61,
+ 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x61, 0x73, 0x73,
+ 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x67,
+ 0x72, 0x65, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x77,
+ 0x65, 0x65, 0x6e, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x20,
+ 0x75, 0x73, 0x65, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69,
+ 0x78, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x78, 0x2d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x58, 0x2d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75,
+ 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x79,
+ 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66,
+ 0x6c, 0x69, 0x63, 0x74, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x73,
+ 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65,
+ 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x49, 0x41, 0x4e, 0x41, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20,
+ 0x6f, 0x66, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3e,
+ 0x53, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x20,
+ 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74,
+ 0x20, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x73, 0x65, 0x67,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x75, 0x62, 0x63,
+ 0x6f, 0x64, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73,
+ 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x74, 0x77, 0x6f, 0x20, 0x6c, 0x65, 0x74,
+ 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x69,
+ 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x64, 0x65,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x33, 0x31,
+ 0x36, 0x36, 0x22, 0x2f, 0x3e, 0x2c, 0x0d, 0x0a, 0x22, 0x43, 0x6f, 0x64,
+ 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2e,
+ 0x22, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72,
+ 0x73, 0x74, 0x20, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x0d, 0x0a,
+ 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x77,
+ 0x6f, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x69,
+ 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20,
+ 0x73, 0x75, 0x62, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
+ 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x49, 0x41, 0x4e, 0x41, 0x2c, 0x20,
+ 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4c,
+ 0x61, 0x6e, 0x67, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x4c, 0x61, 0x6e,
+ 0x67, 0x63, 0x6f, 0x64, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x22,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x78, 0x2d, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x58, 0x2d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x22, 0x2e, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x49,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x61,
+ 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x69, 0x76, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20,
+ 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x6f, 0x77, 0x65,
+ 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0d,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x28, 0x69, 0x66, 0x20, 0x61, 0x6e,
+ 0x79, 0x29, 0x20, 0x69, 0x6e, 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x20,
+ 0x63, 0x61, 0x73, 0x65, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x6b, 0x65,
+ 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x63, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69,
+ 0x74, 0x69, 0x76, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
+ 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e,
+ 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x70, 0x20,
+ 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e,
+ 0x22, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x20,
+ 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, 0x78, 0x20, 0x6a, 0x75,
+ 0x6d, 0x70, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6c, 0x61, 0x7a, 0x79, 0x20, 0x64, 0x6f, 0x67, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x22, 0x3e,
+ 0x57, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20,
+ 0x69, 0x73, 0x20, 0x69, 0x74, 0x3f, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d,
+ 0x22, 0x65, 0x6e, 0x2d, 0x55, 0x53, 0x22, 0x3e, 0x57, 0x68, 0x61, 0x74,
+ 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x69, 0x74,
+ 0x3f, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x70, 0x20, 0x77,
+ 0x68, 0x6f, 0x3d, 0x22, 0x46, 0x61, 0x75, 0x73, 0x74, 0x22, 0x20, 0x64,
+ 0x65, 0x73, 0x63, 0x3d, 0x27, 0x6c, 0x65, 0x69, 0x73, 0x65, 0x27, 0x20,
+ 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x64, 0x65,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x3e, 0x48, 0x61, 0x62,
+ 0x65, 0x20, 0x6e, 0x75, 0x6e, 0x2c, 0x20, 0x61, 0x63, 0x68, 0x21, 0x20,
+ 0x50, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, 0x68, 0x69, 0x65, 0x2c,
+ 0x3c, 0x2f, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x3e, 0x4a,
+ 0x75, 0x72, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x69, 0x2c, 0x20, 0x75,
+ 0x6e, 0x64, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x7a, 0x69, 0x6e, 0x3c, 0x2f,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x3e, 0x75, 0x6e, 0x64,
+ 0x20, 0x6c, 0x65, 0x69, 0x64, 0x65, 0x72, 0x20, 0x61, 0x75, 0x63, 0x68,
+ 0x20, 0x54, 0x68, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x3c, 0x2f,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x3e, 0x64, 0x75, 0x72,
+ 0x63, 0x68, 0x61, 0x75, 0x73, 0x20, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65,
+ 0x72, 0x74, 0x20, 0x6d, 0x69, 0x74, 0x20, 0x68, 0x65, 0x69, 0xdf, 0x65,
+ 0x6d, 0x20, 0x42, 0x65, 0x6d, 0xfc, 0x68, 0x27, 0x6e, 0x2e, 0x3c, 0x2f,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x70, 0x3e, 0x5d, 0x5d, 0x3e,
+ 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x3c,
+ 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61,
+ 0x6e, 0x67, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x62, 0x6f, 0x74, 0x68,
+ 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0d, 0x0a,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x0d,
+ 0x0a, 0x28, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x76, 0x69, 0x61, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29,
+ 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f,
+ 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x72,
+ 0x65, 0x65, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x20, 0x28, 0x43, 0x44, 0x41,
+ 0x54, 0x41, 0x29, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x20,
+ 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x61, 0x74,
+ 0x74, 0x3e, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3c, 0x2f,
+ 0x61, 0x74, 0x74, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73,
+ 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70,
+ 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c,
+ 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72,
+ 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e, 0x78, 0x6d, 0x6c,
+ 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e, 0x20,
+ 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d,
+ 0x2d, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x0d, 0x0a, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x78, 0x6d, 0x6c,
+ 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x54, 0x44, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x78, 0x6d,
+ 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x61, 0x6b,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x74, 0x20, 0x68, 0x61, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20,
+ 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x74, 0x77, 0x6f, 0x0d, 0x0a, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x62, 0x6f,
+ 0x74, 0x68, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x73, 0x61, 0x6d, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69,
+ 0x76, 0x65, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3a, 0x0d,
+ 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x20, 0x78, 0x6d, 0x6c, 0x3a,
+ 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x22, 0x3e, 0x48, 0x65,
+ 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f,
+ 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e,
+ 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x22, 0x3e, 0x73, 0x68, 0x69, 0x66, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x0d,
+ 0x0a, 0x20, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x72, 0x65, 0x64,
+ 0x75, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2e, 0x20,
+ 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x54,
+ 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x27, 0x0d, 0x0a, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69,
+ 0x74, 0x61, 0x6e, 0x63, 0x65, 0x27, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x41, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e, 0x78, 0x6d, 0x6c, 0x3a, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e, 0x20, 0x6d, 0x69,
+ 0x67, 0x68, 0x74, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x65, 0x67, 0x3e, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x20,
+ 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x20, 0x23, 0x49, 0x4d, 0x50,
+ 0x4c, 0x49, 0x45, 0x44, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x62, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c,
+ 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x2c,
+ 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69,
+ 0x61, 0x74, 0x65, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f,
+ 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66,
+ 0x20, 0x46, 0x72, 0x65, 0x6e, 0x63, 0x68, 0x20, 0x70, 0x6f, 0x65, 0x6d,
+ 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73,
+ 0x68, 0x20, 0x73, 0x74, 0x75, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x6c, 0x6f, 0x73, 0x73, 0x65, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e, 0x78, 0x6d, 0x6c, 0x3a,
+ 0x6c, 0x61, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6d, 0x69,
+ 0x67, 0x68, 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x61, 0x79,
+ 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c,
+ 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x21, 0x41, 0x54,
+ 0x54, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x70, 0x6f, 0x65, 0x6d, 0x20, 0x20,
+ 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x4e, 0x4d,
+ 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x20, 0x27, 0x66, 0x72, 0x27, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x41, 0x54, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x67,
+ 0x6c, 0x6f, 0x73, 0x73, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61,
+ 0x6e, 0x67, 0x20, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x20, 0x27,
+ 0x65, 0x6e, 0x27, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x41, 0x54, 0x54, 0x4c,
+ 0x49, 0x53, 0x54, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x20, 0x20, 0x78,
+ 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x4e, 0x4d, 0x54, 0x4f,
+ 0x4b, 0x45, 0x4e, 0x20, 0x27, 0x65, 0x6e, 0x27, 0x3e, 0x5d, 0x5d, 0x3e,
+ 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76,
+ 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x26, 0x45, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x3b, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d,
+ 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x45, 0x61,
+ 0x63, 0x68, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x64, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x0d, 0x0a, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72,
+ 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72,
+ 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x67, 0x22,
+ 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x74, 0x61, 0x67,
+ 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x6f, 0x72,
+ 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x62, 0x79, 0x20,
+ 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x65, 0x74, 0x61,
+ 0x67, 0x22, 0x3e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68,
+ 0x0d, 0x0a, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61,
+ 0x73, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x69,
+ 0x74, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x69, 0x63, 0x0d, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x20, 0x28, 0x47, 0x49, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73,
+ 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x45, 0x61, 0x63, 0x68, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61,
+ 0x74, 0x74, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d,
+ 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x61, 0x74, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61,
+ 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x45, 0x6c, 0x65, 0x6d, 0x54, 0x61,
+ 0x67, 0x22, 0x3e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x45, 0x6c, 0x65, 0x6d,
+ 0x54, 0x61, 0x67, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x54, 0x61, 0x67, 0x22, 0x3e, 0x53, 0x54, 0x61, 0x67, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x45, 0x54, 0x61, 0x67, 0x22, 0x3e, 0x45, 0x54, 0x61, 0x67, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x47, 0x49,
+ 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x2f, 0x3e, 0x3c, 0x76, 0x63, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73,
+ 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c,
+ 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x28, 0x62, 0x65,
+ 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x29,
+ 0x0d, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x65, 0x78, 0x63,
+ 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x61, 0x20, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x28, 0x28, 0x27, 0x58, 0x27, 0x7c, 0x27, 0x78, 0x27, 0x29, 0x28, 0x27,
+ 0x4d, 0x27, 0x7c, 0x27, 0x6d, 0x27, 0x29, 0x28, 0x27, 0x4c, 0x27, 0x7c,
+ 0x27, 0x6c, 0x27, 0x29, 0x29, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x75,
+ 0x74, 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x47, 0x49, 0x4d, 0x61, 0x74,
+ 0x63, 0x68, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x4d,
+ 0x61, 0x74, 0x63, 0x68, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x27, 0x73, 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x6f, 0x66, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x3a,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6f, 0x6c, 0x69, 0x73, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20,
+ 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e,
+ 0x6f, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x72, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70,
+ 0x61, 0x72, 0x65, 0x6e, 0x74, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x0d, 0x0a, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c,
+ 0x61, 0x72, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x0d,
+ 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x28, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69,
+ 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x29, 0x0d, 0x0a, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x39, 0x22, 0x3e, 0x5b,
+ 0x45, 0x35, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x74, 0x68,
+ 0x65, 0x0d, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72,
+ 0x73, 0x74, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65,
+ 0x6e, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74,
+ 0x77, 0x65, 0x65, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61,
+ 0x73, 0x74, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x2e, 0x20, 0x4e, 0x6f,
+ 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x0d, 0x0a, 0x68, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x63, 0x61,
+ 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
+ 0x73, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x22, 0x3e, 0x4d, 0x69, 0x78,
+ 0x65, 0x64, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d,
+ 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64, 0x61,
+ 0x74, 0x61, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x77, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x41, 0x4e, 0x59, 0x3c, 0x2f, 0x6b, 0x77,
+ 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x68, 0x61, 0x76, 0x65,
+ 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x61, 0x67, 0x73,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x53, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x54, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x45, 0x6e,
+ 0x64, 0x2d, 0x54, 0x61, 0x67, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x45, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x54, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74,
+ 0x61, 0x67, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x53, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x54, 0x61, 0x67, 0x22, 0x3e, 0x54, 0x68, 0x65,
+ 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f,
+ 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6e, 0x6f, 0x6e, 0x2d,
+ 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0d, 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61,
+ 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61,
+ 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77,
+ 0x32, 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22,
+ 0x31, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31,
+ 0x2e, 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x54, 0x61, 0x67, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x54, 0x61, 0x67,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27,
+ 0x26, 0x6c, 0x74, 0x3b, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29,
+ 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f,
+ 0x20, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x77,
+ 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x75, 0x6e, 0x69, 0x71,
+ 0x61, 0x74, 0x74, 0x73, 0x70, 0x65, 0x63, 0x22, 0x2f, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x71, 0x22, 0x3e, 0x45, 0x71, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76,
+ 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x54, 0x79, 0x70, 0x65, 0x22, 0x2f, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x6f, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x73, 0x22, 0x2f, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x43, 0x6c,
+ 0x65, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x73, 0x22,
+ 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x73,
+ 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x73, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x0d, 0x0a, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74,
+ 0x72, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x3e, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x2d, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20,
+ 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x72,
+ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x4e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3e, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63,
+ 0x68, 0x20, 0x70, 0x61, 0x69, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x61, 0x74, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x27, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x22, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x29,
+ 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x34, 0x36, 0x22, 0x3e, 0x5b,
+ 0x45, 0x34, 0x36, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x4e, 0x6f,
+ 0x74, 0x65, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61,
+ 0x67, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x61, 0x67, 0x20,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69,
+ 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x77,
+ 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x75,
+ 0x6e, 0x69, 0x71, 0x61, 0x74, 0x74, 0x73, 0x70, 0x65, 0x63, 0x22, 0x3e,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65,
+ 0x20, 0x41, 0x74, 0x74, 0x20, 0x53, 0x70, 0x65, 0x63, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x4e, 0x6f, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x0d, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f,
+ 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x61, 0x6d, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61,
+ 0x67, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79,
+ 0x70, 0x65, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a,
+ 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x28, 0x46, 0x6f, 0x72, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x65, 0x65, 0x20, 0x3c, 0x73,
+ 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x22, 0x2f, 0x3e, 0x2e,
+ 0x29, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x6f, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x73, 0x22, 0x3e, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x6f, 0x20, 0x45, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20,
+ 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77,
+ 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x43, 0x6c,
+ 0x65, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x73, 0x22,
+ 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x6f, 0x20, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54,
+ 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c,
+ 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x6e, 0x79, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x20,
+ 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64,
+ 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x38,
+ 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x28, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x20, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x20, 0x61, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74,
+ 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61,
+ 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x64, 0x6f, 0x67, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x64, 0x6f, 0x67, 0x22, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x74, 0x61, 0x67, 0x22,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x45, 0x6e, 0x64, 0x20, 0x54,
+ 0x61, 0x67, 0x22, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20,
+ 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x65,
+ 0x67, 0x69, 0x6e, 0x73, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
+ 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x65,
+ 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0d, 0x0a,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x73, 0x20, 0x67, 0x69,
+ 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x3a, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d,
+ 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x35,
+ 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31, 0x2e, 0x35,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x54, 0x61, 0x67, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x54, 0x61, 0x67, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c,
+ 0x74, 0x3b, 0x2f, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e,
+ 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x0d, 0x0a, 0x27, 0x3e, 0x27,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67,
+ 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61,
+ 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65,
+ 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x74,
+ 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67,
+ 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x3a, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e,
+ 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32,
+ 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31,
+ 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31, 0x2e,
+ 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22,
+ 0x3e, 0x43, 0x68, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x20, 0x28, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x52, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43,
+ 0x44, 0x53, 0x65, 0x63, 0x74, 0x22, 0x3e, 0x43, 0x44, 0x53, 0x65, 0x63,
+ 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49,
+ 0x22, 0x3e, 0x50, 0x49, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43,
+ 0x68, 0x61, 0x72, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x43, 0x68, 0x61,
+ 0x72, 0x44, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x29,
+ 0x2a, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x63, 0x6f,
+ 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x37, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x31, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6d,
+ 0x70, 0x74, 0x79, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x45,
+ 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x37, 0x22, 0x3e, 0x5b,
+ 0x45, 0x39, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x6e,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x6d,
+ 0x70, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x54, 0x68,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20,
+ 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x61, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x20,
+ 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x20,
+ 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x2c, 0x0d,
+ 0x0a, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79,
+ 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x65, 0x65, 0x74, 0x61, 0x67, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x41,
+ 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x6d, 0x70, 0x74,
+ 0x79, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74,
+ 0x61, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x74, 0x61,
+ 0x6b, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61,
+ 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22,
+ 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x54, 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x45,
+ 0x6d, 0x70, 0x74, 0x79, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77,
+ 0x32, 0x3d, 0x22, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22,
+ 0x31, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31,
+ 0x2e, 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6d, 0x70, 0x74, 0x79,
+ 0x45, 0x6c, 0x65, 0x6d, 0x54, 0x61, 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x45, 0x6c, 0x65,
+ 0x6d, 0x54, 0x61, 0x67, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x27, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22,
+ 0x3e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x2f, 0x3e, 0x27, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x75, 0x6e, 0x69, 0x71, 0x61, 0x74, 0x74, 0x73, 0x70, 0x65,
+ 0x63, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73,
+ 0x20, 0x6e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2c,
+ 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+ 0x64, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x3c,
+ 0x2f, 0x6b, 0x77, 0x3e, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x0d,
+ 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6d, 0x70,
+ 0x74, 0x79, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x61, 0x67, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64,
+ 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x34,
+ 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x0d, 0x0a, 0x62, 0x65,
+ 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73,
+ 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x0d, 0x0a, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x49, 0x4d,
+ 0x47, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66,
+ 0x74, 0x22, 0x0d, 0x0a, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x49, 0x63, 0x6f, 0x6e, 0x73, 0x2f, 0x57, 0x57,
+ 0x57, 0x2f, 0x77, 0x33, 0x63, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x22, 0x20,
+ 0x2f, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x72, 0x3e, 0x26,
+ 0x6c, 0x74, 0x3b, 0x2f, 0x62, 0x72, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74,
+ 0x3b, 0x62, 0x72, 0x2f, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x65, 0x6c, 0x65, 0x6d, 0x64,
+ 0x65, 0x63, 0x6c, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79,
+ 0x70, 0x65, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x64, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d,
+ 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6d, 0x61, 0x79,
+ 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73,
+ 0x2c, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61,
+ 0x69, 0x6e, 0x65, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0d, 0x0a, 0x41, 0x6e,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x27, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66,
+ 0x74, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+ 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x63, 0x61,
+ 0x6e, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x61, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64,
+ 0x72, 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x41, 0x74, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0x0d, 0x0a, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x73, 0x73, 0x75,
+ 0x65, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20,
+ 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x6e, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x0d, 0x0a, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x65, 0x6c, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72,
+ 0x6d, 0x3d, 0x22, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54,
+ 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x74,
+ 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72,
+ 0x6d, 0x3a, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, 0x44, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67,
+ 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22, 0x35,
+ 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x38,
+ 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x39, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63,
+ 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c,
+ 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x27, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d,
+ 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x22,
+ 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3f, 0x0d, 0x0a, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x45, 0x44, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x22, 0x2f, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x27,
+ 0x20, 0x7c, 0x20, 0x27, 0x41, 0x4e, 0x59, 0x27, 0x20, 0x7c, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d,
+ 0x69, 0x78, 0x65, 0x64, 0x22, 0x3e, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
+ 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x45, 0x44, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x22, 0x3e, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x45,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20,
+ 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x4e, 0x6f, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c,
+ 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x62, 0x72, 0x20, 0x45, 0x4d, 0x50,
+ 0x54, 0x59, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c,
+ 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x70, 0x20, 0x28, 0x23, 0x50, 0x43,
+ 0x44, 0x41, 0x54, 0x41, 0x7c, 0x65, 0x6d, 0x70, 0x68, 0x29, 0x2a, 0x20,
+ 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d,
+ 0x45, 0x4e, 0x54, 0x20, 0x25, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x61,
+ 0x72, 0x61, 0x3b, 0x20, 0x25, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x2e, 0x70, 0x61, 0x72, 0x61, 0x3b, 0x20, 0x3e, 0x0d, 0x0a, 0x26, 0x6c,
+ 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x41, 0x4e, 0x59,
+ 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76,
+ 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73,
+ 0x74, 0x61, 0x67, 0x22, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x68, 0x61, 0x73, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6f, 0x6e,
+ 0x6c, 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x28,
+ 0x6e, 0x6f, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x2c, 0x20, 0x6f, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72,
+ 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x77, 0x68, 0x69, 0x74,
+ 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x28, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f,
+ 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x22, 0x0d, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x73, 0x65,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x61, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x35, 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x35, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x2c, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c,
+ 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x20, 0x67, 0x6f,
+ 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x63, 0x68,
+ 0x69, 0x6c, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x64,
+ 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x65,
+ 0x61, 0x72, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d,
+ 0x61, 0x72, 0x20, 0x69, 0x73, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x20,
+ 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x70,
+ 0x22, 0x3e, 0x63, 0x70, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x73, 0x29, 0x2c,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73,
+ 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x2c, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73,
+ 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x2c,
+ 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69,
+ 0x63, 0x6c, 0x65, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22,
+ 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32,
+ 0x3d, 0x22, 0x35, 0x2e, 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d,
+ 0x22, 0x31, 0x36, 0x22, 0x20, 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31,
+ 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
+ 0x65, 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x6f, 0x69, 0x63,
+ 0x65, 0x22, 0x3e, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x73, 0x65, 0x71, 0x22, 0x3e, 0x73, 0x65,
+ 0x71, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x0d, 0x0a, 0x28, 0x27, 0x3f,
+ 0x27, 0x20, 0x7c, 0x20, 0x27, 0x2a, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x2b,
+ 0x27, 0x29, 0x3f, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x70, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63, 0x70, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x28, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x22, 0x3e,
+ 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x73, 0x65, 0x71, 0x22, 0x3e, 0x73, 0x65, 0x71, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x20, 0x28, 0x27, 0x3f, 0x27, 0x20, 0x7c,
+ 0x20, 0x27, 0x2a, 0x27, 0x20, 0x7c, 0x20, 0x27, 0x2b, 0x27, 0x29, 0x3f,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65,
+ 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63, 0x68, 0x6f, 0x69,
+ 0x63, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x27, 0x28, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x70, 0x22, 0x3e, 0x63, 0x70, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x7c, 0x27, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x70, 0x22,
+ 0x3e, 0x63, 0x70, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x29, 0x2b, 0x20,
+ 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x27, 0x29, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x35, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x30, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x32, 0x22, 0x3e, 0x5b, 0x45,
+ 0x35, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x47, 0x72, 0x6f,
+ 0x75, 0x70, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x73, 0x65, 0x71, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x73, 0x65, 0x71, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x28, 0x27, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x70, 0x22,
+ 0x3e, 0x63, 0x70, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x20, 0x3c,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27,
+ 0x2c, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x63, 0x70, 0x22, 0x3e, 0x63, 0x70, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x29, 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x29, 0x27, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x32, 0x22, 0x3e, 0x5b,
+ 0x45, 0x35, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x47, 0x72,
+ 0x6f, 0x75, 0x70, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67,
+ 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x65, 0x61, 0x63, 0x68, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x0d, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x41, 0x6e, 0x79,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x70, 0x61,
+ 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20,
+ 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6c, 0x65, 0x6d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d,
+ 0x6d, 0x61, 0x72, 0x3b, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x20,
+ 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e,
+ 0x20, 0x61, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x61,
+ 0x63, 0x68, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6c, 0x65, 0x6d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x64,
+ 0x65, 0x72, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x0d, 0x0a, 0x54,
+ 0x68, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6f,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x67,
+ 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69,
+ 0x63, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x63, 0x63,
+ 0x75, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f,
+ 0x72, 0x65, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x2c, 0x0d, 0x0a, 0x7a, 0x65,
+ 0x72, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x28,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2a, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x29, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x7a, 0x65, 0x72, 0x6f,
+ 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65,
+ 0x73, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3f, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x0d,
+ 0x0a, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x65, 0x72,
+ 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x63,
+ 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x79, 0x6e, 0x74,
+ 0x61, 0x78, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x69,
+ 0x6e, 0x67, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x6f, 0x73,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20,
+ 0x69, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
+ 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x0d, 0x0a, 0x70, 0x6f,
+ 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x72,
+ 0x61, 0x63, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x70, 0x61,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x2c, 0x20, 0x6f, 0x62, 0x65, 0x79, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
+ 0x63, 0x65, 0x2c, 0x0d, 0x0a, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x70, 0x65, 0x74, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69,
+ 0x6e, 0x67, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x61, 0x67, 0x61, 0x69,
+ 0x6e, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d,
+ 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63,
+ 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
+ 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c,
+ 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61,
+ 0x6e, 0x0d, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6d, 0x6f, 0x72,
+ 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x0d, 0x0a, 0x6d, 0x6f, 0x72, 0x65,
+ 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x73, 0x65, 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72,
+ 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x74, 0x65,
+ 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x6d, 0x22, 0x2f, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x61, 0x70, 0x70,
+ 0x65, 0x6e, 0x64, 0x69, 0x78, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72,
+ 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x74, 0x65,
+ 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x6d, 0x22, 0x2f, 0x3e, 0x2e, 0x2d,
+ 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x70, 0x70,
+ 0x65, 0x6e, 0x64, 0x69, 0x78, 0x20, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x73, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x50,
+ 0x45, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3e, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x47,
+ 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x50, 0x45, 0x20, 0x4e, 0x65, 0x73, 0x74,
+ 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x72, 0x65, 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f,
+ 0x70, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x31, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x31, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x68,
+ 0x65, 0x73, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e,
+ 0x20, 0x54, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x73, 0x61, 0x79, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x65, 0x69, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70,
+ 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x6f,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x68,
+ 0x65, 0x73, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x61, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63,
+ 0x68, 0x6f, 0x69, 0x63, 0x65, 0x22, 0x3e, 0x63, 0x68, 0x6f, 0x69, 0x63,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x73, 0x65, 0x71, 0x22,
+ 0x3e, 0x73, 0x65, 0x71, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x6f,
+ 0x72, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x22, 0x3e, 0x4d, 0x69, 0x78,
+ 0x65, 0x64, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66,
+ 0x22, 0x3e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d,
+ 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x39, 0x22, 0x3e, 0x5b,
+ 0x45, 0x31, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x22,
+ 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x69, 0x66, 0x20,
+ 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x68, 0x6f, 0x69, 0x63,
+ 0x65, 0x22, 0x3e, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x73, 0x65, 0x71, 0x22, 0x3e, 0x73, 0x65, 0x71,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4d,
+ 0x69, 0x78, 0x65, 0x64, 0x22, 0x3e, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x2c, 0x20, 0x69, 0x74, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x20, 0x61, 0x74, 0x0d, 0x0a, 0x6c, 0x65, 0x61, 0x73,
+ 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x62, 0x6c,
+ 0x61, 0x6e, 0x6b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x69, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74,
+ 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6e, 0x6f,
+ 0x6e, 0x2d, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c,
+ 0x64, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x7c, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x6f, 0x72, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2c, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x3a, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x20, 0x28, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x2c, 0x20, 0x62,
+ 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x3f, 0x29, 0x3e,
+ 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45,
+ 0x4e, 0x54, 0x20, 0x64, 0x69, 0x76, 0x31, 0x20, 0x28, 0x68, 0x65, 0x61,
+ 0x64, 0x2c, 0x20, 0x28, 0x70, 0x20, 0x7c, 0x20, 0x6c, 0x69, 0x73, 0x74,
+ 0x20, 0x7c, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x29, 0x2a, 0x2c, 0x20, 0x64,
+ 0x69, 0x76, 0x32, 0x2a, 0x29, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x64, 0x69, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x2d, 0x62, 0x6f, 0x64, 0x79,
+ 0x20, 0x28, 0x25, 0x64, 0x69, 0x76, 0x2e, 0x6d, 0x69, 0x78, 0x3b, 0x20,
+ 0x7c, 0x20, 0x25, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x6d, 0x69, 0x78, 0x3b,
+ 0x29, 0x2a, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x6d, 0x69, 0x78,
+ 0x65, 0x64, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4d, 0x69, 0x78, 0x65,
+ 0x64, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x3d, 0x22, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x20, 0x43, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74, 0x61,
+ 0x67, 0x22, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x0d, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x6f, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x64, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x3e, 0x63, 0x68, 0x69,
+ 0x6c, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x49, 0x6e,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x20, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20,
+ 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e,
+ 0x65, 0x64, 0x2c, 0x0d, 0x0a, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72,
+ 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x63, 0x63, 0x75,
+ 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e,
+ 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x2d, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22, 0x35, 0x2e, 0x35, 0x22,
+ 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x36, 0x22, 0x20, 0x70,
+ 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4d, 0x69, 0x78, 0x65, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x28, 0x27, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x23, 0x50,
+ 0x43, 0x44, 0x41, 0x54, 0x41, 0x27, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x0d, 0x0a, 0x27, 0x7c, 0x27, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x29, 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x0d, 0x0a, 0x27, 0x29, 0x2a, 0x27, 0x20, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c,
+ 0x20, 0x27, 0x28, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x23, 0x50, 0x43, 0x44, 0x41, 0x54, 0x41,
+ 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f,
+ 0x20, 0x27, 0x29, 0x27, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x76, 0x63,
+ 0x2d, 0x50, 0x45, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x76, 0x63,
+ 0x2d, 0x4d, 0x69, 0x78, 0x65, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72,
+ 0x65, 0x6e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x22, 0x2f, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x77,
+ 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d,
+ 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x6d,
+ 0x61, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x61, 0x73,
+ 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x2e, 0x20, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x22, 0x3e, 0x5b, 0x45,
+ 0x31, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x65,
+ 0x0d, 0x0a, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3c, 0x6b,
+ 0x77, 0x3e, 0x23, 0x50, 0x43, 0x44, 0x41, 0x54, 0x41, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x73, 0x20, 0x68,
+ 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20,
+ 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72,
+ 0x6d, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x4d, 0x69,
+ 0x78, 0x65, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x55,
+ 0x6e, 0x69, 0x71, 0x75, 0x65, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x4e, 0x6f, 0x20, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x73, 0x61,
+ 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20,
+ 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e,
+ 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67,
+ 0x6c, 0x65, 0x20, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x2d, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45,
+ 0x4e, 0x54, 0x20, 0x70, 0x20, 0x28, 0x23, 0x50, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x7c, 0x61, 0x7c, 0x75, 0x6c, 0x7c, 0x62, 0x7c, 0x69, 0x7c, 0x65,
+ 0x6d, 0x29, 0x2a, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45,
+ 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x70, 0x20, 0x28, 0x23, 0x50,
+ 0x43, 0x44, 0x41, 0x54, 0x41, 0x20, 0x7c, 0x20, 0x25, 0x66, 0x6f, 0x6e,
+ 0x74, 0x3b, 0x20, 0x7c, 0x20, 0x25, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3b, 0x20, 0x7c, 0x20, 0x25, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c,
+ 0x3b, 0x20, 0x7c, 0x20, 0x25, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0x29, 0x2a,
+ 0x20, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45,
+ 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x62, 0x20, 0x28, 0x23, 0x50, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x29, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x73,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x4c, 0x69, 0x73, 0x74,
+ 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x72, 0x22, 0x3e,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x73,
+ 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2d,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0d, 0x0a, 0x70, 0x61, 0x69, 0x72, 0x73,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2e, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x69, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74,
+ 0x61, 0x67, 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61,
+ 0x67, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x65, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3b, 0x20,
+ 0x74, 0x68, 0x75, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72,
+ 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x67,
+ 0x6e, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65,
+ 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65,
+ 0x63, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x74, 0x61, 0x67, 0x73, 0x22,
+ 0x2f, 0x3e, 0x2e, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x6d, 0x61, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x6f, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x20, 0x70, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76,
+ 0x65, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x6f, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62,
+ 0x6c, 0x69, 0x73, 0x68, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c,
+ 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76,
+ 0x69, 0x64, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x44,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x28, 0x69, 0x66, 0x20, 0x61, 0x6e,
+ 0x79, 0x29, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x61, 0x73,
+ 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x65, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61,
+ 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x44, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73,
+ 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x41, 0x54, 0x54, 0x4c, 0x49, 0x53,
+ 0x54, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x44, 0x65, 0x66,
+ 0x22, 0x3e, 0x41, 0x74, 0x74, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x3f, 0x20, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41,
+ 0x74, 0x74, 0x44, 0x65, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x41, 0x74, 0x74, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x54,
+ 0x79, 0x70, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x54, 0x79, 0x70, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65,
+ 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x6c, 0x69,
+ 0x73, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x6c,
+ 0x69, 0x73, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x41, 0x74,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69,
+ 0x73, 0x73, 0x75, 0x65, 0x0d, 0x0a, 0x61, 0x20, 0x77, 0x61, 0x72, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c,
+ 0x66, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x2c, 0x0d,
+ 0x0a, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x44, 0x65, 0x66,
+ 0x22, 0x3e, 0x41, 0x74, 0x74, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x68,
+ 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73, 0x74,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x6c, 0x69, 0x73,
+ 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69,
+ 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x0d, 0x0a,
+ 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68,
+ 0x6f, 0x73, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x2e,
+ 0x20, 0x57, 0x68, 0x65, 0x6e, 0x0d, 0x0a, 0x6d, 0x6f, 0x72, 0x65, 0x20,
+ 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20,
+ 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x62, 0x69,
+ 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61,
+ 0x74, 0x65, 0x72, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x67, 0x6e,
+ 0x6f, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d,
+ 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6f, 0x70, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x79, 0x2c, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x44, 0x54, 0x44, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x68,
+ 0x6f, 0x6f, 0x73, 0x65, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f,
+ 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74,
+ 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f,
+ 0x6e, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x46, 0x6f,
+ 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72,
+ 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x69, 0x73, 0x73,
+ 0x75, 0x65, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67,
+ 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69,
+ 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x0d, 0x0a,
+ 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68,
+ 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69,
+ 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67,
+ 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65,
+ 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63,
+ 0x2d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x54, 0x79, 0x70, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x72, 0x65,
+ 0x65, 0x20, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x3a, 0x20, 0x61, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20,
+ 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x6f, 0x6b,
+ 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x79, 0x70, 0x65,
+ 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x74, 0x61, 0x6b,
+ 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x0d,
+ 0x0a, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x76,
+ 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x65, 0x78, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e,
+ 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+ 0x6e, 0x74, 0x73, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38,
+ 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x2e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64,
+ 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+ 0x6e, 0x74, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64,
+ 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e,
+ 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66,
+ 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63,
+ 0x6c, 0x73, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x54, 0x79,
+ 0x70, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70,
+ 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x34, 0x22, 0x20, 0x70, 0x63, 0x77,
+ 0x35, 0x3d, 0x22, 0x31, 0x31, 0x2e, 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x41, 0x74, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x41, 0x74, 0x74, 0x54, 0x79, 0x70, 0x65, 0x3c,
+ 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x53, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x69, 0x7a, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61,
+ 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x27, 0x43, 0x44, 0x41, 0x54, 0x41, 0x27, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x54,
+ 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68,
+ 0x73, 0x3e, 0x27, 0x49, 0x44, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x64, 0x22,
+ 0x2f, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x6f,
+ 0x6e, 0x65, 0x2d, 0x69, 0x64, 0x2d, 0x70, 0x65, 0x72, 0x2d, 0x65, 0x6c,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x69, 0x64, 0x2d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20,
+ 0x27, 0x49, 0x44, 0x52, 0x45, 0x46, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x64,
+ 0x72, 0x65, 0x66, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x7c, 0x20, 0x27, 0x49, 0x44, 0x52, 0x45, 0x46, 0x53, 0x27, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x69, 0x64, 0x72, 0x65, 0x66, 0x22, 0x2f, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x27, 0x45, 0x4e, 0x54, 0x49,
+ 0x54, 0x59, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x6e, 0x61, 0x6d,
+ 0x65, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c,
+ 0x20, 0x27, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x27, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2f, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x27, 0x4e, 0x4d,
+ 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x6e, 0x6d, 0x74,
+ 0x6f, 0x6b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x7c, 0x20, 0x27, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53, 0x27,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x6e, 0x6d, 0x74, 0x6f, 0x6b, 0x22, 0x2f, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x64, 0x22, 0x3e,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x49, 0x44, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x49, 0x44, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x41, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x70, 0x70,
+ 0x65, 0x61, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61,
+ 0x6e, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x3b, 0x20, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x49, 0x44,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x6c, 0x79, 0x0d, 0x0a, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x62, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74,
+ 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x6e, 0x65, 0x2d, 0x69, 0x64,
+ 0x2d, 0x70, 0x65, 0x72, 0x2d, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x4f, 0x6e, 0x65, 0x20, 0x49, 0x44, 0x20, 0x70, 0x65,
+ 0x72, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79,
+ 0x70, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x4e, 0x6f, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76,
+ 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20,
+ 0x6f, 0x6e, 0x65, 0x20, 0x49, 0x44, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x64, 0x2d, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x49, 0x44, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x49,
+ 0x44, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d,
+ 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x23, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x23, 0x52,
+ 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x3c, 0x2f, 0x6b, 0x77, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74,
+ 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x64, 0x72, 0x65, 0x66, 0x22,
+ 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x49, 0x44, 0x52, 0x45, 0x46,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49, 0x44, 0x52, 0x45, 0x46, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65,
+ 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49,
+ 0x44, 0x52, 0x45, 0x46, 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3b, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x44, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x73,
+ 0x6f, 0x6d, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x0d, 0x0a, 0x69, 0x2e,
+ 0x65, 0x2e, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49, 0x44, 0x52, 0x45, 0x46,
+ 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x49, 0x44, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x65, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54,
+ 0x59, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d,
+ 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3b, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x22, 0x3e, 0x75, 0x6e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d,
+ 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f,
+ 0x63, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x44, 0x54, 0x44, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x6e, 0x6d, 0x74, 0x6f, 0x6b, 0x22, 0x3e, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x54, 0x6f, 0x6b, 0x65,
+ 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45,
+ 0x4e, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d, 0x74, 0x6f,
+ 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x70, 0x72, 0x6f,
+ 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53,
+ 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x3e, 0x4e, 0x6d, 0x74,
+ 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d,
+ 0x2d, 0x20, 0x77, 0x68, 0x79, 0x3f, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54,
+ 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x0d, 0x0a, 0x70, 0x61, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x3c,
+ 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x41, 0x56, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x3d, 0x22, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64,
+ 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x74,
+ 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x6b, 0x69,
+ 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65,
+ 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3a,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x6f, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x45, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x54, 0x79, 0x70, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f,
+ 0x4e, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x27, 0x28, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x7c, 0x27,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x29, 0x27, 0x20, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4f, 0x6e, 0x65,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x2f,
+ 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x6f,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74,
+ 0x79, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45,
+ 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x28, 0x27,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d, 0x74,
+ 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x28,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x27,
+ 0x7c, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x3f, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e,
+ 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29,
+ 0x2a, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x3f, 0x20, 0x27, 0x29, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x65, 0x6e, 0x75, 0x6d,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x41, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4f, 0x54,
+ 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x44, 0x54, 0x44, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20,
+ 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x62,
+ 0x65, 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x6e, 0x22,
+ 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x6f, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0d, 0x0a, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x0d, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4f, 0x6e, 0x65, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x4f, 0x6e, 0x65, 0x0d, 0x0a, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x65, 0x72, 0x20,
+ 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x79, 0x70, 0x65,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x4e, 0x6f,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6d,
+ 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f,
+ 0x4e, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63,
+ 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x6f, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79,
+ 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x38, 0x22, 0x3e, 0x5b,
+ 0x45, 0x36, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x4e, 0x6f,
+ 0x0d, 0x0a, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f,
+ 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x45, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74,
+ 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74,
+ 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4f, 0x54,
+ 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x3c, 0x6b, 0x77, 0x3e,
+ 0x45, 0x4d, 0x50, 0x54, 0x59, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x3e, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x0d, 0x0a, 0x6f, 0x6e, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x6d, 0x74, 0x6f,
+ 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6f, 0x70, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x79, 0x2c, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x6d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x4e, 0x6d, 0x74,
+ 0x6f, 0x6b, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x73, 0x68,
+ 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x63, 0x63,
+ 0x75, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x0d,
+ 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x69,
+ 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x61,
+ 0x74, 0x74, 0x72, 0x2d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x44, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x27, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x66, 0x20, 0x6e,
+ 0x6f, 0x74, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x0d, 0x0a, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x61,
+ 0x63, 0x74, 0x20, 0x69, 0x66, 0x20, 0x61, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x44, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x34, 0x22, 0x20,
+ 0x70, 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x31, 0x2e, 0x35, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x44,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x23, 0x52,
+ 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x27, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x27, 0x23, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45,
+ 0x44, 0x27, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x28, 0x28, 0x27, 0x23, 0x46, 0x49,
+ 0x58, 0x45, 0x44, 0x27, 0x20, 0x53, 0x29, 0x3f, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x65, 0x66, 0x61, 0x74, 0x74, 0x72, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x72,
+ 0x56, 0x61, 0x6c, 0x73, 0x22, 0x2f, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x46, 0x69, 0x78, 0x65, 0x64, 0x41, 0x74, 0x74,
+ 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x23, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61,
+ 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f,
+ 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x23,
+ 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x3c, 0x2f, 0x6b, 0x77, 0x3e,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x2e, 0x20,
+ 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x79,
+ 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x21, 0x21, 0x0d, 0x0a, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x23, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x6d,
+ 0x69, 0x74, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d,
+ 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x3b, 0x20, 0x6e, 0x6f, 0x20, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x0d, 0x0a, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x2d, 0x2d, 0x3e, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x20,
+ 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22,
+ 0x3e, 0x49, 0x66, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x3c, 0x6b, 0x77, 0x3e,
+ 0x23, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x23,
+ 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x3c, 0x2f, 0x6b, 0x77, 0x3e,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74,
+ 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x23, 0x46, 0x49, 0x58, 0x45, 0x44, 0x3c,
+ 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64,
+ 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x77, 0x61,
+ 0x79, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x0d, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x2c, 0x20,
+ 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x20, 0x6f, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20,
+ 0x61, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x77, 0x65, 0x72, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74,
+ 0x74, 0x72, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x52, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x23, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x0d, 0x0a, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x6c, 0x6c, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x65, 0x66, 0x61, 0x74, 0x74, 0x72, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x44, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6c, 0x65, 0x78, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d,
+ 0x0a, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x46,
+ 0x69, 0x78, 0x65, 0x64, 0x41, 0x74, 0x74, 0x72, 0x22, 0x3e, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x20, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x44, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x49, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e,
+ 0x23, 0x46, 0x49, 0x58, 0x45, 0x44, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20,
+ 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x73,
+ 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x41, 0x54,
+ 0x54, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x69, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x44, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52,
+ 0x45, 0x44, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x20, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x20, 0x20, 0x20, 0x23, 0x49, 0x4d, 0x50, 0x4c, 0x49,
+ 0x45, 0x44, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x41, 0x54,
+ 0x54, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x0d, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x28, 0x62, 0x75, 0x6c, 0x6c, 0x65,
+ 0x74, 0x73, 0x7c, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x7c, 0x67,
+ 0x6c, 0x6f, 0x73, 0x73, 0x61, 0x72, 0x79, 0x29, 0x20, 0x20, 0x22, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x26, 0x6c,
+ 0x74, 0x3b, 0x21, 0x41, 0x54, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x20, 0x43,
+ 0x44, 0x41, 0x54, 0x41, 0x20, 0x20, 0x20, 0x23, 0x46, 0x49, 0x58, 0x45,
+ 0x44, 0x20, 0x22, 0x50, 0x4f, 0x53, 0x54, 0x22, 0x3e, 0x3c, 0x2f, 0x65,
+ 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x41,
+ 0x56, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x30, 0x22, 0x3e, 0x5b,
+ 0x45, 0x37, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x0d, 0x0a, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x69, 0x73, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x65,
+ 0x63, 0x6b, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
+ 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x62, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69,
+ 0x74, 0x68, 0x6d, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x2c, 0x20, 0x6f,
+ 0x72, 0x20, 0x62, 0x79, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73,
+ 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x65,
+ 0x74, 0x68, 0x6f, 0x64, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+ 0x6d, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6f, 0x6c, 0x69,
+ 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x41, 0x6c, 0x6c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x62,
+ 0x72, 0x65, 0x61, 0x6b, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69,
+ 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x23, 0x78, 0x41, 0x20,
+ 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64,
+ 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x6c,
+ 0x69, 0x6e, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x2f, 0x3e, 0x2c,
+ 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x67,
+ 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61,
+ 0x74, 0x65, 0x73, 0x0d, 0x0a, 0x6f, 0x6e, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x61, 0x79, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x42, 0x65,
+ 0x67, 0x69, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6d,
+ 0x70, 0x74, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x46,
+ 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c,
+ 0x20, 0x6f, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x75, 0x6e, 0x6e, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x2c, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72,
+ 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69,
+ 0x6e, 0x75, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x0d, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67,
+ 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x46,
+ 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20,
+ 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20,
+ 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x33,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x67,
+ 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x28, 0x23, 0x78, 0x32, 0x30, 0x2c, 0x20, 0x23, 0x78, 0x44, 0x2c, 0x20,
+ 0x23, 0x78, 0x41, 0x2c, 0x20, 0x23, 0x78, 0x39, 0x29, 0x2c, 0x20, 0x61,
+ 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29, 0x20, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x61, 0x6e,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x43, 0x44, 0x41, 0x54, 0x41, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72,
+ 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x79, 0x20, 0x64, 0x69, 0x73, 0x63,
+ 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6c,
+ 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74,
+ 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x69,
+ 0x6e, 0x67, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x28, 0x23,
+ 0x78, 0x32, 0x30, 0x29, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x62, 0x79, 0x20, 0x61, 0x20, 0x73, 0x69,
+ 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x28,
+ 0x23, 0x78, 0x32, 0x30, 0x29, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x61, 0x20,
+ 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c,
+ 0x66, 0x20, 0x28, 0x23, 0x78, 0x44, 0x2c, 0x20, 0x23, 0x78, 0x41, 0x20,
+ 0x6f, 0x72, 0x20, 0x23, 0x78, 0x39, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x73, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x63, 0x61,
+ 0x73, 0x65, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x75, 0x6e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65,
+ 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x28, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x0d,
+ 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x29, 0x2c,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x77,
+ 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73,
+ 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x68,
+ 0x6f, 0x73, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x77, 0x68, 0x69, 0x74,
+ 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x62, 0x65, 0x69, 0x6e,
+ 0x67, 0x20, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x6c,
+ 0x79, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x0d, 0x0a, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6c, 0x6c, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x74,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x62, 0x79, 0x20, 0x61,
+ 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39,
+ 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x73,
+ 0x20, 0x69, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x20, 0x47, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e,
+ 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20,
+ 0x64, 0x20, 0x22, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x44, 0x3b,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x20, 0x61, 0x20, 0x22, 0x26, 0x61, 0x6d, 0x70, 0x3b,
+ 0x23, 0x78, 0x41, 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x61, 0x20, 0x22,
+ 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x44, 0x3b, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x23, 0x78, 0x41, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x65, 0x67,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x63,
+ 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x20,
+ 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c,
+ 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x69, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x3c, 0x61, 0x74, 0x74, 0x3e, 0x61, 0x3c, 0x2f, 0x61, 0x74,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4d, 0x54, 0x4f,
+ 0x4b, 0x45, 0x4e, 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20,
+ 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x20, 0x69, 0x66, 0x20, 0x3c,
+ 0x61, 0x74, 0x74, 0x3e, 0x61, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x69, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x43, 0x44, 0x41, 0x54, 0x41, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d,
+ 0x22, 0x31, 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x74, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x68, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x68, 0x3e, 0x61, 0x20, 0x69, 0x73,
+ 0x20, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53, 0x3c, 0x2f, 0x74,
+ 0x68, 0x3e, 0x3c, 0x74, 0x68, 0x3e, 0x61, 0x20, 0x69, 0x73, 0x20, 0x43,
+ 0x44, 0x41, 0x54, 0x41, 0x3c, 0x2f, 0x74, 0x68, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x74,
+ 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x65, 0x67, 0x3e, 0x61, 0x3d, 0x22, 0x0d, 0x0a, 0x0d, 0x0a,
+ 0x78, 0x79, 0x7a, 0x22, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x78, 0x20, 0x79, 0x20, 0x7a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x23, 0x78, 0x32, 0x30, 0x20, 0x23, 0x78, 0x32, 0x30,
+ 0x20, 0x78, 0x20, 0x79, 0x20, 0x7a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72,
+ 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x65, 0x67,
+ 0x3e, 0x61, 0x3d, 0x22, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x64, 0x3b, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x64, 0x3b, 0x41, 0x26, 0x61, 0x6d, 0x70, 0x3b,
+ 0x61, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x3b, 0x42, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x64, 0x61, 0x3b, 0x22, 0x3c, 0x2f, 0x65, 0x67, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x41, 0x0d, 0x0a, 0x23, 0x78, 0x32, 0x30, 0x20, 0x42,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x23, 0x78,
+ 0x32, 0x30, 0x20, 0x23, 0x78, 0x32, 0x30, 0x20, 0x41, 0x20, 0x23, 0x78,
+ 0x32, 0x30, 0x20, 0x23, 0x78, 0x32, 0x30, 0x20, 0x42, 0x20, 0x23, 0x78,
+ 0x32, 0x30, 0x20, 0x23, 0x78, 0x32, 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74,
+ 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x65,
+ 0x67, 0x3e, 0x61, 0x3d, 0x0d, 0x0a, 0x22, 0x26, 0x61, 0x6d, 0x70, 0x3b,
+ 0x23, 0x78, 0x64, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x64,
+ 0x3b, 0x41, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x61, 0x3b, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x61, 0x3b, 0x42, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x23, 0x78, 0x64, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23,
+ 0x78, 0x61, 0x3b, 0x22, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x23, 0x78, 0x44, 0x0d, 0x0a, 0x23, 0x78, 0x44, 0x20, 0x41, 0x20, 0x23,
+ 0x78, 0x41, 0x20, 0x23, 0x78, 0x41, 0x20, 0x42, 0x20, 0x23, 0x78, 0x44,
+ 0x20, 0x23, 0x78, 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x23, 0x78, 0x44, 0x20, 0x23, 0x78, 0x44, 0x20, 0x41, 0x20,
+ 0x23, 0x78, 0x41, 0x20, 0x23, 0x78, 0x41, 0x20, 0x42, 0x20, 0x23, 0x78,
+ 0x44, 0x20, 0x23, 0x78, 0x44, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x74, 0x61,
+ 0x62, 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4e, 0x6f, 0x74,
+ 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x61, 0x73, 0x74, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20,
+ 0x69, 0x73, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x28,
+ 0x62, 0x75, 0x74, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x29, 0x20, 0x69, 0x66, 0x20, 0x3c, 0x61, 0x74, 0x74,
+ 0x3e, 0x61, 0x3c, 0x2f, 0x61, 0x74, 0x74, 0x3e, 0x0d, 0x0a, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x3c, 0x6b, 0x77, 0x3e, 0x4e, 0x4d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53,
+ 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x65, 0x63, 0x74, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x64,
+ 0x2d, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x43, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2c, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x44, 0x54, 0x44, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77,
+ 0x6f, 0x72, 0x64, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x67, 0x6f,
+ 0x76, 0x65, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61,
+ 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77,
+ 0x32, 0x3d, 0x22, 0x39, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22,
+ 0x31, 0x34, 0x2e, 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x63, 0x6f, 0x6e,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x63, 0x74,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x69,
+ 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x63, 0x74, 0x22, 0x3e,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x63, 0x74, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x69, 0x67, 0x6e, 0x6f,
+ 0x72, 0x65, 0x53, 0x65, 0x63, 0x74, 0x22, 0x3e, 0x69, 0x67, 0x6e, 0x6f,
+ 0x72, 0x65, 0x53, 0x65, 0x63, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x53, 0x65, 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x65, 0x63,
+ 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x5b, 0x27, 0x20, 0x53, 0x3f, 0x20,
+ 0x27, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x27, 0x20, 0x53, 0x3f,
+ 0x20, 0x27, 0x5b, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73,
+ 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x53,
+ 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x27,
+ 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x39, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x30, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x64,
+ 0x73, 0x65, 0x63, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x2f,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x63, 0x74, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x69, 0x67, 0x6e, 0x6f,
+ 0x72, 0x65, 0x53, 0x65, 0x63, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x5b,
+ 0x27, 0x20, 0x53, 0x3f, 0x20, 0x27, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45,
+ 0x27, 0x20, 0x53, 0x3f, 0x20, 0x27, 0x5b, 0x27, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x69, 0x67, 0x6e,
+ 0x6f, 0x72, 0x65, 0x53, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53,
+ 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x0d, 0x0a, 0x27, 0x5d, 0x5d, 0x26, 0x67,
+ 0x74, 0x3b, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x39, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x30, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6f,
+ 0x6e, 0x64, 0x73, 0x65, 0x63, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6e,
+ 0x67, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x63,
+ 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
+ 0x53, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x49,
+ 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x49, 0x67, 0x6e, 0x6f, 0x72,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x27, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x5b, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
+ 0x53, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
+ 0x22, 0x3e, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x63, 0x74,
+ 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x27, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x49,
+ 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x49, 0x67, 0x6e, 0x6f, 0x72,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x2a, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x3c,
+ 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2a, 0x20, 0x2d, 0x20, 0x28, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2a, 0x0d, 0x0a,
+ 0x28, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x5b, 0x27, 0x20, 0x7c, 0x20,
+ 0x27, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x27, 0x29, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68,
+ 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x2a, 0x29, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70,
+ 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73,
+ 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x64, 0x73,
+ 0x65, 0x63, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x39,
+ 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x50, 0x72, 0x6f, 0x70,
+ 0x65, 0x72, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
+ 0x50, 0x45, 0x20, 0x4e, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x5b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x22, 0x2c, 0x0d, 0x0a, 0x22, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x22, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x22, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f,
+ 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a,
+ 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65,
+ 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x4c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x44, 0x54, 0x44,
+ 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x61, 0x20,
+ 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x0d, 0x0a, 0x6f, 0x6e, 0x65,
+ 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x65,
+ 0x73, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x67, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x77, 0x68,
+ 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x69, 0x73, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49, 0x4e, 0x43, 0x4c,
+ 0x55, 0x44, 0x45, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x44, 0x54, 0x44, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x73, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49, 0x47, 0x4e, 0x4f, 0x52,
+ 0x45, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20,
+ 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x44, 0x54, 0x44, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x39, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x30, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x69, 0x61,
+ 0x62, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x67,
+ 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a, 0x62, 0x65, 0x20,
+ 0x72, 0x65, 0x61, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20,
+ 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x73, 0x75,
+ 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6f, 0x75, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x28, 0x69,
+ 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x29, 0x20, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a,
+ 0x49, 0x66, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x6b, 0x65, 0x79, 0x77,
+ 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49,
+ 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20,
+ 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69,
+ 0x6e, 0x0d, 0x0a, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20,
+ 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x61, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x6f,
+ 0x66, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45,
+ 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x6e, 0x65, 0x72,
+ 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x2e, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x3e, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x30, 0x22, 0x3e, 0x5b,
+ 0x45, 0x39, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
+ 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+ 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20,
+ 0x61, 0x66, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x22,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x22, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+ 0x64, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x63, 0x6f,
+ 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73,
+ 0x0d, 0x0a, 0x22, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x5b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x22, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x22, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x22, 0x2c, 0x20, 0x75, 0x6e, 0x74, 0x69,
+ 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69,
+ 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x65, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64,
+ 0x2e, 0x20, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0d, 0x0a, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f,
+ 0x72, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x2c, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x69, 0x74, 0x73,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x65, 0x66,
+ 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x69, 0x64,
+ 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74,
+ 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6f, 0x72,
+ 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d,
+ 0x70, 0x6c, 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54,
+ 0x59, 0x20, 0x25, 0x20, 0x64, 0x72, 0x61, 0x66, 0x74, 0x20, 0x27, 0x49,
+ 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x27, 0x20, 0x3e, 0x0d, 0x0a, 0x26,
+ 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25,
+ 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x27, 0x49, 0x47, 0x4e, 0x4f,
+ 0x52, 0x45, 0x27, 0x20, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x26, 0x6c, 0x74,
+ 0x3b, 0x21, 0x5b, 0x25, 0x64, 0x72, 0x61, 0x66, 0x74, 0x3b, 0x5b, 0x0d,
+ 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e,
+ 0x54, 0x20, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x28, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x2c, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x70, 0x70,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3f, 0x29, 0x3e, 0x0d, 0x0a,
+ 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x5b, 0x25, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x3b, 0x5b, 0x0d, 0x0a,
+ 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54,
+ 0x20, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x28, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x2c, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x2c, 0x20, 0x73, 0x75, 0x70, 0x70,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3f, 0x29, 0x3e, 0x0d, 0x0a,
+ 0x5d, 0x5d, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x2d, 0x2d, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64,
+ 0x3d, 0x27, 0x73, 0x65, 0x63, 0x2d, 0x70, 0x61, 0x73, 0x73, 0x2d, 0x74,
+ 0x6f, 0x2d, 0x61, 0x70, 0x70, 0x27, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x20, 0x54, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61,
+ 0x6c, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57,
+ 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x0d, 0x0a, 0x61,
+ 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76,
+ 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3a, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x27, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f,
+ 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x0d, 0x0a, 0x28, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6b,
+ 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x0d,
+ 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3b, 0x20, 0x6e, 0x6f, 0x6e, 0x2d,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x0d, 0x0a, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x76, 0x61,
+ 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65,
+ 0x61, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75,
+ 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x2d, 0x2d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x26, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x3b, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x70,
+ 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x72, 0x75,
+ 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d,
+ 0x22, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x41, 0x6e, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x65, 0x0d, 0x0a, 0x6f, 0x72, 0x20,
+ 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+ 0x20, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68,
+ 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x65, 0x73, 0x65, 0x0d, 0x0a, 0x61,
+ 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x3b, 0x20, 0x74, 0x68, 0x65,
+ 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x61, 0x72, 0x65, 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x20, 0x28, 0x65, 0x78,
+ 0x63, 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74,
+ 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70,
+ 0x65, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x44, 0x54, 0x44, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x29, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x0d,
+ 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x6e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x45, 0x61,
+ 0x63, 0x68, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x63, 0x61, 0x6c, 0x6c,
+ 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x0d,
+ 0x0a, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x65,
+ 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x54,
+ 0x65, 0x78, 0x74, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e,
+ 0x41, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70,
+ 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61,
+ 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3b, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x74, 0x65,
+ 0x78, 0x74, 0x22, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f,
+ 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x0d,
+ 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x20, 0x70, 0x61,
+ 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x55, 0x6e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x20, 0x77, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6f, 0x72, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x74, 0x65,
+ 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x66, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x2c, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x32,
+ 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x6d, 0x61, 0x79, 0x0d, 0x0a, 0x62, 0x65, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x58, 0x4d, 0x4c, 0x2e, 0x20, 0x45,
+ 0x61, 0x63, 0x68, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x68, 0x61, 0x73, 0x20,
+ 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65,
+ 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x42, 0x65,
+ 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73,
+ 0x20, 0x6e, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+ 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x75,
+ 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x76,
+ 0x6f, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
+ 0x3b, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x62, 0x79, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49,
+ 0x54, 0x59, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c,
+ 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x3c,
+ 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x67, 0x65, 0x6e, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x49, 0x6e, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x6c, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x75, 0x6e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68,
+ 0x3e, 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x6f,
+ 0x20, 0x61, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x50, 0x45, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x35, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x33, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75,
+ 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x44, 0x54, 0x44, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20,
+ 0x74, 0x77, 0x6f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20,
+ 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73,
+ 0x2e, 0x20, 0x46, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x72,
+ 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x75,
+ 0x70, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3b,
+ 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x73,
+ 0x74, 0x69, 0x6e, 0x63, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x43, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x20, 0x41, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x53, 0x4f,
+ 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x73, 0x65,
+ 0x74, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70,
+ 0x6c, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64,
+ 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
+ 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e,
+ 0x70, 0x75, 0x74, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x43, 0x68, 0x61, 0x72, 0x52, 0x65, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x52, 0x65, 0x66, 0x3c,
+ 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x27, 0x20, 0x5b, 0x30, 0x2d, 0x39, 0x5d,
+ 0x2b, 0x20, 0x27, 0x3b, 0x27, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x27, 0x26, 0x68,
+ 0x63, 0x72, 0x6f, 0x3b, 0x27, 0x20, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d,
+ 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x2b, 0x20, 0x27, 0x3b, 0x27, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x63, 0x68,
+ 0x61, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x63,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4c,
+ 0x65, 0x67, 0x61, 0x6c, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e, 0x6f,
+ 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x62,
+ 0x65, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x78, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x20,
+ 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x68,
+ 0x65, 0x78, 0x61, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x0d, 0x0a,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x27, 0x73, 0x20, 0x63, 0x6f,
+ 0x64, 0x65, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20,
+ 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x67,
+ 0x69, 0x6e, 0x73, 0x0d, 0x0a, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74,
+ 0x73, 0x20, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20,
+ 0x61, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x64, 0x65,
+ 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65,
+ 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x47, 0x45, 0x52,
+ 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x47,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22,
+ 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x74, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x6d, 0x70, 0x65,
+ 0x72, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x63,
+ 0x6f, 0x6c, 0x6f, 0x6e, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x20, 0x61, 0x73,
+ 0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x0d, 0x0a, 0x69, 0x64, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x22, 0x20, 0x74,
+ 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x20, 0x70, 0x65, 0x72, 0x63,
+ 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x28, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x25, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x6d, 0x69, 0x63, 0x6f,
+ 0x6c, 0x6f, 0x6e, 0x20, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3b,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x20, 0x61, 0x73, 0x20,
+ 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61,
+ 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x52, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c,
+ 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x22, 0x3e, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x52, 0x65, 0x66, 0x22, 0x3e, 0x43,
+ 0x68, 0x61, 0x72, 0x52, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
+ 0x65, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x3c, 0x2f, 0x6c, 0x68,
+ 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x27, 0x3b, 0x27, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x76, 0x63, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x22, 0x2f, 0x3e, 0x3c, 0x77,
+ 0x66, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x3e, 0x3c, 0x77, 0x66, 0x63, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x52, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x50, 0x45, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x27, 0x25, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x27, 0x3b, 0x27, 0x3c,
+ 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x76, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66,
+ 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x6e, 0x6f, 0x72, 0x65, 0x63,
+ 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x3e, 0x3c, 0x77, 0x66,
+ 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x74, 0x64,
+ 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x77, 0x66, 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x49, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x44, 0x54, 0x44, 0x2c, 0x20, 0x61, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x44, 0x54, 0x44, 0x20, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x0d, 0x0a, 0x6e, 0x6f, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d, 0x27,
+ 0x79, 0x65, 0x73, 0x27, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x34, 0x22, 0x3e, 0x5b, 0x45, 0x33,
+ 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x66, 0x6f, 0x72, 0x0d,
+ 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x61,
+ 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d, 0x0a,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d,
+ 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x22, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23,
+ 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2d, 0x64,
+ 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d,
+ 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f,
+ 0x72, 0x20, 0x61, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65,
+ 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x65, 0x6c, 0x6c,
+ 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x0d, 0x0a,
+ 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x20, 0x26, 0x6d, 0x61, 0x67, 0x69,
+ 0x63, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65,
+ 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x32, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x39,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x53, 0x69, 0x6d, 0x69,
+ 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x2c, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x54, 0x68, 0x65, 0x0d, 0x0a, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72,
+ 0x65, 0x63, 0x65, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69,
+ 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x70, 0x70, 0x65,
+ 0x61, 0x72, 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x69, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x2c, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2d, 0x69,
+ 0x66, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x6e, 0x6f, 0x74,
+ 0x0d, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x77, 0x65,
+ 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74,
+ 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x73, 0x65, 0x63, 0x2d, 0x72, 0x6d, 0x64, 0x22, 0x3e,
+ 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d, 0x27,
+ 0x79, 0x65, 0x73, 0x27, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x76,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x76, 0x63,
+ 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x20,
+ 0x61, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20,
+ 0x6f, 0x72, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d,
+ 0x27, 0x6e, 0x6f, 0x27, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d,
+ 0x61, 0x74, 0x63, 0x68, 0x22, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x23, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x2d, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2c,
+ 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x0d, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x26, 0x6d,
+ 0x61, 0x67, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x3e, 0x2e,
+ 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65,
+ 0x63, 0x65, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74,
+ 0x2e, 0x20, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x2c,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x67,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65,
+ 0x64, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x39, 0x32, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x32, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x64, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65,
+ 0x63, 0x74, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x67, 0x65,
+ 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x46, 0x49, 0x4e, 0x41,
+ 0x4c, 0x20, 0x45, 0x44, 0x49, 0x54, 0x3a, 0x20, 0x69, 0x73, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x63, 0x6c, 0x75, 0x6d,
+ 0x73, 0x79, 0x3f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x41, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75, 0x6e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x22, 0x3e, 0x75, 0x6e, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a,
+ 0x55, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x61, 0x74, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d, 0x0a, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x6b, 0x77,
+ 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x3c, 0x2f, 0x6b,
+ 0x77, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77,
+ 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x66,
+ 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6e, 0x6f,
+ 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x3c,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x6f, 0x20, 0x52, 0x65, 0x63, 0x75,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x41, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d,
+ 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
+ 0x20, 0x61, 0x20, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x65, 0x69,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c,
+ 0x79, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x6c, 0x79, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x77, 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x77,
+ 0x66, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69,
+ 0x6e, 0x64, 0x74, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x49, 0x6e, 0x20, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x0d,
+ 0x0a, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3e, 0x44, 0x54,
+ 0x44, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x77, 0x66, 0x63, 0x6e,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61,
+ 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x65, 0x67, 0x3e, 0x54, 0x79, 0x70, 0x65, 0x20, 0x26, 0x6c, 0x74, 0x3b,
+ 0x6b, 0x65, 0x79, 0x3e, 0x6c, 0x65, 0x73, 0x73, 0x2d, 0x74, 0x68, 0x61,
+ 0x6e, 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x6b, 0x65, 0x79, 0x3e, 0x20, 0x28,
+ 0x26, 0x68, 0x63, 0x72, 0x6f, 0x3b, 0x33, 0x43, 0x3b, 0x29, 0x20, 0x74,
+ 0x6f, 0x20, 0x73, 0x61, 0x76, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x0d, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70,
+ 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x64, 0x6f, 0x63, 0x64, 0x61, 0x74, 0x65, 0x3b,
+ 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x63, 0x6c, 0x61,
+ 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2d, 0x6c, 0x65,
+ 0x76, 0x65, 0x6c, 0x3b, 0x2e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54,
+ 0x41, 0x5b, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x22, 0x49, 0x53, 0x4f, 0x4c, 0x61, 0x74, 0x32, 0x22, 0x2e, 0x2e, 0x2e,
+ 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49,
+ 0x54, 0x59, 0x20, 0x25, 0x20, 0x49, 0x53, 0x4f, 0x4c, 0x61, 0x74, 0x32,
+ 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x53,
+ 0x59, 0x53, 0x54, 0x45, 0x4d, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x6d, 0x6c, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x69, 0x73, 0x6f, 0x2f, 0x69, 0x73, 0x6f, 0x6c, 0x61, 0x74,
+ 0x32, 0x2d, 0x78, 0x6d, 0x6c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20,
+ 0x2e, 0x2e, 0x2e, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x74, 0x2e, 0x20, 0x2d, 0x2d,
+ 0x3e, 0x0d, 0x0a, 0x25, 0x49, 0x53, 0x4f, 0x4c, 0x61, 0x74, 0x32, 0x3b,
+ 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x2d, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3e, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x0d, 0x0a, 0x74, 0x68, 0x75, 0x73, 0x3a, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x44,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x32, 0x3d, 0x22,
+ 0x35, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x38, 0x2e,
+ 0x35, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73,
+ 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x65, 0x63, 0x6c, 0x3c,
+ 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x47, 0x45,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x47, 0x45, 0x44, 0x65, 0x63, 0x6c,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x47, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x2d, 0x2d, 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x44, 0x65, 0x63,
+ 0x6c, 0x22, 0x3e, 0x50, 0x45, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x2d, 0x2d, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72,
+ 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x47, 0x45,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73,
+ 0x3e, 0x47, 0x45, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x0d, 0x0a, 0x27,
+ 0x3e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50,
+ 0x45, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x59, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x27, 0x25, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53,
+ 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x44,
+ 0x65, 0x66, 0x22, 0x3e, 0x50, 0x45, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x3f, 0x20, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x2d,
+ 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x21,
+ 0x2d, 0x2d, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x2d, 0x2d, 0x3e, 0x7c, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x3e, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x4e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e,
+ 0x4e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x29, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x27, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x44, 0x65, 0x66, 0x27, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20,
+ 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x20, 0x45, 0x44, 0x49, 0x54, 0x3a, 0x20,
+ 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x57, 0x46, 0x73, 0x20, 0x68, 0x65, 0x72,
+ 0x65, 0x3f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x45, 0x44,
+ 0x65, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50,
+ 0x45, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x7c, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x3e, 0x45,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x22, 0x3e, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x6f, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x75,
+ 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x61, 0x6e, 0x20,
+ 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x3c, 0x2f,
+ 0x6b, 0x77, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x20,
+ 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x6d, 0x6f, 0x72, 0x65,
+ 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x73,
+ 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3b, 0x20, 0x61, 0x74,
+ 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20,
+ 0x69, 0x73, 0x73, 0x75, 0x65, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
+ 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x65, 0x63, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x2d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x65, 0x78, 0x74,
+ 0x22, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61,
+ 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x73, 0x65, 0x70, 0x61,
+ 0x72, 0x61, 0x74, 0x65, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61,
+ 0x6c, 0x0d, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x6f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6c, 0x69, 0x74, 0x65, 0x6e,
+ 0x74, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x64,
+ 0x75, 0x63, 0x65, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72,
+ 0x72, 0x65, 0x63, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65,
+ 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c,
+ 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x3a, 0x20,
+ 0x73, 0x65, 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20,
+ 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x50, 0x75, 0x62, 0x2d, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72, 0x65, 0x2d, 0x72, 0x65, 0x6c,
+ 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2d, 0x65, 0x6e, 0x74,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x45, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x22, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2c, 0x0d, 0x0a, 0x69, 0x74,
+ 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2c,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73,
+ 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67,
+ 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x44, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x27, 0x4e, 0x54, 0x2d, 0x45,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x65, 0x66, 0x27, 0x3e,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x44, 0x65, 0x66, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68,
+ 0x73, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27,
+ 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
+ 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x53, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x72, 0x68, 0x73, 0x3e, 0x7c, 0x20, 0x27, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x50, 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x22, 0x3e, 0x50, 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74,
+ 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x53,
+ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x4e, 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4e, 0x44, 0x61, 0x74, 0x61, 0x44,
+ 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68,
+ 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x27, 0x4e, 0x44, 0x41, 0x54, 0x41, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x6e, 0x6f, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e,
+ 0x44, 0x61, 0x74, 0x61, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x4e, 0x44,
+ 0x61, 0x74, 0x61, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2c,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x67,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x22, 0x3e, 0x75,
+ 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x3b, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20,
+ 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x6e, 0x6f, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x44, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x64, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x73, 0x79, 0x73, 0x69, 0x64, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x49,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x3e, 0x54,
+ 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69,
+ 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x0d, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x2e, 0x20, 0x49, 0x74,
+ 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x38, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x38, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x55, 0x52, 0x49, 0x0d, 0x0a, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64,
+ 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x36,
+ 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x36, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x0d, 0x0a, 0x28, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x33,
+ 0x39, 0x36, 0x22, 0x2f, 0x3e, 0x2c, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x37,
+ 0x33, 0x32, 0x22, 0x2f, 0x3e, 0x29, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x36, 0x22, 0x3e, 0x5b, 0x45,
+ 0x37, 0x36, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x6d, 0x65, 0x61,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x70,
+ 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x27, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x49, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x0d, 0x0a, 0x28, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x23, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x29, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x55, 0x6e, 0x6c, 0x65, 0x73,
+ 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x73, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x61,
+ 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61,
+ 0x72, 0x20, 0x44, 0x54, 0x44, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61,
+ 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x29, 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x20, 0x55, 0x52, 0x49, 0x73, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x72,
+ 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x2e,
+ 0x20, 0x41, 0x20, 0x55, 0x52, 0x49, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74,
+ 0x20, 0x74, 0x68, 0x75, 0x73, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74,
+ 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22,
+ 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x44,
+ 0x54, 0x44, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x6f, 0x72, 0x20,
+ 0x74, 0x6f, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x37, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x38, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x55, 0x52, 0x49, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67,
+ 0x20, 0x6f, 0x66, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x64, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x65, 0x64, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61,
+ 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x41, 0x53, 0x43, 0x49, 0x49,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c,
+ 0x20, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x32, 0x2e, 0x34, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x62, 0x69, 0x62,
+ 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63,
+ 0x32, 0x33, 0x39, 0x36, 0x22, 0x2f, 0x3e, 0x2c, 0x20, 0x65, 0x78, 0x63,
+ 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x0d,
+ 0x0a, 0x28, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x23, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65,
+ 0x72, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x28,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x25, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x29, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x71, 0x75, 0x61, 0x72, 0x65, 0x0d, 0x0a, 0x62, 0x72, 0x61, 0x63, 0x6b,
+ 0x65, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x20, 0x72, 0x65, 0x2d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x37, 0x33, 0x32,
+ 0x22, 0x2f, 0x3e, 0x2e, 0x20, 0x44, 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x45, 0x61, 0x63, 0x68, 0x20, 0x64,
+ 0x69, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65,
+ 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x32,
+ 0x37, 0x39, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x6f, 0x6e,
+ 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x62, 0x79,
+ 0x74, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x41, 0x6e, 0x79, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73,
+ 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x64, 0x69, 0x73, 0x61,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x73, 0x63,
+ 0x61, 0x70, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x55, 0x52, 0x49, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70,
+ 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73,
+ 0x6d, 0x20, 0x28, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x2c, 0x20,
+ 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x25, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x76, 0x61, 0x72, 0x3e, 0x48, 0x48, 0x3c, 0x2f,
+ 0x76, 0x61, 0x72, 0x3e, 0x2c, 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x72, 0x65,
+ 0x20, 0x48, 0x48, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68,
+ 0x65, 0x78, 0x61, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
+ 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x75, 0x62, 0x69,
+ 0x64, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x50, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x22, 0x3e, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x0d, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x41, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d,
+ 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74,
+ 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x0d, 0x0a, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x74, 0x6f,
+ 0x20, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68,
+ 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x38, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x38,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x55, 0x52, 0x49, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2e, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x20, 0x69, 0x73, 0x20, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x38, 0x22,
+ 0x3e, 0x5b, 0x45, 0x38, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x55, 0x52, 0x49, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20,
+ 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x2e, 0x20, 0x42, 0x65, 0x66,
+ 0x6f, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x69, 0x73, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, 0x64,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x0d, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29,
+ 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69,
+ 0x6e, 0x67, 0x20, 0x77, 0x68, 0x69, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0d, 0x0a, 0x62, 0x65, 0x20,
+ 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x70, 0x65, 0x6e,
+ 0x2d, 0x68, 0x61, 0x74, 0x63, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x20,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x2f, 0x62, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x70, 0x6c, 0x61,
+ 0x74, 0x65, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x61, 0x74, 0x63, 0x68,
+ 0x2e, 0x78, 0x6d, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x70, 0x65, 0x6e,
+ 0x2d, 0x68, 0x61, 0x74, 0x63, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20,
+ 0x22, 0x2d, 0x2f, 0x2f, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x69,
+ 0x74, 0x79, 0x2f, 0x2f, 0x54, 0x45, 0x58, 0x54, 0x20, 0x53, 0x74, 0x61,
+ 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x2d, 0x68,
+ 0x61, 0x74, 0x63, 0x68, 0x20, 0x62, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x70,
+ 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x65, 0x78, 0x74,
+ 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62,
+ 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x4f,
+ 0x70, 0x65, 0x6e, 0x48, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x78, 0x6d, 0x6c,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x20, 0x68, 0x61, 0x74, 0x63, 0x68, 0x2d, 0x70, 0x69,
+ 0x63, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x20, 0x22, 0x2e, 0x2e, 0x2f, 0x67,
+ 0x72, 0x61, 0x66, 0x69, 0x78, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x61,
+ 0x74, 0x63, 0x68, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x0d, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x44, 0x41, 0x54, 0x41,
+ 0x20, 0x67, 0x69, 0x66, 0x20, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x54, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x73, 0x65, 0x63, 0x2d, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x54,
+ 0x68, 0x65, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x44, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68,
+ 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x31, 0x30, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30,
+ 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x73, 0x68, 0x6f, 0x75,
+ 0x6c, 0x64, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a,
+ 0x3e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e,
+ 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x54,
+ 0x65, 0x78, 0x74, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70,
+ 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x32, 0x2e, 0x35, 0x22, 0x20, 0x70,
+ 0x63, 0x77, 0x35, 0x3d, 0x22, 0x31, 0x33, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x26, 0x70, 0x69, 0x6f, 0x3b, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3e, 0x56, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f,
+ 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x26, 0x70, 0x69,
+ 0x63, 0x3b, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f,
+ 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72,
+ 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x6c, 0x69,
+ 0x74, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x62, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x4e,
+ 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61,
+ 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79,
+ 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x0d, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d,
+ 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x39, 0x34, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x34, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78,
+ 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65,
+ 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74,
+ 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74,
+ 0x65, 0x78, 0x74, 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x66, 0x2d, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x57, 0x65, 0x6c, 0x6c, 0x2d, 0x46, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x20, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66,
+ 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x20, 0x41, 0x6e, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x67, 0x65, 0x6e,
+ 0x65, 0x72, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x77, 0x65,
+ 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x0d, 0x0a, 0x69,
+ 0x66, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x6e, 0x74,
+ 0x22, 0x3e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e, 0x5b, 0x45,
+ 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x6c,
+ 0x6c, 0x0d, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x77,
+ 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c,
+ 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x57, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x45, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64,
+ 0x45, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e,
+ 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x54,
+ 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x54, 0x65, 0x78,
+ 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74, 0x50, 0x45, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x65, 0x78, 0x74, 0x50, 0x45, 0x3c, 0x2f, 0x6c,
+ 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x54, 0x65, 0x78, 0x74,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x54, 0x65, 0x78, 0x74, 0x44, 0x65,
+ 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3f, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x65, 0x78, 0x74,
+ 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e,
+ 0x65, 0x78, 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x44, 0x65, 0x63,
+ 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x39, 0x22, 0x3e,
+ 0x5b, 0x45, 0x31, 0x30, 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74,
+ 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x0d, 0x0a, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64,
+ 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x65, 0x64, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x41, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x69,
+ 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70,
+ 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x0d, 0x0a, 0x73, 0x74, 0x72,
+ 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65,
+ 0x72, 0x6c, 0x79, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x3b, 0x20,
+ 0x6e, 0x6f, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x67,
+ 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x67, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x65,
+ 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65,
+ 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2d,
+ 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x67, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x22, 0x3e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x70, 0x69, 0x22, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x72,
+ 0x65, 0x66, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x6f, 0x72, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72,
+ 0x65, 0x66, 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x63, 0x61, 0x6e, 0x20,
+ 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x65, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x63, 0x68, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x61, 0x63, 0x68,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x75,
+ 0x73, 0x65, 0x20, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x73, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c,
+ 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x36, 0x22,
+ 0x3e, 0x5b, 0x45, 0x35, 0x36, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x62, 0x6f, 0x74, 0x68, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x55, 0x54, 0x46, 0x2d,
+ 0x31, 0x36, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x37, 0x22, 0x3e, 0x5b,
+ 0x45, 0x37, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x73, 0x2c, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x79, 0x0d, 0x0a,
+ 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x55,
+ 0x54, 0x46, 0x2d, 0x38, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x54, 0x46, 0x2d,
+ 0x31, 0x36, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x79, 0x74, 0x65,
+ 0x20, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x0d, 0x0a, 0x62,
+ 0x79, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x37, 0x22,
+ 0x3e, 0x5b, 0x45, 0x36, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x41, 0x6e, 0x6e, 0x65, 0x78, 0x0d, 0x0a, 0x46, 0x20, 0x6f, 0x66, 0x20,
+ 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x49, 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34, 0x36, 0x22, 0x2f, 0x3e,
+ 0x2c, 0x20, 0x41, 0x6e, 0x6e, 0x65, 0x78, 0x20, 0x48, 0x20, 0x6f, 0x66,
+ 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2d, 0x32,
+ 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x2c, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x32, 0x2e, 0x34, 0x20, 0x6f, 0x66, 0x20,
+ 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x2f, 0x3e, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x32, 0x2e, 0x37, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x62, 0x69, 0x62,
+ 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x55, 0x6e, 0x69,
+ 0x63, 0x6f, 0x64, 0x65, 0x33, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x28, 0x74, 0x68, 0x65, 0x20,
+ 0x5a, 0x45, 0x52, 0x4f, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x20, 0x4e,
+ 0x4f, 0x2d, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x20, 0x53, 0x50, 0x41, 0x43,
+ 0x45, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c,
+ 0x20, 0x23, 0x78, 0x46, 0x45, 0x46, 0x46, 0x29, 0x2e, 0x20, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
+ 0x75, 0x72, 0x65, 0x2c, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61,
+ 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63,
+ 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x58, 0x4d, 0x4c, 0x0d, 0x0a,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20,
+ 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61,
+ 0x74, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x55,
+ 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x55, 0x54,
+ 0x46, 0x2d, 0x31, 0x36, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6c, 0x74, 0x68,
+ 0x6f, 0x75, 0x67, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x73,
+ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x64, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e,
+ 0x64, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64,
+ 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x61, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65,
+ 0x61, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x6d, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x34,
+ 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x49, 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62,
+ 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x4d, 0x49,
+ 0x4d, 0x45, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x29, 0x2c,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31,
+ 0x36, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x67, 0x69,
+ 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x74, 0x65, 0x78,
+ 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x28, 0x73, 0x65,
+ 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x54, 0x65, 0x78, 0x74,
+ 0x44, 0x65, 0x63, 0x6c, 0x22, 0x2f, 0x3e, 0x29, 0x20, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d,
+ 0x22, 0x65, 0x62, 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f,
+ 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e,
+ 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x20, 0x27, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x45, 0x71, 0x22, 0x3e, 0x45, 0x71, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x28, 0x27, 0x22, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x63, 0x4e,
+ 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x27, 0x22, 0x27, 0x20, 0x7c, 0x20,
+ 0x22, 0x27, 0x22, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22,
+ 0x3e, 0x45, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x22, 0x27, 0x22, 0x20, 0x29, 0x20, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x6e, 0x63, 0x4e, 0x61,
+ 0x6d, 0x65, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x20, 0x28, 0x5b,
+ 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5d,
+ 0x20, 0x7c, 0x20, 0x27, 0x2d, 0x27, 0x29, 0x2a, 0x3c, 0x2f, 0x72, 0x68,
+ 0x73, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x3e, 0x45, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
+ 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x63, 0x6f, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x73,
+ 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f,
+ 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69,
+ 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x64, 0x65,
+ 0x63, 0x6c, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x45, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x63,
+ 0x4e, 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x69, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x20,
+ 0x45, 0x44, 0x49, 0x54, 0x3a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x41, 0x4e, 0x41,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x49, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x38,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x49, 0x53, 0x4f, 0x2d, 0x31, 0x30,
+ 0x36, 0x34, 0x36, 0x2d, 0x55, 0x43, 0x53, 0x2d, 0x32, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x0d, 0x0a, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x49, 0x53, 0x4f,
+ 0x2d, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2d, 0x55, 0x43, 0x53, 0x2d, 0x34,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x55, 0x6e, 0x69,
+ 0x63, 0x6f, 0x64, 0x65, 0x20, 0x2f, 0x20, 0x49, 0x53, 0x4f, 0x2f, 0x49,
+ 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2c, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x49,
+ 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d,
+ 0x32, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x2e, 0x2e, 0x2e, 0x20, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31,
+ 0x30, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x36, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d,
+ 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x76, 0x61, 0x72, 0x3e, 0x6e, 0x3c,
+ 0x2f, 0x76, 0x61, 0x72, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x20, 0x28, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x3c, 0x76, 0x61,
+ 0x72, 0x3e, 0x6e, 0x3c, 0x2f, 0x76, 0x61, 0x72, 0x3e, 0x0d, 0x0a, 0x69,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x35, 0x39, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x49, 0x53, 0x4f, 0x2d, 0x32, 0x30, 0x32, 0x32, 0x2d,
+ 0x4a, 0x50, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x53, 0x68, 0x69, 0x66,
+ 0x74, 0x5f, 0x4a, 0x49, 0x53, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x45, 0x55, 0x43, 0x2d, 0x4a, 0x50, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x4a, 0x49, 0x53, 0x20, 0x58, 0x2d, 0x30, 0x32, 0x30,
+ 0x38, 0x2d, 0x31, 0x39, 0x39, 0x37, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68,
+ 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x35, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x37, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x49, 0x74, 0x0d, 0x0a, 0x69, 0x73,
+ 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x73, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x28, 0x61, 0x73, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x63,
+ 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68,
+ 0x3e, 0x73, 0x29, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x41,
+ 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x4e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x73, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
+ 0x79, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x38,
+ 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x49, 0x41, 0x4e, 0x41, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x6f, 0x73,
+ 0x65, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65,
+ 0x64, 0x2c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x65, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3b, 0x0d,
+ 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20,
+ 0x75, 0x73, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x6e, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x78, 0x2d,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x70, 0x72, 0x65,
+ 0x66, 0x69, 0x78, 0x2e, 0x0d, 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x73, 0x68, 0x6f,
+ 0x75, 0x6c, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2d, 0x69, 0x6e, 0x73,
+ 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x77, 0x61,
+ 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
+ 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x70, 0x72, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x41, 0x4e,
+ 0x41, 0x2d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x74,
+ 0x20, 0x49, 0x41, 0x4e, 0x41, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x74,
+ 0x72, 0x65, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x61, 0x73, 0x20, 0x75,
+ 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x28, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x2c, 0x20,
+ 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x2c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x0d, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20,
+ 0x61, 0x6c, 0x6c, 0x20, 0x49, 0x41, 0x4e, 0x41, 0x2d, 0x72, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69,
+ 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x70, 0x6f, 0x72, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f,
+ 0x6c, 0x0d, 0x0a, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x48, 0x54, 0x54,
+ 0x50, 0x20, 0x6f, 0x72, 0x20, 0x4d, 0x49, 0x4d, 0x45, 0x29, 0x2c, 0x20,
+ 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3e, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x22, 0x3e,
+ 0x5b, 0x45, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x66, 0x6f,
+ 0x72, 0x0d, 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e,
+ 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x2c, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x6e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x42, 0x79,
+ 0x74, 0x65, 0x20, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x72,
+ 0x6b, 0x0d, 0x0a, 0x6e, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x65,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x73, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+ 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x55, 0x54,
+ 0x46, 0x2d, 0x38, 0x2c, 0x20, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x72,
+ 0x79, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x6c, 0x79, 0x0d, 0x0a, 0x6e, 0x65,
+ 0x65, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35,
+ 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x49, 0x74, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x33, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x36, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x61, 0x0d, 0x0a, 0x66, 0x61, 0x74, 0x61,
+ 0x6c, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x65,
+ 0x72, 0x72, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x3c,
+ 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x54,
+ 0x65, 0x78, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x54, 0x65, 0x78,
+ 0x74, 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x74,
+ 0x6f, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x66, 0x61, 0x74,
+ 0x61, 0x6c, 0x22, 0x3e, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0d,
+ 0x0a, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x39, 0x22, 0x3e, 0x5b, 0x45, 0x37,
+ 0x39, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x49, 0x74, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x61, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65,
+ 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x28, 0x76, 0x69, 0x61, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x0d,
+ 0x0a, 0x6f, 0x72, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x2d, 0x6c,
+ 0x65, 0x76, 0x65, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f,
+ 0x6c, 0x29, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20,
+ 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x75, 0x74, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x63, 0x74, 0x65,
+ 0x74, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0d,
+ 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f,
+ 0x20, 0x61, 0x20, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x55,
+ 0x54, 0x46, 0x2d, 0x38, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x54, 0x46, 0x2d,
+ 0x31, 0x36, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x45, 0x78, 0x61,
+ 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61,
+ 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x32, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x33,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x74, 0x65, 0x78, 0x74, 0x0d,
+ 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
+ 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3f, 0x78,
+ 0x6d, 0x6c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d,
+ 0x27, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x27, 0x3f, 0x3e, 0x0d, 0x0a, 0x26,
+ 0x6c, 0x74, 0x3b, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x27, 0x45, 0x55, 0x43, 0x2d, 0x4a, 0x50,
+ 0x27, 0x3f, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76,
+ 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x50,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x54, 0x72, 0x65,
+ 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65,
+ 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77,
+ 0x20, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x7a, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x0d, 0x0a, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x76, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x75,
+ 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61,
+ 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
+ 0x65, 0x0d, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20,
+ 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x65, 0x61,
+ 0x63, 0x68, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20,
+ 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f,
+ 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x3a, 0x20, 0x3c, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x61, 0x73, 0x20, 0x61,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61,
+ 0x6e, 0x79, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x66, 0x74, 0x65,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x73,
+ 0x74, 0x61, 0x67, 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d, 0x74,
+ 0x61, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x74,
+ 0x61, 0x67, 0x22, 0x3e, 0x65, 0x6e, 0x64, 0x2d, 0x74, 0x61, 0x67, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b,
+ 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c,
+ 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x61, 0x73, 0x20, 0x61, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x69, 0x6e, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x73, 0x74, 0x61, 0x67, 0x22, 0x3e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2d,
+ 0x74, 0x61, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x64, 0x65, 0x66,
+ 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74,
+ 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x3b, 0x0d, 0x0a, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74,
+ 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x4f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20,
+ 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x69,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65,
+ 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2c, 0x0d,
+ 0x0a, 0x6f, 0x72, 0x20, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d,
+ 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x6b, 0x65, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65,
+ 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x61, 0x73,
+ 0x20, 0x61, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x27, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6c, 0x69,
+ 0x74, 0x65, 0x6e, 0x74, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x6c, 0x69, 0x74,
+ 0x65, 0x72, 0x61, 0x6c, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x63, 0x6f,
+ 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x6d,
+ 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e,
+ 0x20, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d,
+ 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32,
+ 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39,
+ 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x61, 0x73, 0x0d, 0x0a, 0x61, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e,
+ 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x62,
+ 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65,
+ 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70,
+ 0x65, 0x22, 0x3e, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6f, 0x75,
+ 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,
+ 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x49, 0x22,
+ 0x3e, 0x50, 0x49, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e,
+ 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x6f,
+ 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
+ 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22,
+ 0x3e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x74, 0x65, 0x72,
+ 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x75, 0x62,
+ 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x50,
+ 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64,
+ 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x65,
+ 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x65, 0x63, 0x74, 0x22, 0x2f,
+ 0x3e, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, 0x72, 0x64,
+ 0x65, 0x72, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65,
+ 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x20, 0x63, 0x65,
+ 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x37,
+ 0x22, 0x3e, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e,
+ 0x3c, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x72, 0x6f,
+ 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x63, 0x6f,
+ 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x73, 0x70,
+ 0x61, 0x6e, 0x3d, 0x22, 0x34, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d,
+ 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x54, 0x79,
+ 0x70, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x72,
+ 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x32, 0x22, 0x20, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72,
+ 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72,
+ 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x22, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d,
+ 0x22, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x3e, 0x3c, 0x74, 0x64,
+ 0x3e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x45, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0d,
+ 0x0a, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c,
+ 0x74, 0x72, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65,
+ 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x3d, 0x22, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x74,
+ 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x6e, 0x6f, 0x74, 0x2d, 0x72, 0x65, 0x63, 0x6f, 0x67,
+ 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x20, 0x72,
+ 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x49, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x2d, 0x69, 0x66, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22,
+ 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x69,
+ 0x66, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e,
+ 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x49, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x0d, 0x0a, 0x76,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6d, 0x69, 0x64, 0x64, 0x6c,
+ 0x65, 0x22, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x52, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x23, 0x6e, 0x6f, 0x74, 0x2d, 0x72, 0x65, 0x63, 0x6f,
+ 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x20,
+ 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69,
+ 0x6e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x49, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x6c,
+ 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69,
+ 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64,
+ 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x35, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x31, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72,
+ 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62,
+ 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x64, 0x22, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64,
+ 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c,
+ 0x74, 0x72, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65,
+ 0x6e, 0x74, 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e,
+ 0x3d, 0x22, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x74,
+ 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67,
+ 0x68, 0x74, 0x22, 0x3e, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x61,
+ 0x73, 0x20, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0d,
+ 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c,
+ 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x6e, 0x6f, 0x74, 0x2d,
+ 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x22, 0x3e,
+ 0x4e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a,
+ 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64,
+ 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65,
+ 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x35, 0x31,
+ 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x31, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64,
+ 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64,
+ 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x22, 0x3e, 0x4e,
+ 0x6f, 0x74, 0x69, 0x66, 0x79, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x74, 0x64, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x35, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x31, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x6e,
+ 0x6f, 0x74, 0x2d, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67,
+ 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d,
+ 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x0d, 0x0a, 0x76, 0x61,
+ 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65,
+ 0x22, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d,
+ 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69,
+ 0x6e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x49, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6c, 0x69,
+ 0x74, 0x65, 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73,
+ 0x22, 0x3e, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x3c, 0x2f,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x23, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x22, 0x3e, 0x42, 0x79, 0x70,
+ 0x61, 0x73, 0x73, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64,
+ 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64,
+ 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x64, 0x22, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x20,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65,
+ 0x72, 0x22, 0x0d, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22,
+ 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x74, 0x64, 0x20,
+ 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74,
+ 0x22, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x69, 0x6e, 0x20, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c,
+ 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x61, 0x73, 0x2d, 0x50,
+ 0x45, 0x22, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0d,
+ 0x0a, 0x61, 0x73, 0x20, 0x50, 0x45, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69,
+ 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64,
+ 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64,
+ 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64,
+ 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e,
+ 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x23, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22,
+ 0x3e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c, 0x2f,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x62, 0x6f,
+ 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6e,
+ 0x6f, 0x74, 0x2d, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e,
+ 0x6f, 0x74, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x4f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x44, 0x54, 0x44, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x25, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61,
+ 0x6c, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e,
+ 0x63, 0x65, 0x3b, 0x0d, 0x0a, 0x74, 0x68, 0x75, 0x73, 0x2c, 0x20, 0x77,
+ 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65,
+ 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x44, 0x54, 0x44, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a,
+ 0x61, 0x73, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x69, 0x6e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x20,
+ 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x77, 0x68, 0x65,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61,
+ 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70,
+ 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x0d, 0x0a,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x22, 0x20, 0x74,
+ 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x22, 0x3e, 0x41, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x73, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74,
+ 0x22, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x72,
+ 0x69, 0x65, 0x76, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e,
+ 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x74,
+ 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x69, 0x74, 0x20, 0x77, 0x65, 0x72,
+ 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65,
+ 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d,
+ 0x0a, 0x74, 0x65, 0x78, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x65, 0x78, 0x63,
+ 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x29, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x72,
+ 0x6b, 0x75, 0x70, 0x22, 0x3e, 0x6d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x75, 0x61,
+ 0x6c, 0x20, 0x77, 0x61, 0x79, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x36, 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x35, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x75,
+ 0x70, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73,
+ 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x20, 0x26, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x65, 0x6e, 0x74,
+ 0x73, 0x3b, 0x29, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x77, 0x61,
+ 0x79, 0x73, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x64, 0x61, 0x74, 0x61, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x2e, 0x20, 0x28, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x54, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x61, 0x6d, 0x70, 0x3b, 0x54, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x41, 0x54, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x54, 0x3b, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d,
+ 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6d, 0x70, 0x65, 0x72,
+ 0x73, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x2d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x64,
+ 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x2e, 0x29, 0x20, 0x41,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x69, 0x73,
+ 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20, 0x77,
+ 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69,
+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x74, 0x73, 0x65,
+ 0x6c, 0x66, 0x2e, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x2d, 0x69, 0x66, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x64, 0x20, 0x49, 0x66, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64,
+ 0x61, 0x74, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e,
+ 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x69, 0x6e,
+ 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0d, 0x0a, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x22, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x20, 0x49, 0x66,
+ 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x6d, 0x61, 0x79, 0x22, 0x3e, 0x6d, 0x61, 0x79,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x62, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x0d, 0x0a, 0x6e, 0x6f,
+ 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x20,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, 0x6e,
+ 0x6f, 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e,
+ 0x67, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x35,
+ 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x64, 0x6f, 0x65,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2c, 0x20,
+ 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d,
+ 0x0a, 0x69, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a,
+ 0x65, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x64, 0x69, 0x64, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72,
+ 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f,
+ 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74,
+ 0x69, 0x63, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x62,
+ 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x2c,
+ 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x64,
+ 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73,
+ 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x61, 0x72, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72,
+ 0x69, 0x6c, 0x79, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69,
+ 0x61, 0x74, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69,
+ 0x63, 0x75, 0x6c, 0x61, 0x72, 0x0d, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x69, 0x6e, 0x67,
+ 0x2e, 0x20, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x73, 0x2c, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c,
+ 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x6d, 0x69, 0x67,
+ 0x68, 0x74, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x74, 0x6f,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x20, 0x76,
+ 0x69, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x0d, 0x0a, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72,
+ 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x69, 0x74, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6f,
+ 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x6d, 0x61, 0x6e,
+ 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69,
+ 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x46, 0x6f,
+ 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x66, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75,
+ 0x74, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x66, 0x61, 0x74, 0x61,
+ 0x6c, 0x22, 0x3e, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x65, 0x72, 0x72, 0x6f,
+ 0x72, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c,
+ 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x70, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61,
+ 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75, 0x6e, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x22, 0x3e, 0x75, 0x6e, 0x70, 0x61, 0x72, 0x73,
+ 0x65, 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x6c, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x0d, 0x0a, 0x44, 0x54, 0x44, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70,
+ 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22,
+ 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x41, 0x74, 0x74,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x41, 0x74, 0x74, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x61, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69,
+ 0x6e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x22, 0x3e, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x0d,
+ 0x0a, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c,
+ 0x66, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20,
+ 0x69, 0x74, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x0d, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a,
+ 0x65, 0x64, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x6f, 0x72, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x0d, 0x0a,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79,
+ 0x73, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73,
+ 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x64, 0x61,
+ 0x74, 0x61, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c,
+ 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
+ 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x77,
+ 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x3a, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x26, 0x6c, 0x74, 0x3b,
+ 0x21, 0x2d, 0x2d, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x34, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x21, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x59, 0x4e, 0x20, 0x27, 0x22,
+ 0x59, 0x65, 0x73, 0x22, 0x27, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x57, 0x68, 0x61, 0x74, 0x48, 0x65,
+ 0x53, 0x61, 0x69, 0x64, 0x20, 0x22, 0x48, 0x65, 0x20, 0x73, 0x61, 0x69,
+ 0x64, 0x20, 0x25, 0x59, 0x4e, 0x3b, 0x22, 0x20, 0x3e, 0x5d, 0x5d, 0x3e,
+ 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x77, 0x68,
+ 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x6f, 0x74, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54,
+ 0x59, 0x20, 0x45, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x20, 0x22, 0x32,
+ 0x37, 0x27, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x3d, 0x27, 0x61, 0x2d, 0x26, 0x61, 0x6d, 0x70,
+ 0x3b, 0x45, 0x6e, 0x64, 0x41, 0x74, 0x74, 0x72, 0x3b, 0x3e, 0x3c, 0x2f,
+ 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x68,
+ 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75,
+ 0x6e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x22, 0x3e, 0x75, 0x6e, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a,
+ 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x61,
+ 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x3c, 0x6b, 0x77, 0x3e, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45,
+ 0x53, 0x3c, 0x2f, 0x6b, 0x77, 0x3e, 0x2c, 0x20, 0x61, 0x20, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f,
+ 0x66, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x73, 0x79, 0x73, 0x69, 0x64, 0x22, 0x3e, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x70, 0x75, 0x62,
+ 0x69, 0x64, 0x22, 0x3e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x28, 0x69,
+ 0x66, 0x20, 0x61, 0x6e, 0x79, 0x29, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62,
+ 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x61,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
+ 0x3e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x62, 0x79, 0x70,
+ 0x61, 0x73, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x68, 0x65,
+ 0x6e, 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6e, 0x74, 0x20,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62,
+ 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x6c, 0x65, 0x66, 0x74, 0x20, 0x61, 0x73, 0x20, 0x69, 0x73, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x33, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x61, 0x73, 0x2d, 0x50, 0x45, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x50, 0x45, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4a, 0x75, 0x73, 0x74, 0x20, 0x61, 0x73,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2d, 0x69, 0x66, 0x2d, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x22, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64,
+ 0x20, 0x69, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69,
+ 0x7a, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44,
+ 0x54, 0x44, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75,
+ 0x64, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22, 0x3e,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d,
+ 0x0a, 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x6c, 0x61, 0x72,
+ 0x67, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
+ 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x66, 0x6f, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x20, 0x28, 0x23, 0x78, 0x32, 0x30, 0x29, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x0d, 0x0a,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+ 0x20, 0x6f, 0x66, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69,
+ 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x20, 0x69,
+ 0x6e, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x44, 0x54, 0x44, 0x2e, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x36, 0x22, 0x3e, 0x5b,
+ 0x45, 0x39, 0x36, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68,
+ 0x69, 0x73, 0x0d, 0x0a, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
+ 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x70,
+ 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3b, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70,
+ 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69,
+ 0x6e, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x33, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69,
+ 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x43,
+ 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x70, 0x6c, 0x61,
+ 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x65, 0x78, 0x74, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49,
+ 0x6e, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6e, 0x67,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c,
+ 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75,
+ 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67,
+ 0x75, 0x69, 0x73, 0x68, 0x0d, 0x0a, 0x74, 0x77, 0x6f, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x6c, 0x69, 0x74, 0x65, 0x6e,
+ 0x74, 0x76, 0x61, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22,
+ 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x6c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63,
+ 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x63, 0x6f, 0x72, 0x72, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x74, 0x65, 0x72, 0x6d,
+ 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x0d, 0x0a, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x72, 0x65, 0x70, 0x6c, 0x74, 0x65, 0x78, 0x74, 0x22,
+ 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x52, 0x65, 0x70, 0x6c, 0x61,
+ 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x54, 0x65, 0x78, 0x74, 0x22,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x72,
+ 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65,
+ 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x28, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x3e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x29, 0x20, 0x6d, 0x61, 0x79,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x6c, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x20, 0x53, 0x75,
+ 0x63, 0x68, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x72, 0x65, 0x6c, 0x79, 0x0d, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61,
+ 0x6c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d,
+ 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x65, 0x22, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+ 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x72, 0x65, 0x70, 0x6c, 0x61,
+ 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74,
+ 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3b, 0x0d, 0x0a, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20,
+ 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65,
+ 0x66, 0x74, 0x20, 0x61, 0x73, 0x2d, 0x69, 0x73, 0x2c, 0x20, 0x75, 0x6e,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x2e, 0x20, 0x46, 0x6f,
+ 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x0d, 0x0a,
+ 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x25, 0x20, 0x70, 0x75, 0x62, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26,
+ 0x23, 0x78, 0x63, 0x39, 0x3b, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x47, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x61, 0x72, 0x64, 0x22, 0x20,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20,
+ 0x20, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x22, 0x41, 0x6c,
+ 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x64, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f,
+ 0x6b, 0x20, 0x20, 0x20, 0x22, 0x4c, 0x61, 0x20, 0x50, 0x65, 0x73, 0x74,
+ 0x65, 0x3a, 0x20, 0x41, 0x6c, 0x62, 0x65, 0x72, 0x74, 0x20, 0x43, 0x61,
+ 0x6d, 0x75, 0x73, 0x2c, 0x0d, 0x0a, 0x26, 0x23, 0x78, 0x41, 0x39, 0x3b,
+ 0x20, 0x31, 0x39, 0x34, 0x37, 0x20, 0x25, 0x70, 0x75, 0x62, 0x3b, 0x2e,
+ 0x20, 0x26, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x3b, 0x22, 0x20, 0x3e,
+ 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x62, 0x6f, 0x6f, 0x6b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x4c, 0x61, 0x20, 0x50, 0x65, 0x73, 0x74,
+ 0x65, 0x3a, 0x20, 0x41, 0x6c, 0x62, 0x65, 0x72, 0x74, 0x20, 0x43, 0x61,
+ 0x6d, 0x75, 0x73, 0x2c, 0x0d, 0x0a, 0xa9, 0x20, 0x31, 0x39, 0x34, 0x37,
+ 0x20, 0xc9, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x47, 0x61,
+ 0x6c, 0x6c, 0x69, 0x6d, 0x61, 0x72, 0x64, 0x2e, 0x20, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x3b, 0x3c, 0x2f, 0x65,
+ 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x67,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x0d, 0x0a,
+ 0x62, 0x65, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20,
+ 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x62, 0x6f, 0x6f, 0x6b, 0x3b, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20,
+ 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x27,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72,
+ 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73,
+ 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x78, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x64, 0x69,
+ 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66,
+ 0x20, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
+ 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x73, 0x65,
+ 0x65, 0x20, 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x65,
+ 0x78, 0x70, 0x61, 0x6e, 0x64, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65,
+ 0x63, 0x2d, 0x70, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x2d, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x50, 0x72, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x22, 0x20, 0x74, 0x65, 0x72,
+ 0x6d, 0x3d, 0x22, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x22, 0x3e, 0x45,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x0d, 0x0a,
+ 0x62, 0x6f, 0x74, 0x68, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x65, 0x73,
+ 0x63, 0x61, 0x70, 0x65, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x61, 0x6e, 0x67,
+ 0x6c, 0x65, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2c, 0x20,
+ 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x0d, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x65,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x20,
+ 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
+ 0x28, 0x26, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x73, 0x3b,
+ 0x29, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x2e, 0x20, 0x4e, 0x75,
+ 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20,
+ 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x3b, 0x20, 0x74, 0x68, 0x65,
+ 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x65, 0x64, 0x0d, 0x0a, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74,
+ 0x65, 0x6c, 0x79, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x73,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x6e, 0x75, 0x6d, 0x65, 0x72,
+ 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20,
+ 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x36, 0x30, 0x3b, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b,
+ 0x23, 0x33, 0x38, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x6d, 0x61, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20,
+ 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6f, 0x63,
+ 0x63, 0x75, 0x72, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6c, 0x6c, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e,
+ 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x6f, 0x72,
+ 0x20, 0x6e, 0x6f, 0x74, 0x2e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x22, 0x3e, 0x46, 0x6f, 0x72, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x58, 0x4d,
+ 0x4c, 0x0d, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c,
+ 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x38, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x38, 0x30,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x49, 0x66, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x6c, 0x74, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x61, 0x6d, 0x70, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20,
+ 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x77, 0x68,
+ 0x6f, 0x73, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, 0x73, 0x20,
+ 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x31, 0x30, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x33, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63,
+ 0x74, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x28, 0x6c, 0x65, 0x73, 0x73, 0x2d, 0x74, 0x68,
+ 0x61, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x61,
+ 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x29, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67,
+ 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x3b, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x65, 0x73,
+ 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x6d, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65,
+ 0x0d, 0x0a, 0x61, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72,
+ 0x6d, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20,
+ 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x67, 0x74,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x61, 0x70, 0x6f, 0x73, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x71, 0x75, 0x6f, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x0d, 0x0a,
+ 0x77, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x62,
+ 0x65, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64,
+ 0x20, 0x28, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x3b, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x73,
+ 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x69, 0x73, 0x20, 0x75, 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61,
+ 0x72, 0x79, 0x20, 0x62, 0x75, 0x74, 0x20, 0x68, 0x61, 0x72, 0x6d, 0x6c,
+ 0x65, 0x73, 0x73, 0x29, 0x2e, 0x0d, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x65,
+ 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x3c,
+ 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x74, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x36, 0x30,
+ 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54,
+ 0x59, 0x20, 0x67, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23,
+ 0x36, 0x32, 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x20, 0x61, 0x6d, 0x70, 0x20, 0x20, 0x20, 0x20, 0x22,
+ 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x33, 0x38, 0x3b, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x70,
+ 0x6f, 0x73, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x39, 0x3b, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20,
+ 0x71, 0x75, 0x6f, 0x74, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x34,
+ 0x3b, 0x22, 0x3e, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65,
+ 0x6c, 0x22, 0x3e, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26,
+ 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x6c, 0x74,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x61, 0x6d, 0x70,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x75,
+ 0x62, 0x6c, 0x79, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x44, 0x65, 0x63, 0x6c,
+ 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72,
+ 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x4e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e,
+ 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x0d, 0x0a, 0x62,
+ 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x75, 0x6e,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x2c, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x62, 0x65, 0x61,
+ 0x72, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x70, 0x69, 0x22, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x69, 0x73, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
+ 0x64, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74,
+ 0x2d, 0x6e, 0x6f, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x3e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x4e, 0x6f, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x74, 0x73,
+ 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x68, 0x65, 0x6c, 0x70,
+ 0x65, 0x72, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e,
+ 0x67, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63,
+ 0x72, 0x61, 0x70, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x44, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x6f, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6c, 0x68, 0x73, 0x3e, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x44, 0x65, 0x63, 0x6c, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72,
+ 0x68, 0x73, 0x3e, 0x27, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x4e, 0x4f, 0x54,
+ 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c,
+ 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x6e, 0x74,
+ 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22,
+ 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x28, 0x3c, 0x6e, 0x74,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x22, 0x3e, 0x45, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x44, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x44, 0x22,
+ 0x3e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x44, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x29, 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3f, 0x20, 0x27, 0x3e, 0x27, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x3c, 0x76, 0x63, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x55, 0x6e,
+ 0x69, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72,
+ 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x49, 0x44, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x50,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x44, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x27, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x27, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x53, 0x22, 0x3e, 0x53, 0x3c, 0x2f, 0x6e, 0x74, 0x3e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x50, 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x22, 0x3e, 0x50, 0x75, 0x62, 0x69, 0x64, 0x4c, 0x69, 0x74, 0x65,
+ 0x72, 0x61, 0x6c, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x68, 0x65, 0x61, 0x64,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x32, 0x32, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x32, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x0d, 0x0a,
+ 0x4e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4e, 0x61, 0x6d,
+ 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x70, 0x3e, 0x4f,
+ 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e,
+ 0x20, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x4e, 0x61, 0x6d, 0x65,
+ 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x76, 0x63, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x70, 0x72,
+ 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x28, 0x73, 0x29, 0x0d,
+ 0x0a, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65,
+ 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20,
+ 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79,
+ 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x69, 0x6e,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x73, 0x79, 0x73, 0x69, 0x64, 0x22, 0x3e, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x66, 0x69, 0x6c, 0x65, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20,
+ 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x65,
+ 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x61, 0x6c, 0x6c,
+ 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64,
+ 0x2e, 0x20, 0x28, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2c, 0x20, 0x68,
+ 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x58, 0x4d, 0x4c, 0x0d, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x20,
+ 0x74, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74,
+ 0x65, 0x6d, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x6f, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0d, 0x0a, 0x72, 0x75,
+ 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x29, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d,
+ 0x64, 0x6f, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x44, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x74,
+ 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x64, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c,
+ 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f,
+ 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x20, 0x74, 0x72, 0x65, 0x65, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67,
+ 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a,
+ 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x64, 0x65, 0x66, 0x3e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x64, 0x6f, 0x65, 0x73, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20,
+ 0x62, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x6c,
+ 0x69, 0x6b, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x69, 0x67, 0x68,
+ 0x74, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61,
+ 0x72, 0x0d, 0x0a, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20,
+ 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f,
+ 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x74,
+ 0x20, 0x61, 0x6c, 0x6c, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69,
+ 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x26, 0x43,
+ 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x3b, 0x20,
+ 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72,
+ 0x6f, 0x63, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x6f, 0x6e,
+ 0x2d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x43, 0x6f,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x3e,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x0d, 0x0a,
+ 0x74, 0x77, 0x6f, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x3a,
+ 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69,
+ 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x6c, 0x69,
+ 0x6b, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73,
+ 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x27, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74,
+ 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64,
+ 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x65, 0x6e,
+ 0x74, 0x22, 0x3e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72,
+ 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x79, 0x20, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64,
+ 0x65, 0x66, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x65,
+ 0x72, 0x6d, 0x3d, 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69,
+ 0x6e, 0x67, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x22, 0x3e, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x56, 0x61, 0x6c, 0x69,
+ 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d,
+ 0x3e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x32, 0x31, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x31, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x74, 0x20, 0x75, 0x73,
+ 0x65, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x78, 0x70,
+ 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d,
+ 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x22,
+ 0x3e, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6c,
+ 0x75, 0x72, 0x65, 0x73, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x66, 0x75, 0x6c,
+ 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x69, 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x54, 0x6f,
+ 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x73, 0x68, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x72, 0x65, 0x0d, 0x0a, 0x44, 0x54, 0x44, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4e, 0x6f, 0x6e, 0x2d, 0x76,
+ 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x64, 0x6f, 0x63,
+ 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x69, 0x6e, 0x63,
+ 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x44, 0x54, 0x44, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65,
+ 0x74, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x2e, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x0d, 0x0a, 0x69, 0x64,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x2d, 0x6d, 0x64, 0x65,
+ 0x63, 0x6c, 0x22, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x3d, 0x22, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3e, 0x20, 0x57, 0x68, 0x69,
+ 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x3c,
+ 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x61, 0x6c, 0x6c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x72,
+ 0x65, 0x61, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x44, 0x54, 0x44, 0x20,
+ 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x72, 0x65,
+ 0x61, 0x64, 0x2c, 0x20, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e,
+ 0x6e, 0x6f, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x72,
+ 0x65, 0x61, 0x64, 0x3b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73,
+ 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x41, 0x56,
+ 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x22, 0x3e, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x3c, 0x2f, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x2c, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f,
+ 0x66, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x23, 0x73, 0x65, 0x63, 0x2d, 0x61, 0x74, 0x74, 0x72, 0x2d, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3e, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x65, 0x72, 0x6d, 0x64, 0x65, 0x66, 0x3e, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x33, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x33,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x45, 0x78, 0x63, 0x65, 0x70,
+ 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x3d,
+ 0x22, 0x79, 0x65, 0x73, 0x22, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x74,
+ 0x68, 0x65, 0x79, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x75, 0x73, 0x65, 0x2d, 0x6d,
+ 0x64, 0x65, 0x63, 0x6c, 0x22, 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x3e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f,
+ 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x6f, 0x72, 0x20,
+ 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x61, 0x74, 0x74, 0x64, 0x65, 0x63, 0x6c,
+ 0x22, 0x3e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2d,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+ 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x61,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61,
+ 0x64, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x61, 0x79,
+ 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x61, 0x66, 0x65, 0x2d, 0x62, 0x65,
+ 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73,
+ 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x54, 0x68, 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x68, 0x69,
+ 0x67, 0x68, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x3b, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x0d, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x20, 0x65, 0x76, 0x65, 0x72,
+ 0x79, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64,
+ 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x76, 0x69, 0x6f, 0x6c, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x4c, 0x65, 0x73, 0x73, 0x20,
+ 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61, 0x6c,
+ 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3b, 0x20, 0x69, 0x74, 0x20, 0x6e, 0x65,
+ 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x0d,
+ 0x0a, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x65,
+ 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6f,
+ 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x43, 0x65, 0x72,
+ 0x74, 0x61, 0x69, 0x6e, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x66, 0x6f,
+ 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
+ 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61,
+ 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2e, 0x20, 0x45, 0x78, 0x61, 0x6d,
+ 0x70, 0x6c, 0x65, 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
+ 0x61, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x64, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x77, 0x66, 0x2d, 0x65,
+ 0x6e, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x22, 0x3e,
+ 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x44, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x2c, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x74, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x50, 0x61, 0x72, 0x73, 0x65,
+ 0x64, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x75,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x4e, 0x6f, 0x0d, 0x0a, 0x52,
+ 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x61, 0x73, 0x20,
+ 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65,
+ 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x66, 0x6f, 0x72,
+ 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x66, 0x6f, 0x72, 0x62,
+ 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65,
+ 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x65, 0x6e,
+ 0x74, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x69,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70,
+ 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x0d,
+ 0x0a, 0x76, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63,
+ 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20,
+ 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x46, 0x6f,
+ 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x61,
+ 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+ 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x23, 0x41, 0x56, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x22, 0x3e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a,
+ 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x69,
+ 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74,
+ 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x20,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x20, 0x68, 0x72,
+ 0x65, 0x66, 0x3d, 0x22, 0x23, 0x73, 0x65, 0x63, 0x2d, 0x61, 0x74, 0x74,
+ 0x72, 0x2d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x3e,
+ 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0d, 0x0a, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x69, 0x6e,
+ 0x67, 0x20, 0x73, 0x6f, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73,
+ 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x72,
+ 0x65, 0x61, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72,
+ 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x61,
+ 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62,
+ 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x2c, 0x0d, 0x0a, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6e, 0x6f,
+ 0x6e, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73, 0x20,
+ 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72,
+ 0x65, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x62,
+ 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x73, 0x0d, 0x0a, 0x6e, 0x6f,
+ 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x6f,
+ 0x66, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
+ 0x73, 0x73, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x66, 0x61,
+ 0x63, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x73, 0x75, 0x63,
+ 0x68, 0x0d, 0x0a, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20,
+ 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x65, 0x78, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x75, 0x73, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x73, 0x65, 0x63, 0x2d, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61,
+ 0x72, 0x20, 0x6f, 0x66, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x69, 0x73, 0x20,
+ 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20,
+ 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x0d, 0x0a, 0x45, 0x78, 0x74, 0x65,
+ 0x6e, 0x64, 0x65, 0x64, 0x20, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x73, 0x2d,
+ 0x4e, 0x61, 0x75, 0x72, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x28, 0x45,
+ 0x42, 0x4e, 0x46, 0x29, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x72, 0x75, 0x6c, 0x65,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x61, 0x6d,
+ 0x6d, 0x61, 0x72, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x0d,
+ 0x0a, 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x73, 0x79,
+ 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x3a, 0x3a, 0x3d, 0x20, 0x65, 0x78, 0x70,
+ 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x65, 0x67, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69,
+ 0x74, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c,
+ 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x34, 0x32, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x32,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x74, 0x68, 0x65, 0x0d, 0x0a,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61,
+ 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2c, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x0d, 0x0a, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6c,
+ 0x65, 0x74, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72,
+ 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x57, 0x69, 0x74, 0x68, 0x69,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x73,
+ 0x69, 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6c,
+ 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6f,
+ 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x3c,
+ 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x23, 0x78, 0x4e, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x77, 0x68,
+ 0x65, 0x72, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x4e, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
+ 0x68, 0x65, 0x78, 0x61, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0d,
+ 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x69,
+ 0x6e, 0x20, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30,
+ 0x36, 0x34, 0x36, 0x20, 0x77, 0x68, 0x6f, 0x73, 0x65, 0x20, 0x63, 0x61,
+ 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x28, 0x55, 0x43, 0x53,
+ 0x2d, 0x34, 0x29, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x73,
+ 0x20, 0x61, 0x6e, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
+ 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x2c, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x69,
+ 0x6e, 0x67, 0x0d, 0x0a, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x23,
+ 0x78, 0x4e, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x6e,
+ 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x3b, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6c,
+ 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x7a, 0x65, 0x72, 0x6f,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72,
+ 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63,
+ 0x6f, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73,
+ 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d,
+ 0x0a, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69,
+ 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58,
+ 0x4d, 0x4c, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x61, 0x2d,
+ 0x7a, 0x41, 0x2d, 0x5a, 0x5d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x23, 0x78, 0x4e,
+ 0x2d, 0x23, 0x78, 0x4e, 0x5d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68,
+ 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x39, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x33, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x6e, 0x74, 0x0d, 0x0a, 0x64,
+ 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22,
+ 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x28, 0x73, 0x29,
+ 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x28,
+ 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c,
+ 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x22,
+ 0x3e, 0x5b, 0x45, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x61, 0x62, 0x63, 0x5d, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x5b, 0x23, 0x78, 0x4e, 0x23, 0x78, 0x4e, 0x23, 0x78, 0x4e, 0x5d,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x0d, 0x0a, 0x3e, 0x3c, 0x2f, 0x6c,
+ 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73,
+ 0x20, 0x61, 0x6e, 0x79, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66,
+ 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43,
+ 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x6d,
+ 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x65, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x45, 0x6e, 0x75, 0x6d,
+ 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ 0x62, 0x65, 0x20, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x62,
+ 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x5b, 0x5e, 0x61, 0x2d, 0x7a, 0x5d, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b,
+ 0x5e, 0x23, 0x78, 0x4e, 0x2d, 0x23, 0x78, 0x4e, 0x5d, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75,
+ 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x33, 0x22, 0x3e, 0x5b,
+ 0x45, 0x39, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43,
+ 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e,
+ 0x74, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x6f, 0x75, 0x74, 0x73, 0x69,
+ 0x64, 0x65, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x0d, 0x0a, 0x69, 0x6e, 0x64,
+ 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x5b, 0x5e, 0x61, 0x62, 0x63, 0x5d, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x2c, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x5e,
+ 0x23, 0x78, 0x4e, 0x23, 0x78, 0x4e, 0x23, 0x78, 0x4e, 0x5d, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x79,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x33, 0x22, 0x3e,
+ 0x5b, 0x45, 0x39, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3c,
+ 0x6e, 0x74, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f,
+ 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x2e, 0x20, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x33,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x45, 0x6e, 0x75, 0x6d, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0d, 0x0a, 0x61, 0x6e, 0x64,
+ 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x66,
+ 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6d,
+ 0x69, 0x78, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b,
+ 0x65, 0x74, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66,
+ 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x22, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x22, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
+ 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66,
+ 0x3e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x67, 0x69, 0x76, 0x65,
+ 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x27, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x27, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63,
+ 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64,
+ 0x74, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x3e, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0d, 0x0a, 0x67, 0x69,
+ 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x20,
+ 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
+ 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6d,
+ 0x62, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x6c, 0x65, 0x78, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73,
+ 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x2c,
+ 0x0d, 0x0a, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x42, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x65,
+ 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x20,
+ 0x3c, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x28,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73,
+ 0x73, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x29,
+ 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x74,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20,
+ 0x75, 0x6e, 0x69, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+ 0x64, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
+ 0x69, 0x73, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3f,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67,
+ 0x3b, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65,
+ 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x20, 0x42, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x42, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x32, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x30, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x0d, 0x0a, 0x6f, 0x70,
+ 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, 0x68,
+ 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6c,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x74,
+ 0x68, 0x75, 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x20,
+ 0x42, 0x20, 0x7c, 0x20, 0x43, 0x20, 0x44, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x28, 0x41, 0x20, 0x42, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x43,
+ 0x20, 0x44, 0x29, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x41, 0x20, 0x7c, 0x20, 0x42, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x41, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x6f, 0x72, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x42, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62,
+ 0x6f, 0x74, 0x68, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x20,
+ 0x2d, 0x20, 0x42, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
+ 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
+ 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x62, 0x75, 0x74, 0x20, 0x64, 0x6f, 0x65,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x42, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x2b, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x6e,
+ 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x63,
+ 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x2e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x32, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x30, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x43, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x68, 0x69,
+ 0x67, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x74, 0x68,
+ 0x75, 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x2b, 0x20,
+ 0x7c, 0x20, 0x42, 0x2b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20,
+ 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x28,
+ 0x41, 0x2b, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x42, 0x2b, 0x29, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62,
+ 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x2a, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x7a, 0x65,
+ 0x72, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x32, 0x30, 0x22, 0x3e, 0x5b, 0x45, 0x32, 0x30, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x43, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20,
+ 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65,
+ 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61,
+ 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x20,
+ 0x74, 0x68, 0x75, 0x73, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x41,
+ 0x2a, 0x20, 0x7c, 0x20, 0x42, 0x2a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63,
+ 0x61, 0x6c, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x28, 0x41, 0x2a, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x42, 0x2a, 0x29,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x20,
+ 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x3a, 0x20, 0x3c, 0x67, 0x6c,
+ 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x2f, 0x2a, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x2a, 0x2f, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x20, 0x77, 0x66, 0x63, 0x3a, 0x20, 0x2e,
+ 0x2e, 0x2e, 0x20, 0x5d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65,
+ 0x66, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x77, 0x65, 0x6c, 0x6c, 0x2d,
+ 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x63,
+ 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x3b, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x73, 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61,
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x20,
+ 0x6f, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d,
+ 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d, 0x77, 0x65, 0x6c,
+ 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x3e, 0x77, 0x65, 0x6c,
+ 0x6c, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x3c, 0x2f, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x70,
+ 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x65, 0x66, 0x3e, 0x3c, 0x2f,
+ 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x67, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x5b, 0x20, 0x76, 0x63, 0x3a, 0x20, 0x2e, 0x2e,
+ 0x2e, 0x20, 0x5d, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x66,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69,
+ 0x74, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e,
+ 0x74, 0x3b, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x62, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61,
+ 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x3c, 0x74, 0x65, 0x72, 0x6d,
+ 0x72, 0x65, 0x66, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x64, 0x74, 0x2d,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x3e, 0x76, 0x61, 0x6c, 0x69, 0x64,
+ 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a,
+ 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x73,
+ 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64,
+ 0x65, 0x66, 0x3e, 0x3c, 0x2f, 0x67, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x62, 0x61, 0x63, 0x6b,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x26, 0x53, 0x47, 0x4d,
+ 0x4c, 0x3b, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d,
+ 0x20, 0x26, 0x42, 0x69, 0x62, 0x6c, 0x69, 0x6f, 0x3b, 0x20, 0x2d, 0x2d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x73, 0x65, 0x63, 0x2d, 0x62, 0x69, 0x62, 0x6c, 0x69, 0x6f, 0x67,
+ 0x72, 0x61, 0x70, 0x68, 0x79, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x64,
+ 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d,
+ 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x74, 0x64,
+ 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x4e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x52, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x49,
+ 0x41, 0x4e, 0x41, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x41, 0x4e,
+ 0x41, 0x2d, 0x43, 0x48, 0x41, 0x52, 0x53, 0x45, 0x54, 0x53, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x35, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x38, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+ 0x0d, 0x0a, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x4e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x69, 0x74, 0x79, 0x29, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c,
+ 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x43,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x53, 0x65, 0x74,
+ 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x0d, 0x0a, 0x65, 0x64, 0x2e, 0x20, 0x4b, 0x65, 0x6c, 0x64, 0x20,
+ 0x53, 0x69, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x20, 0x65, 0x74, 0x20,
+ 0x61, 0x6c, 0x2e, 0x20, 0x53, 0x65, 0x65, 0x20, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x66, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x66, 0x74, 0x70, 0x2e, 0x69, 0x73, 0x69, 0x2e, 0x65, 0x64, 0x75,
+ 0x2f, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x2f, 0x69, 0x61,
+ 0x6e, 0x61, 0x2f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x2f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x2d, 0x73, 0x65, 0x74, 0x73, 0x22, 0x3e, 0x66, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x66, 0x74, 0x70, 0x2e, 0x69, 0x73, 0x69, 0x2e, 0x65, 0x64, 0x75,
+ 0x2f, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x2f, 0x69, 0x61,
+ 0x6e, 0x61, 0x2f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x2f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x2d, 0x73, 0x65, 0x74, 0x73, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x0d, 0x0a,
+ 0x3e, 0x2e, 0x20, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x52, 0x46,
+ 0x43, 0x31, 0x37, 0x36, 0x36, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66, 0x63,
+ 0x2f, 0x72, 0x66, 0x63, 0x31, 0x37, 0x36, 0x36, 0x2e, 0x74, 0x78, 0x74,
+ 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20,
+ 0x52, 0x46, 0x43, 0x20, 0x31, 0x37, 0x36, 0x36, 0x22, 0x3e, 0x49, 0x45,
+ 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65,
+ 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x52, 0x46, 0x43, 0x20, 0x31, 0x37, 0x36, 0x36, 0x3a, 0x20, 0x54,
+ 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x3e, 0x2c, 0x20, 0x65, 0x64, 0x2e, 0x20, 0x48, 0x2e, 0x20,
+ 0x41, 0x6c, 0x76, 0x65, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x64, 0x2e, 0x20,
+ 0x31, 0x39, 0x39, 0x35, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39, 0x2d, 0x6f, 0x6c, 0x64, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x20, 0x6b,
+ 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x20, 0x36, 0x33, 0x39, 0x22,
+ 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x33, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x38, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67,
+ 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x20, 0x36, 0x33,
+ 0x39, 0x3a, 0x31, 0x39, 0x38, 0x38, 0x20, 0x28, 0x45, 0x29, 0x2e, 0x0d,
+ 0x0a, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x5b, 0x47, 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d, 0x3a,
+ 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x0d, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61,
+ 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x31, 0x39, 0x38, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62,
+ 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64,
+ 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x33, 0x31, 0x36, 0x36, 0x2d, 0x6f, 0x6c,
+ 0x64, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c,
+ 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x20, 0x33,
+ 0x31, 0x36, 0x36, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x33,
+ 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x28, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20,
+ 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53,
+ 0x4f, 0x20, 0x33, 0x31, 0x36, 0x36, 0x2d, 0x31, 0x3a, 0x31, 0x39, 0x39,
+ 0x37, 0x0d, 0x0a, 0x28, 0x45, 0x29, 0x2e, 0x20, 0x43, 0x6f, 0x64, 0x65,
+ 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66,
+ 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x73, 0x75, 0x62,
+ 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x26, 0x6d,
+ 0x64, 0x61, 0x73, 0x68, 0x3b, 0x0d, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x20,
+ 0x31, 0x3a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x63,
+ 0x6f, 0x64, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x5b, 0x47, 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d,
+ 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x53, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x37, 0x2e, 0x3c, 0x2f, 0x62, 0x69,
+ 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34, 0x36, 0x22,
+ 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45,
+ 0x43, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x22, 0x3e, 0x49, 0x53, 0x4f,
+ 0x20, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x53, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30,
+ 0x36, 0x34, 0x36, 0x2d, 0x31, 0x39, 0x39, 0x33, 0x20, 0x28, 0x45, 0x29,
+ 0x2e, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79,
+ 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x0d, 0x0a, 0x55, 0x6e,
+ 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x20, 0x4d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x6c, 0x65, 0x2d, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x43,
+ 0x6f, 0x64, 0x65, 0x64, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x53, 0x65, 0x74, 0x20, 0x28, 0x55, 0x43, 0x53, 0x29,
+ 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x20, 0x50, 0x61, 0x72,
+ 0x74, 0x20, 0x31, 0x3a, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65,
+ 0x63, 0x74, 0x75, 0x72, 0x65, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x42,
+ 0x61, 0x73, 0x69, 0x63, 0x20, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69,
+ 0x6e, 0x67, 0x75, 0x61, 0x6c, 0x20, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20,
+ 0x5b, 0x47, 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x31,
+ 0x39, 0x39, 0x33, 0x20, 0x28, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x61, 0x6d,
+ 0x65, 0x6e, 0x64, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x41, 0x4d, 0x20,
+ 0x31, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x41, 0x4d,
+ 0x20, 0x37, 0x29, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x49,
+ 0x53, 0x4f, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2d, 0x32, 0x30, 0x30, 0x30,
+ 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22,
+ 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45,
+ 0x43, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2d, 0x32, 0x30, 0x30, 0x30,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x36, 0x37, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x37, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x28,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+ 0x6c, 0x0d, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29,
+ 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x2d, 0x31, 0x3a, 0x32, 0x30, 0x30, 0x30, 0x2e, 0x20, 0x49, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x74,
+ 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x20, 0x26, 0x6d,
+ 0x64, 0x61, 0x73, 0x68, 0x3b, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72,
+ 0x73, 0x61, 0x6c, 0x20, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65,
+ 0x2d, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x64,
+ 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x53,
+ 0x65, 0x74, 0x20, 0x28, 0x55, 0x43, 0x53, 0x29, 0x20, 0x26, 0x6d, 0x64,
+ 0x61, 0x73, 0x68, 0x3b, 0x0d, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x20, 0x31,
+ 0x3a, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75,
+ 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63,
+ 0x20, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x75, 0x61,
+ 0x6c, 0x20, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x3c, 0x2f, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x5b, 0x47, 0x65, 0x6e,
+ 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x4f, 0x72, 0x67,
+ 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x30, 0x2e,
+ 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69,
+ 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x55, 0x6e, 0x69, 0x63, 0x6f,
+ 0x64, 0x65, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x55, 0x6e, 0x69,
+ 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x55, 0x6e,
+ 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x72,
+ 0x74, 0x69, 0x75, 0x6d, 0x2e, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e,
+ 0x54, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x0d,
+ 0x0a, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2c, 0x20, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x30, 0x2e, 0x3c,
+ 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x52, 0x65, 0x61, 0x64, 0x69,
+ 0x6e, 0x67, 0x2c, 0x20, 0x4d, 0x61, 0x73, 0x73, 0x2e, 0x3a, 0x20, 0x41,
+ 0x64, 0x64, 0x69, 0x73, 0x6f, 0x6e, 0x2d, 0x57, 0x65, 0x73, 0x6c, 0x65,
+ 0x79, 0x20, 0x44, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73,
+ 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x0d, 0x0a, 0x31, 0x39, 0x39,
+ 0x36, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x55, 0x6e, 0x69,
+ 0x63, 0x6f, 0x64, 0x65, 0x33, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x55,
+ 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x33, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x37, 0x22,
+ 0x3e, 0x5b, 0x45, 0x36, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x0d, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x75, 0x6d,
+ 0x2e, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x54, 0x68, 0x65, 0x20,
+ 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x53, 0x74, 0x61, 0x6e,
+ 0x64, 0x61, 0x72, 0x64, 0x2c, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68,
+ 0x3e, 0x20, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x0d, 0x0a,
+ 0x4d, 0x61, 0x73, 0x73, 0x2e, 0x3a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x73,
+ 0x6f, 0x6e, 0x2d, 0x57, 0x65, 0x73, 0x6c, 0x65, 0x79, 0x20, 0x44, 0x65,
+ 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x20, 0x50, 0x72, 0x65,
+ 0x73, 0x73, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x30, 0x2e, 0x20, 0x49, 0x53,
+ 0x42, 0x4e, 0x20, 0x30, 0x2d, 0x32, 0x30, 0x31, 0x2d, 0x36, 0x31, 0x36,
+ 0x33, 0x33, 0x2d, 0x35, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6e, 0x75, 0x6c, 0x6c, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x0d, 0x0a, 0x49, 0x44, 0x20, 0x6d, 0x61,
+ 0x64, 0x65, 0x20, 0x22, 0x6e, 0x75, 0x6c, 0x6c, 0x22, 0x20, 0x74, 0x6f,
+ 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70,
+ 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x46, 0x69, 0x72,
+ 0x73, 0x74, 0x0d, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3b,
+ 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x6f, 0x64, 0x64, 0x2c, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x27,
+ 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x73, 0x65, 0x74, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c,
+ 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x20, 0x0d, 0x0a, 0x63, 0x75, 0x72,
+ 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x64, 0x64, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x62, 0x61, 0x63,
+ 0x6b, 0x77, 0x61, 0x72, 0x64, 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x20,
+ 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6d,
+ 0x61, 0x64, 0x65, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2e, 0x0d,
+ 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x62, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x62,
+ 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x41, 0x68, 0x6f, 0x22,
+ 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x41, 0x68, 0x6f, 0x2f, 0x55, 0x6c,
+ 0x6c, 0x6d, 0x61, 0x6e, 0x22, 0x3e, 0x41, 0x68, 0x6f, 0x2c, 0x20, 0x41,
+ 0x6c, 0x66, 0x72, 0x65, 0x64, 0x20, 0x56, 0x2e, 0x2c, 0x20, 0x52, 0x61,
+ 0x76, 0x69, 0x20, 0x53, 0x65, 0x74, 0x68, 0x69, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x4a, 0x65, 0x66, 0x66, 0x72, 0x65, 0x79, 0x20, 0x44, 0x2e,
+ 0x0d, 0x0a, 0x55, 0x6c, 0x6c, 0x6d, 0x61, 0x6e, 0x2e, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x43, 0x6f, 0x6d, 0x70,
+ 0x69, 0x6c, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x63,
+ 0x69, 0x70, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e,
+ 0x69, 0x71, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x54,
+ 0x6f, 0x6f, 0x6c, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e,
+ 0x67, 0x3a, 0x20, 0x41, 0x64, 0x64, 0x69, 0x73, 0x6f, 0x6e, 0x2d, 0x57,
+ 0x65, 0x73, 0x6c, 0x65, 0x79, 0x2c, 0x20, 0x31, 0x39, 0x38, 0x36, 0x2c,
+ 0x20, 0x72, 0x70, 0x74, 0x2e, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x2e, 0x20,
+ 0x31, 0x39, 0x38, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x2d, 0x4c, 0x65, 0x65, 0x22,
+ 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72,
+ 0x73, 0x2d, 0x4c, 0x65, 0x65, 0x20, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x2e,
+ 0x22, 0x3e, 0x20, 0x42, 0x65, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x2d, 0x4c,
+ 0x65, 0x65, 0x2c, 0x20, 0x54, 0x2e, 0x2c, 0x20, 0x52, 0x2e, 0x20, 0x46,
+ 0x69, 0x65, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x64, 0x20, 0x4c, 0x2e, 0x20, 0x4d, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x28, 0x55, 0x52, 0x49, 0x29, 0x3a,
+ 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x20, 0x53, 0x79, 0x6e,
+ 0x74, 0x61, 0x78, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x65, 0x6d,
+ 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x31, 0x39, 0x39, 0x37, 0x2e,
+ 0x20, 0x28, 0x57, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72,
+ 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x20,
+ 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x52,
+ 0x46, 0x43, 0x31, 0x37, 0x33, 0x38, 0x2e, 0x29, 0x3c, 0x2f, 0x62, 0x69,
+ 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x41, 0x42, 0x4b, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22,
+ 0x42, 0x72, 0xfc, 0x67, 0x67, 0x65, 0x6d, 0x61, 0x6e, 0x6e, 0x2d, 0x4b,
+ 0x6c, 0x65, 0x69, 0x6e, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x32, 0x22, 0x3e, 0x5b, 0x45, 0x32,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x42, 0x72, 0xfc, 0x67, 0x67,
+ 0x65, 0x6d, 0x61, 0x6e, 0x6e, 0x2d, 0x4b, 0x6c, 0x65, 0x69, 0x6e, 0x2c,
+ 0x0d, 0x0a, 0x41, 0x6e, 0x6e, 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x50, 0x72,
+ 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x48, 0x61,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73,
+ 0x63, 0x68, 0x72, 0x69, 0x66, 0x74, 0x2e, 0x20, 0x46, 0x61, 0x63, 0x75,
+ 0x6c, 0x74, 0x79, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x74, 0x68,
+ 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x73, 0x20, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74,
+ 0x79, 0x20, 0x6f, 0x66, 0x20, 0x46, 0x72, 0x65, 0x69, 0x62, 0x75, 0x72,
+ 0x67, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x33, 0x2e, 0x20, 0x28, 0x53, 0x65,
+ 0x65, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x66, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x74, 0x70, 0x2e, 0x69,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6b, 0x2e, 0x75, 0x6e,
+ 0x69, 0x2d, 0x66, 0x72, 0x65, 0x69, 0x62, 0x75, 0x72, 0x67, 0x2e, 0x64,
+ 0x65, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f,
+ 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x62, 0x72, 0x75, 0x65, 0x67,
+ 0x67, 0x65, 0x6d, 0x2f, 0x68, 0x61, 0x62, 0x69, 0x6c, 0x2e, 0x70, 0x73,
+ 0x22, 0x3e, 0x66, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x74, 0x70, 0x2e,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6b, 0x2e, 0x75,
+ 0x6e, 0x69, 0x2d, 0x66, 0x72, 0x65, 0x69, 0x62, 0x75, 0x72, 0x67, 0x2e,
+ 0x64, 0x65, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x2f, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x2f, 0x62, 0x72, 0x75, 0x65,
+ 0x67, 0x67, 0x65, 0x6d, 0x2f, 0x68, 0x61, 0x62, 0x69, 0x6c, 0x2e, 0x70,
+ 0x73, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x3e, 0x2e, 0x29, 0x3c,
+ 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62,
+ 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x41, 0x42, 0x4b, 0x44, 0x57, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x20,
+ 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x42, 0x72, 0xfc, 0x67, 0x67, 0x65, 0x6d,
+ 0x61, 0x6e, 0x6e, 0x2d, 0x4b, 0x6c, 0x65, 0x69, 0x6e, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x57, 0x6f, 0x6f, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x32, 0x22, 0x3e,
+ 0x5b, 0x45, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x42, 0x72,
+ 0xfc, 0x67, 0x67, 0x65, 0x6d, 0x61, 0x6e, 0x6e, 0x2d, 0x4b, 0x6c, 0x65,
+ 0x69, 0x6e, 0x2c, 0x0d, 0x0a, 0x41, 0x6e, 0x6e, 0x65, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x44, 0x65, 0x72, 0x69, 0x63, 0x6b, 0x20, 0x57, 0x6f,
+ 0x6f, 0x64, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73,
+ 0x74, 0x69, 0x63, 0x20, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20,
+ 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a, 0x55,
+ 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0xe4, 0x74, 0x20, 0x46,
+ 0x72, 0x65, 0x69, 0x62, 0x75, 0x72, 0x67, 0x2c, 0x20, 0x49, 0x6e, 0x73,
+ 0x74, 0x69, 0x74, 0x75, 0x74, 0x20, 0x66, 0xfc, 0x72, 0x20, 0x49, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6b, 0x2c, 0x20, 0x42, 0x65,
+ 0x72, 0x69, 0x63, 0x68, 0x74, 0x20, 0x33, 0x38, 0x2c, 0x20, 0x4f, 0x6b,
+ 0x74, 0x6f, 0x62, 0x65, 0x72, 0x20, 0x31, 0x39, 0x39, 0x31, 0x2e, 0x20,
+ 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x0d, 0x0a, 0x61, 0x62,
+ 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x41, 0x2e,
+ 0x20, 0x46, 0x69, 0x6e, 0x6b, 0x65, 0x6c, 0x2c, 0x20, 0x4d, 0x2e, 0x20,
+ 0x4a, 0x61, 0x6e, 0x74, 0x7a, 0x65, 0x6e, 0x2c, 0x20, 0x48, 0x72, 0x73,
+ 0x67, 0x2e, 0x2c, 0x20, 0x53, 0x54, 0x41, 0x43, 0x53, 0x20, 0x31, 0x39,
+ 0x39, 0x32, 0x2c, 0x20, 0x53, 0x2e, 0x20, 0x31, 0x37, 0x33, 0x2d, 0x31,
+ 0x38, 0x34, 0x2e, 0x20, 0x53, 0x70, 0x72, 0x69, 0x6e, 0x67, 0x65, 0x72,
+ 0x2d, 0x56, 0x65, 0x72, 0x6c, 0x61, 0x67, 0x2c, 0x0d, 0x0a, 0x42, 0x65,
+ 0x72, 0x6c, 0x69, 0x6e, 0x20, 0x31, 0x39, 0x39, 0x32, 0x2e, 0x20, 0x4c,
+ 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72,
+ 0x20, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x35, 0x37, 0x37,
+ 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x4f, 0x6e, 0x65, 0x2d,
+ 0x55, 0x6e, 0x61, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x0d,
+ 0x0a, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x4c, 0x61, 0x6e,
+ 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x31, 0x34, 0x30, 0x20, 0x28, 0x32, 0x29, 0x3a, 0x20, 0x32, 0x32,
+ 0x39, 0x2d, 0x32, 0x35, 0x33, 0x2c, 0x0d, 0x0a, 0x46, 0x65, 0x62, 0x72,
+ 0x75, 0x61, 0x72, 0x79, 0x20, 0x31, 0x39, 0x39, 0x38, 0x2e, 0x3c, 0x2f,
+ 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x22, 0x20,
+ 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x22, 0x3e,
+ 0x4a, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x2e,
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x58, 0x4d, 0x4c, 0x2e, 0x20, 0x53, 0x65, 0x65, 0x20, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x4e, 0x4f, 0x54, 0x45, 0x2d, 0x73,
+ 0x67, 0x6d, 0x6c, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x31, 0x32,
+ 0x31, 0x35, 0x22, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
+ 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52,
+ 0x2f, 0x4e, 0x4f, 0x54, 0x45, 0x2d, 0x73, 0x67, 0x6d, 0x6c, 0x2d, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x39, 0x37, 0x31, 0x32, 0x31, 0x35, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x2e, 0x20, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x49, 0x41, 0x4e, 0x41, 0x2d, 0x4c, 0x41, 0x4e, 0x47, 0x43, 0x4f, 0x44,
+ 0x45, 0x53, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x73, 0x69, 0x2e,
+ 0x65, 0x64, 0x75, 0x2f, 0x69, 0x6e, 0x2d, 0x6e, 0x6f, 0x74, 0x65, 0x73,
+ 0x2f, 0x69, 0x61, 0x6e, 0x61, 0x2f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61,
+ 0x67, 0x65, 0x73, 0x2f, 0x22, 0x0d, 0x0a, 0x6b, 0x65, 0x79, 0x3d, 0x22,
+ 0x49, 0x41, 0x4e, 0x41, 0x2d, 0x4c, 0x41, 0x4e, 0x47, 0x43, 0x4f, 0x44,
+ 0x45, 0x53, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x35, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x35, 0x38,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x28, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x65, 0x74, 0x0d, 0x0a, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e,
+ 0x65, 0x64, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x41,
+ 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x29, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x20, 0x54, 0x61, 0x67, 0x73, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x0d, 0x0a, 0x65,
+ 0x64, 0x2e, 0x20, 0x4b, 0x65, 0x6c, 0x64, 0x20, 0x53, 0x69, 0x6d, 0x6f,
+ 0x6e, 0x73, 0x65, 0x6e, 0x20, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x2e, 0x3c,
+ 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62,
+ 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x52, 0x46, 0x43, 0x31, 0x37, 0x33,
+ 0x38, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63, 0x31,
+ 0x37, 0x33, 0x38, 0x2e, 0x74, 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79,
+ 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x52, 0x46, 0x43, 0x31, 0x37,
+ 0x33, 0x38, 0x22, 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69,
+ 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b,
+ 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x31,
+ 0x37, 0x33, 0x38, 0x3a, 0x20, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
+ 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4c, 0x6f,
+ 0x63, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x0d, 0x0a, 0x28, 0x55, 0x52, 0x4c,
+ 0x29, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x2e, 0x20, 0x42, 0x65, 0x72,
+ 0x6e, 0x65, 0x72, 0x73, 0x2d, 0x4c, 0x65, 0x65, 0x2c, 0x20, 0x4c, 0x2e,
+ 0x20, 0x4d, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x4d,
+ 0x2e, 0x20, 0x4d, 0x63, 0x43, 0x61, 0x68, 0x69, 0x6c, 0x6c, 0x2e, 0x20,
+ 0x31, 0x39, 0x39, 0x34, 0x2e, 0x20, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x52, 0x46, 0x43, 0x31, 0x38, 0x30, 0x38, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72,
+ 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63, 0x31, 0x38, 0x30, 0x38, 0x2e, 0x74,
+ 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x52, 0x46, 0x43, 0x31, 0x38, 0x30, 0x38, 0x22, 0x3e, 0x49,
+ 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x46, 0x6f, 0x72, 0x63,
+ 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65,
+ 0x66, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x31, 0x38, 0x30, 0x38, 0x3a, 0x20,
+ 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x55, 0x6e, 0x69,
+ 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x0d, 0x0a, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2c, 0x20,
+ 0x65, 0x64, 0x2e, 0x20, 0x52, 0x2e, 0x20, 0x46, 0x69, 0x65, 0x6c, 0x64,
+ 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x31, 0x39, 0x39, 0x35, 0x2e, 0x20, 0x3c,
+ 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62,
+ 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x52, 0x46, 0x43, 0x32, 0x31, 0x34,
+ 0x31, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63,
+ 0x32, 0x31, 0x34, 0x31, 0x2e, 0x74, 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65,
+ 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x52, 0x46, 0x43, 0x32,
+ 0x31, 0x34, 0x31, 0x22, 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67,
+ 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73,
+ 0x6b, 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x65,
+ 0x6d, 0x70, 0x68, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x32, 0x31, 0x34, 0x31,
+ 0x3a, 0x20, 0x55, 0x52, 0x4e, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78,
+ 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x2c, 0x20, 0x65, 0x64, 0x2e,
+ 0x0d, 0x0a, 0x52, 0x2e, 0x20, 0x4d, 0x6f, 0x61, 0x74, 0x73, 0x2e, 0x20,
+ 0x31, 0x39, 0x39, 0x37, 0x2e, 0x20, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x72, 0x66, 0x63, 0x32, 0x32, 0x37, 0x39, 0x22, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72,
+ 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63, 0x32, 0x32, 0x37, 0x39, 0x2e, 0x74,
+ 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x32, 0x37, 0x39, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x37, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x38, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69,
+ 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b,
+ 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x32,
+ 0x32, 0x37, 0x39, 0x3a, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x2c, 0x20,
+ 0x61, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x2c, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x65, 0x64, 0x2e,
+ 0x20, 0x46, 0x2e, 0x20, 0x59, 0x65, 0x72, 0x67, 0x65, 0x61, 0x75, 0x2c,
+ 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x31, 0x39,
+ 0x39, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x66,
+ 0x63, 0x32, 0x33, 0x37, 0x36, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69,
+ 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66, 0x63, 0x2f,
+ 0x72, 0x66, 0x63, 0x32, 0x33, 0x37, 0x36, 0x2e, 0x74, 0x78, 0x74, 0x22,
+ 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x52,
+ 0x46, 0x43, 0x20, 0x32, 0x33, 0x37, 0x36, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x34, 0x38,
+ 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x38, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x46, 0x6f,
+ 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x32, 0x33, 0x37, 0x36,
+ 0x3a, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x20,
+ 0x54, 0x79, 0x70, 0x65, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x0d, 0x0a, 0x65, 0x64, 0x2e, 0x20, 0x45,
+ 0x2e, 0x20, 0x57, 0x68, 0x69, 0x74, 0x65, 0x68, 0x65, 0x61, 0x64, 0x2c,
+ 0x20, 0x4d, 0x2e, 0x20, 0x4d, 0x75, 0x72, 0x61, 0x74, 0x61, 0x2e, 0x20,
+ 0x31, 0x39, 0x39, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x72, 0x66, 0x63, 0x32, 0x33, 0x39, 0x36, 0x22, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66,
+ 0x63, 0x2f, 0x72, 0x66, 0x63, 0x32, 0x33, 0x39, 0x36, 0x2e, 0x74, 0x78,
+ 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x33, 0x39, 0x36, 0x22, 0x3e, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58,
+ 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30,
+ 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45,
+ 0x36, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x36, 0x5d, 0x3c, 0x2f, 0x6c,
+ 0x6f, 0x63, 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a, 0x28, 0x49, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e,
+ 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20,
+ 0x46, 0x6f, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x52, 0x46, 0x43, 0x20, 0x32, 0x33,
+ 0x39, 0x36, 0x3a, 0x20, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20,
+ 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x49, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x28, 0x55,
+ 0x52, 0x49, 0x29, 0x3a, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63,
+ 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x3c, 0x2f, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x2e, 0x20, 0x54, 0x2e, 0x20, 0x42,
+ 0x65, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x2d, 0x4c, 0x65, 0x65, 0x2c, 0x20,
+ 0x52, 0x2e, 0x20, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x2c,
+ 0x20, 0x4c, 0x2e, 0x20, 0x4d, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x2e, 0x0d, 0x0a, 0x31, 0x39, 0x39, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69,
+ 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x37, 0x33, 0x32, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x68,
+ 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x72, 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63, 0x32, 0x37, 0x33, 0x32,
+ 0x2e, 0x74, 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49,
+ 0x45, 0x54, 0x46, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x37, 0x33, 0x32,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x36, 0x36, 0x22, 0x3e, 0x5b, 0x45, 0x36, 0x36, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x49, 0x45, 0x54, 0x46, 0x0d, 0x0a,
+ 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, 0x6e,
+ 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x61,
+ 0x73, 0x6b, 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x29, 0x2e, 0x20, 0x3c,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x52, 0x46, 0x43,
+ 0x20, 0x32, 0x37, 0x33, 0x32, 0x3a, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61,
+ 0x6c, 0x0d, 0x0a, 0x49, 0x50, 0x76, 0x36, 0x20, 0x41, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x52, 0x4c,
+ 0x27, 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x20, 0x52, 0x2e, 0x20, 0x48, 0x69, 0x6e, 0x64, 0x65, 0x6e,
+ 0x2c, 0x20, 0x42, 0x2e, 0x20, 0x43, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74,
+ 0x65, 0x72, 0x2c, 0x20, 0x4c, 0x2e, 0x20, 0x4d, 0x61, 0x73, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x2e, 0x0d, 0x0a, 0x31, 0x39, 0x39, 0x39, 0x2e, 0x3c,
+ 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62,
+ 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32, 0x37, 0x38,
+ 0x31, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x66, 0x63, 0x2f, 0x72, 0x66, 0x63, 0x32,
+ 0x37, 0x38, 0x31, 0x2e, 0x74, 0x78, 0x74, 0x22, 0x20, 0x6b, 0x65, 0x79,
+ 0x3d, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32,
+ 0x37, 0x38, 0x31, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x37, 0x37, 0x22, 0x3e, 0x5b, 0x45,
+ 0x37, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x49,
+ 0x45, 0x54, 0x46, 0x20, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65,
+ 0x29, 0x2e, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x52, 0x46, 0x43,
+ 0x20, 0x32, 0x37, 0x38, 0x31, 0x3a, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31,
+ 0x36, 0x2c, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31,
+ 0x30, 0x36, 0x34, 0x36, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x2c,
+ 0x20, 0x65, 0x64, 0x2e, 0x20, 0x50, 0x2e, 0x20, 0x48, 0x6f, 0x66, 0x66,
+ 0x6d, 0x61, 0x6e, 0x2c, 0x20, 0x46, 0x2e, 0x20, 0x59, 0x65, 0x72, 0x67,
+ 0x65, 0x61, 0x75, 0x2e, 0x20, 0x32, 0x30, 0x30, 0x30, 0x2e, 0x3c, 0x2f,
+ 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x36, 0x33, 0x39, 0x22,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20,
+ 0x6b, 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x20, 0x36, 0x33, 0x39,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x33, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x38, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x20, 0x36,
+ 0x33, 0x39, 0x3a, 0x31, 0x39, 0x38, 0x38, 0x20, 0x28, 0x45, 0x29, 0x2e,
+ 0x0d, 0x0a, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61,
+ 0x67, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72,
+ 0x65, 0x66, 0x3e, 0x20, 0x5b, 0x47, 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d,
+ 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x38, 0x38, 0x2e, 0x3c, 0x2f, 0x62, 0x69,
+ 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x33, 0x31, 0x36, 0x36, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x6b,
+ 0x65, 0x79, 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x20, 0x33, 0x31, 0x36, 0x36,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x33, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x33, 0x38, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69,
+ 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x20, 0x33,
+ 0x31, 0x36, 0x36, 0x2d, 0x31, 0x3a, 0x31, 0x39, 0x39, 0x37, 0x0d, 0x0a,
+ 0x28, 0x45, 0x29, 0x2e, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x73, 0x75, 0x62, 0x64, 0x69, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73,
+ 0x68, 0x3b, 0x0d, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x20, 0x31, 0x3a, 0x20,
+ 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x64, 0x65,
+ 0x73, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e,
+ 0x20, 0x5b, 0x47, 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x0d, 0x0a, 0x53, 0x74, 0x61, 0x6e, 0x64,
+ 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x31, 0x39, 0x39, 0x37, 0x2e, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x49, 0x53, 0x4f, 0x38, 0x38, 0x37, 0x39, 0x22, 0x20, 0x6b, 0x65, 0x79,
+ 0x3d, 0x22, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x22, 0x3e,
+ 0x49, 0x53, 0x4f, 0x20, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65,
+ 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x0d, 0x0a, 0x38, 0x38, 0x37,
+ 0x39, 0x3a, 0x31, 0x39, 0x38, 0x36, 0x28, 0x45, 0x29, 0x2e, 0x20, 0x49,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x26, 0x6d,
+ 0x64, 0x61, 0x73, 0x68, 0x3b, 0x20, 0x54, 0x65, 0x78, 0x74, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x20, 0x53, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68,
+ 0x3b, 0x0d, 0x0a, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20,
+ 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x4d, 0x61, 0x72, 0x6b, 0x75, 0x70, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75,
+ 0x61, 0x67, 0x65, 0x20, 0x28, 0x53, 0x47, 0x4d, 0x4c, 0x29, 0x2e, 0x3c,
+ 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x46,
+ 0x69, 0x72, 0x73, 0x74, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x0d, 0x0a, 0x31, 0x39,
+ 0x38, 0x36, 0x2d, 0x31, 0x30, 0x2d, 0x31, 0x35, 0x2e, 0x20, 0x5b, 0x47,
+ 0x65, 0x6e, 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x38, 0x36,
+ 0x2e, 0x20, 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x62, 0x69, 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x49, 0x53, 0x4f,
+ 0x31, 0x30, 0x37, 0x34, 0x34, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d, 0x22,
+ 0x49, 0x53, 0x4f, 0x2f, 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x37, 0x34,
+ 0x34, 0x22, 0x3e, 0x49, 0x53, 0x4f, 0x20, 0x28, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,
+ 0x6f, 0x72, 0x0d, 0x0a, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x2f,
+ 0x49, 0x45, 0x43, 0x20, 0x31, 0x30, 0x37, 0x34, 0x34, 0x2d, 0x31, 0x39,
+ 0x39, 0x32, 0x20, 0x28, 0x45, 0x29, 0x2e, 0x20, 0x49, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x65, 0x63, 0x68,
+ 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x20, 0x26, 0x6d, 0x64, 0x61, 0x73,
+ 0x68, 0x3b, 0x0d, 0x0a, 0x48, 0x79, 0x70, 0x65, 0x72, 0x6d, 0x65, 0x64,
+ 0x69, 0x61, 0x2f, 0x54, 0x69, 0x6d, 0x65, 0x2d, 0x62, 0x61, 0x73, 0x65,
+ 0x64, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x28,
+ 0x48, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x29, 0x2e, 0x20, 0x3c, 0x2f, 0x74,
+ 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x20, 0x5b, 0x47, 0x65,
+ 0x6e, 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x0d, 0x0a, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x32,
+ 0x2e, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x45, 0x78, 0x74, 0x65,
+ 0x6e, 0x64, 0x65, 0x64, 0x20, 0x46, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x0d, 0x0a, 0x41, 0x6e, 0x6e, 0x65, 0x78, 0x65, 0x2e,
+ 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x20, 0x5b, 0x47, 0x65, 0x6e,
+ 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61,
+ 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x36, 0x2e, 0x20,
+ 0x3c, 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69,
+ 0x62, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x65, 0x62, 0x73, 0x67,
+ 0x6d, 0x6c, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x67, 0x6d, 0x6c,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x38,
+ 0x38, 0x37, 0x39, 0x72, 0x65, 0x76, 0x2f, 0x6e, 0x30, 0x30, 0x32, 0x39,
+ 0x2e, 0x68, 0x74, 0x6d, 0x22, 0x0d, 0x0a, 0x6b, 0x65, 0x79, 0x3d, 0x22,
+ 0x57, 0x45, 0x42, 0x53, 0x47, 0x4d, 0x4c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x34, 0x33, 0x22,
+ 0x3e, 0x5b, 0x45, 0x34, 0x33, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e,
+ 0x49, 0x53, 0x4f, 0x0d, 0x0a, 0x28, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61,
+ 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x20, 0x3c, 0x74, 0x69, 0x74, 0x6c,
+ 0x65, 0x72, 0x65, 0x66, 0x3e, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37,
+ 0x39, 0x3a, 0x31, 0x39, 0x38, 0x36, 0x0d, 0x0a, 0x54, 0x43, 0x32, 0x2e,
+ 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x20,
+ 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x20, 0x44, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x72, 0x6f,
+ 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x6e, 0x67,
+ 0x75, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x20, 0x3c, 0x2f, 0x74, 0x69, 0x74,
+ 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x0d, 0x0a, 0x5b, 0x47, 0x65, 0x6e,
+ 0x65, 0x76, 0x61, 0x5d, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61,
+ 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x38, 0x2e, 0x3c,
+ 0x2f, 0x62, 0x69, 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x69, 0x62,
+ 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x78, 0x6d, 0x6c, 0x2d, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x22, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61,
+ 0x64, 0x64, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6c,
+ 0x69, 0x6e, 0x6b, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
+ 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54,
+ 0x52, 0x2f, 0x57, 0x44, 0x2d, 0x78, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x0d,
+ 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x54, 0x52, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2f, 0x22, 0x20, 0x6b, 0x65, 0x79, 0x3d,
+ 0x22, 0x58, 0x4d, 0x4c, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3e,
+ 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38,
+ 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23,
+ 0x45, 0x39, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x38, 0x5d, 0x3c, 0x2f,
+ 0x6c, 0x6f, 0x63, 0x3e, 0x54, 0x69, 0x6d, 0x20, 0x42, 0x72, 0x61, 0x79,
+ 0x2c, 0x0d, 0x0a, 0x44, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c, 0x6c,
+ 0x61, 0x6e, 0x64, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41,
+ 0x6e, 0x64, 0x72, 0x65, 0x77, 0x20, 0x4c, 0x61, 0x79, 0x6d, 0x61, 0x6e,
+ 0x2c, 0x20, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x3c,
+ 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66, 0x3e, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x58,
+ 0x4d, 0x4c, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x72, 0x65, 0x66,
+ 0x3e, 0x2e, 0x0d, 0x0a, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x69,
+ 0x74, 0x79, 0x2c, 0x20, 0x48, 0x65, 0x77, 0x6c, 0x65, 0x74, 0x74, 0x2d,
+ 0x50, 0x61, 0x63, 0x6b, 0x61, 0x72, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x20,
+ 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x57, 0x69, 0x64, 0x65, 0x20, 0x57,
+ 0x65, 0x62, 0x20, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x74, 0x69, 0x75,
+ 0x6d, 0x2c, 0x20, 0x31, 0x39, 0x39, 0x39, 0x2e, 0x3c, 0x2f, 0x62, 0x69,
+ 0x62, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6c, 0x69, 0x73, 0x74,
+ 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x31,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x43, 0x68, 0x61, 0x72, 0x43, 0x6c, 0x61,
+ 0x73, 0x73, 0x65, 0x73, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20,
+ 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2c, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x61, 0x72,
+ 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73,
+ 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x73,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63,
+ 0x0d, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x61, 0x74, 0x69,
+ 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72,
+ 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x38, 0x34, 0x22, 0x3e, 0x5b, 0x45,
+ 0x38, 0x34, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2c, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x0d, 0x0a, 0x64, 0x69, 0x61, 0x63,
+ 0x72, 0x69, 0x74, 0x69, 0x63, 0x73, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61,
+ 0x73, 0x65, 0x3e, 0x29, 0x2c, 0x20, 0x69, 0x64, 0x65, 0x6f, 0x67, 0x72,
+ 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f,
+ 0x6d, 0x62, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x61, 0x6d, 0x6f, 0x6e,
+ 0x67, 0x0d, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20,
+ 0x64, 0x69, 0x61, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x73, 0x29, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65,
+ 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x33, 0x30, 0x22, 0x3e, 0x5b,
+ 0x45, 0x33, 0x30, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x3b, 0x20,
+ 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65,
+ 0x73, 0x0d, 0x0a, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x65, 0x74, 0x74,
+ 0x65, 0x72, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x3e, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x0d, 0x0a, 0x64, 0x69, 0x73,
+ 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x61, 0x70, 0x20,
+ 0x69, 0x64, 0x3d, 0x22, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45,
+ 0x52, 0x53, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x62,
+ 0x6e, 0x66, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x70, 0x63, 0x77, 0x33, 0x3d, 0x22,
+ 0x33, 0x22, 0x20, 0x70, 0x63, 0x77, 0x34, 0x3d, 0x22, 0x31, 0x35, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d,
+ 0x22, 0x4e, 0x54, 0x2d, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x4c, 0x65, 0x74, 0x74, 0x65,
+ 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e,
+ 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e, 0x54, 0x2d,
+ 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x42, 0x61,
+ 0x73, 0x65, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x20,
+ 0x7c, 0x20, 0x3c, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x3d, 0x22, 0x4e,
+ 0x54, 0x2d, 0x49, 0x64, 0x65, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69,
+ 0x63, 0x22, 0x3e, 0x49, 0x64, 0x65, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68,
+ 0x69, 0x63, 0x3c, 0x2f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x42, 0x61, 0x73, 0x65, 0x43, 0x68,
+ 0x61, 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x5b, 0x23, 0x78, 0x30, 0x30, 0x34, 0x31, 0x2d, 0x23, 0x78, 0x30,
+ 0x30, 0x35, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x30, 0x36, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x30,
+ 0x37, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x30, 0x43, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x30, 0x44,
+ 0x36, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x30, 0x44, 0x38, 0x2d, 0x23, 0x78, 0x30, 0x30, 0x46,
+ 0x36, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x30, 0x46, 0x38, 0x2d, 0x23, 0x78, 0x30, 0x30, 0x46, 0x46,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x31, 0x30, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x31, 0x33, 0x31, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x31, 0x33, 0x34, 0x2d, 0x23, 0x78, 0x30, 0x31, 0x33, 0x45, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x31, 0x34, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x31, 0x34, 0x38, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x31,
+ 0x34, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x31, 0x37, 0x45, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x31, 0x38,
+ 0x30, 0x2d, 0x23, 0x78, 0x30, 0x31, 0x43, 0x33, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x31, 0x43, 0x44,
+ 0x2d, 0x23, 0x78, 0x30, 0x31, 0x46, 0x30, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x31, 0x46, 0x34,
+ 0x2d, 0x23, 0x78, 0x30, 0x31, 0x46, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x31, 0x46, 0x41, 0x2d,
+ 0x23, 0x78, 0x30, 0x32, 0x31, 0x37, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x32, 0x35, 0x30, 0x2d, 0x23,
+ 0x78, 0x30, 0x32, 0x41, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x32, 0x42, 0x42, 0x2d, 0x23, 0x78,
+ 0x30, 0x32, 0x43, 0x31, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33, 0x38, 0x36, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x38, 0x38, 0x2d,
+ 0x23, 0x78, 0x30, 0x33, 0x38, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33, 0x38, 0x43, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x38, 0x45,
+ 0x2d, 0x23, 0x78, 0x30, 0x33, 0x41, 0x31, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x41, 0x33,
+ 0x2d, 0x23, 0x78, 0x30, 0x33, 0x43, 0x45, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x44, 0x30, 0x2d,
+ 0x23, 0x78, 0x30, 0x33, 0x44, 0x36, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33, 0x44, 0x41, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33, 0x44, 0x43, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33,
+ 0x44, 0x45, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78,
+ 0x30, 0x33, 0x45, 0x30, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x33, 0x45, 0x32, 0x2d, 0x23, 0x78, 0x30, 0x33,
+ 0x46, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x34, 0x30, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x30,
+ 0x43, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x34, 0x30, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x34,
+ 0x46, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x34, 0x35, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x35, 0x43,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x34, 0x35, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x38, 0x31, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x34, 0x39, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x43, 0x34, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x34, 0x43, 0x37, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x43, 0x38, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x34,
+ 0x43, 0x42, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x43, 0x43, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x34, 0x44,
+ 0x30, 0x2d, 0x23, 0x78, 0x30, 0x34, 0x45, 0x42, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x34, 0x45, 0x45,
+ 0x2d, 0x23, 0x78, 0x30, 0x34, 0x46, 0x35, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x34, 0x46, 0x38,
+ 0x2d, 0x23, 0x78, 0x30, 0x34, 0x46, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x33, 0x31, 0x2d,
+ 0x23, 0x78, 0x30, 0x35, 0x35, 0x36, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x35, 0x35, 0x39, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x36, 0x31,
+ 0x2d, 0x23, 0x78, 0x30, 0x35, 0x38, 0x36, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x44, 0x30,
+ 0x2d, 0x23, 0x78, 0x30, 0x35, 0x45, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x46, 0x30, 0x2d,
+ 0x23, 0x78, 0x30, 0x35, 0x46, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x32, 0x31, 0x2d, 0x23,
+ 0x78, 0x30, 0x36, 0x33, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x34, 0x31, 0x2d, 0x23, 0x78,
+ 0x30, 0x36, 0x34, 0x41, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x37, 0x31, 0x2d, 0x23, 0x78,
+ 0x30, 0x36, 0x42, 0x37, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x42, 0x41, 0x2d, 0x23, 0x78, 0x30,
+ 0x36, 0x42, 0x45, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x36, 0x43, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x36,
+ 0x43, 0x45, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x36, 0x44, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x36, 0x44,
+ 0x33, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23,
+ 0x78, 0x30, 0x36, 0x44, 0x35, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x45, 0x35, 0x2d, 0x23, 0x78, 0x30,
+ 0x36, 0x45, 0x36, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x39, 0x30, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x39,
+ 0x33, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23,
+ 0x78, 0x30, 0x39, 0x33, 0x44, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x35, 0x38, 0x2d, 0x23, 0x78,
+ 0x30, 0x39, 0x36, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x38, 0x35, 0x2d, 0x23, 0x78, 0x30,
+ 0x39, 0x38, 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x39, 0x38, 0x46, 0x2d, 0x23, 0x78, 0x30, 0x39,
+ 0x39, 0x30, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x39, 0x39, 0x33, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x41,
+ 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x39, 0x41, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x42,
+ 0x30, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78,
+ 0x30, 0x39, 0x42, 0x32, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x39, 0x42, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x39,
+ 0x42, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x39, 0x44, 0x43, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x44,
+ 0x44, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x39, 0x44, 0x46, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x45,
+ 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x39, 0x46, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x46, 0x31,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x41, 0x30, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x30, 0x41, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x41, 0x30, 0x46, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x31, 0x30, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x41, 0x31, 0x33, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x32, 0x38, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41,
+ 0x32, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x33, 0x30, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x33,
+ 0x32, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x33, 0x33, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x33, 0x35,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x33, 0x36, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x33, 0x38,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x33, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x35, 0x39, 0x2d,
+ 0x23, 0x78, 0x30, 0x41, 0x35, 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x35, 0x45, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x37, 0x32,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x37, 0x34, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x38, 0x35,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x38, 0x42, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x38, 0x44, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x38,
+ 0x46, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x39, 0x31, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x39, 0x33,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x41, 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x41, 0x41,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x42, 0x30, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x42, 0x32, 0x2d,
+ 0x23, 0x78, 0x30, 0x41, 0x42, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x42, 0x35, 0x2d, 0x23,
+ 0x78, 0x30, 0x41, 0x42, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x42, 0x44, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x45, 0x30, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42,
+ 0x30, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x30, 0x43, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x30,
+ 0x46, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x31, 0x30, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x31, 0x33,
+ 0x2d, 0x23, 0x78, 0x30, 0x42, 0x32, 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x32, 0x41,
+ 0x2d, 0x23, 0x78, 0x30, 0x42, 0x33, 0x30, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x33, 0x32, 0x2d,
+ 0x23, 0x78, 0x30, 0x42, 0x33, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x33, 0x36, 0x2d, 0x23,
+ 0x78, 0x30, 0x42, 0x33, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x42, 0x33, 0x44, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x35, 0x43,
+ 0x2d, 0x23, 0x78, 0x30, 0x42, 0x35, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x35, 0x46, 0x2d,
+ 0x23, 0x78, 0x30, 0x42, 0x36, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x38, 0x35, 0x2d, 0x23,
+ 0x78, 0x30, 0x42, 0x38, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x38, 0x45, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x39, 0x30, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x39, 0x32, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x39, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x39, 0x39, 0x2d, 0x23, 0x78, 0x30,
+ 0x42, 0x39, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x30, 0x42, 0x39, 0x43, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x39, 0x45, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x39, 0x46, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x41, 0x33, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x41, 0x34, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x41, 0x38, 0x2d, 0x23, 0x78, 0x30,
+ 0x42, 0x41, 0x41, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x42, 0x41, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x42,
+ 0x42, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x42, 0x42, 0x37, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x42,
+ 0x39, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x43, 0x30, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x30,
+ 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x43, 0x30, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x31, 0x30,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x43, 0x31, 0x32, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x32, 0x38, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x43, 0x32, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x33, 0x33, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x43, 0x33, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x33, 0x39, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43,
+ 0x36, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x36, 0x31, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x38,
+ 0x35, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x38, 0x43, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x38, 0x45,
+ 0x2d, 0x23, 0x78, 0x30, 0x43, 0x39, 0x30, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x39, 0x32,
+ 0x2d, 0x23, 0x78, 0x30, 0x43, 0x41, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x41, 0x41, 0x2d,
+ 0x23, 0x78, 0x30, 0x43, 0x42, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x42, 0x35, 0x2d, 0x23,
+ 0x78, 0x30, 0x43, 0x42, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x43, 0x44, 0x45, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x45, 0x30,
+ 0x2d, 0x23, 0x78, 0x30, 0x43, 0x45, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x30, 0x35, 0x2d,
+ 0x23, 0x78, 0x30, 0x44, 0x30, 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x30, 0x45, 0x2d, 0x23,
+ 0x78, 0x30, 0x44, 0x31, 0x30, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x31, 0x32, 0x2d, 0x23, 0x78,
+ 0x30, 0x44, 0x32, 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x32, 0x41, 0x2d, 0x23, 0x78,
+ 0x30, 0x44, 0x33, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x36, 0x30, 0x2d, 0x23, 0x78, 0x30,
+ 0x44, 0x36, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x45, 0x30, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x45,
+ 0x32, 0x45, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23,
+ 0x78, 0x30, 0x45, 0x33, 0x30, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x33, 0x32, 0x2d, 0x23, 0x78,
+ 0x30, 0x45, 0x33, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x34, 0x30, 0x2d, 0x23, 0x78, 0x30,
+ 0x45, 0x34, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x45, 0x38, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x45,
+ 0x38, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23,
+ 0x78, 0x30, 0x45, 0x38, 0x34, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x38, 0x37, 0x2d, 0x23, 0x78,
+ 0x30, 0x45, 0x38, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x30, 0x45, 0x38, 0x41, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x38, 0x44, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x39, 0x34,
+ 0x2d, 0x23, 0x78, 0x30, 0x45, 0x39, 0x37, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x39, 0x39,
+ 0x2d, 0x23, 0x78, 0x30, 0x45, 0x39, 0x46, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x41, 0x31, 0x2d,
+ 0x23, 0x78, 0x30, 0x45, 0x41, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x41, 0x35, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x41, 0x37, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x45, 0x41, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x41, 0x42, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45,
+ 0x41, 0x44, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x41, 0x45, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x42, 0x30,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x45, 0x42, 0x32, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x42, 0x33, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45,
+ 0x42, 0x44, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x45, 0x43, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x43, 0x34,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x46, 0x34, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x46, 0x34, 0x37, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x46, 0x34, 0x39, 0x2d, 0x23, 0x78, 0x30, 0x46, 0x36, 0x39, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x30, 0x41, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x30, 0x43, 0x35, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x30,
+ 0x44, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x30, 0x46, 0x36, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x30, 0x30,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x31, 0x30, 0x32, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x30, 0x33, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x31, 0x30, 0x35, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x30, 0x37, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x30,
+ 0x39, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x31, 0x30, 0x42, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x30, 0x43, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x31, 0x30, 0x45, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x31, 0x32, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31,
+ 0x33, 0x43, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78,
+ 0x31, 0x31, 0x33, 0x45, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x31, 0x31, 0x34, 0x30, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x34, 0x43, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x34, 0x45, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x35, 0x30,
+ 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x31, 0x35, 0x34, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x35, 0x35, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31,
+ 0x35, 0x39, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x31, 0x31, 0x35, 0x46, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x36, 0x31,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31,
+ 0x31, 0x36, 0x33, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x31, 0x31, 0x36, 0x35, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x36, 0x37, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x36, 0x39, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x31, 0x36,
+ 0x44, 0x2d, 0x23, 0x78, 0x31, 0x31, 0x36, 0x45, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x31, 0x37, 0x32,
+ 0x2d, 0x23, 0x78, 0x31, 0x31, 0x37, 0x33, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x37, 0x35, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x39,
+ 0x45, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31,
+ 0x31, 0x41, 0x38, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23,
+ 0x78, 0x31, 0x31, 0x41, 0x42, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x31, 0x41, 0x45, 0x2d, 0x23, 0x78, 0x31,
+ 0x31, 0x41, 0x46, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x31, 0x42, 0x37, 0x2d, 0x23, 0x78, 0x31,
+ 0x31, 0x42, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x31, 0x31, 0x42, 0x41, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x31, 0x42, 0x43, 0x2d, 0x23, 0x78,
+ 0x31, 0x31, 0x43, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x31, 0x31, 0x45, 0x42, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x46, 0x30, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x31, 0x46, 0x39,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x45, 0x30, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x45, 0x39, 0x42, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x45,
+ 0x41, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x45, 0x46, 0x39, 0x5d, 0x0d, 0x0a,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46,
+ 0x30, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x31, 0x35, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x31,
+ 0x38, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x31, 0x44, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x32, 0x30,
+ 0x2d, 0x23, 0x78, 0x31, 0x46, 0x34, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x34, 0x38, 0x2d,
+ 0x23, 0x78, 0x31, 0x46, 0x34, 0x44, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x35, 0x30, 0x2d,
+ 0x23, 0x78, 0x31, 0x46, 0x35, 0x37, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x46, 0x35, 0x39, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x46, 0x35, 0x42, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x46, 0x35,
+ 0x44, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x46, 0x35, 0x46, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x37, 0x44, 0x5d,
+ 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x46, 0x38, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x42, 0x34, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x46, 0x42, 0x36, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x42, 0x43, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x31, 0x46, 0x42,
+ 0x45, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x46, 0x43, 0x32, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x43, 0x34, 0x5d,
+ 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x31, 0x46, 0x43, 0x36, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x43, 0x43, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31,
+ 0x46, 0x44, 0x30, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x44, 0x33, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46,
+ 0x44, 0x36, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x44, 0x42, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x45,
+ 0x30, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x45, 0x43, 0x5d, 0x0d, 0x0a, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x46,
+ 0x32, 0x2d, 0x23, 0x78, 0x31, 0x46, 0x46, 0x34, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x31, 0x46, 0x46, 0x36,
+ 0x2d, 0x23, 0x78, 0x31, 0x46, 0x46, 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x32, 0x31, 0x32, 0x36, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x32, 0x31, 0x32,
+ 0x41, 0x2d, 0x23, 0x78, 0x32, 0x31, 0x32, 0x42, 0x5d, 0x0d, 0x0a, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x32, 0x31, 0x32, 0x45,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x32,
+ 0x31, 0x38, 0x30, 0x2d, 0x23, 0x78, 0x32, 0x31, 0x38, 0x32, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30,
+ 0x34, 0x31, 0x2d, 0x23, 0x78, 0x33, 0x30, 0x39, 0x34, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30, 0x41,
+ 0x31, 0x2d, 0x23, 0x78, 0x33, 0x30, 0x46, 0x41, 0x5d, 0x0d, 0x0a, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x31, 0x30,
+ 0x35, 0x2d, 0x23, 0x78, 0x33, 0x31, 0x32, 0x43, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x41, 0x43, 0x30, 0x30,
+ 0x2d, 0x23, 0x78, 0x44, 0x37, 0x41, 0x33, 0x5d, 0x20, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x4e, 0x54, 0x2d, 0x49, 0x64, 0x65, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68,
+ 0x69, 0x63, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x49,
+ 0x64, 0x65, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x3c, 0x2f,
+ 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x5b, 0x23, 0x78,
+ 0x34, 0x45, 0x30, 0x30, 0x2d, 0x23, 0x78, 0x39, 0x46, 0x41, 0x35, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x33, 0x30,
+ 0x30, 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x33, 0x30, 0x32, 0x31, 0x2d, 0x23, 0x78, 0x33, 0x30, 0x32, 0x39,
+ 0x5d, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x43, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
+ 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73,
+ 0x3e, 0x3c, 0x72, 0x68, 0x73, 0x3e, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x30,
+ 0x30, 0x2d, 0x23, 0x78, 0x30, 0x33, 0x34, 0x35, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x33, 0x36, 0x30,
+ 0x2d, 0x23, 0x78, 0x30, 0x33, 0x36, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x34, 0x38, 0x33, 0x2d,
+ 0x23, 0x78, 0x30, 0x34, 0x38, 0x36, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x39, 0x31, 0x2d,
+ 0x23, 0x78, 0x30, 0x35, 0x41, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x41, 0x33, 0x2d, 0x23,
+ 0x78, 0x30, 0x35, 0x42, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x42, 0x42, 0x2d, 0x23, 0x78,
+ 0x30, 0x35, 0x42, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x30, 0x35, 0x42, 0x46, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x35, 0x43, 0x31, 0x2d,
+ 0x23, 0x78, 0x30, 0x35, 0x43, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x35, 0x43, 0x34, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x34, 0x42,
+ 0x2d, 0x23, 0x78, 0x30, 0x36, 0x35, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x36, 0x37, 0x30, 0x0d, 0x0a,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36,
+ 0x44, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x36, 0x44, 0x43, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x44,
+ 0x44, 0x2d, 0x23, 0x78, 0x30, 0x36, 0x44, 0x46, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x45, 0x30,
+ 0x2d, 0x23, 0x78, 0x30, 0x36, 0x45, 0x34, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x45, 0x37, 0x2d,
+ 0x23, 0x78, 0x30, 0x36, 0x45, 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x45, 0x41, 0x2d,
+ 0x23, 0x78, 0x30, 0x36, 0x45, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x30, 0x31, 0x2d, 0x23,
+ 0x78, 0x30, 0x39, 0x30, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39, 0x33, 0x43, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x33, 0x45, 0x2d,
+ 0x23, 0x78, 0x30, 0x39, 0x34, 0x43, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39, 0x34, 0x44, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x35,
+ 0x31, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x35, 0x34, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x36, 0x32,
+ 0x2d, 0x23, 0x78, 0x30, 0x39, 0x36, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x39, 0x38, 0x31, 0x2d,
+ 0x23, 0x78, 0x30, 0x39, 0x38, 0x33, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39, 0x42, 0x43, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39, 0x42, 0x45,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39,
+ 0x42, 0x46, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x39, 0x43, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x43, 0x34,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x39, 0x43, 0x37, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x43, 0x38, 0x5d,
+ 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x39, 0x43, 0x42, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x43, 0x44, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x39,
+ 0x44, 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x39, 0x45, 0x32, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x45, 0x33,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30,
+ 0x41, 0x30, 0x32, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x30, 0x41, 0x33, 0x43, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x33, 0x45, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x33, 0x46, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x34,
+ 0x30, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x34, 0x32, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x34, 0x37,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x34, 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x34, 0x42,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x34, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x37, 0x30, 0x2d,
+ 0x23, 0x78, 0x30, 0x41, 0x37, 0x31, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x38, 0x31, 0x2d, 0x23,
+ 0x78, 0x30, 0x41, 0x38, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x41, 0x42, 0x43, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x42, 0x45,
+ 0x2d, 0x23, 0x78, 0x30, 0x41, 0x43, 0x35, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x43, 0x37, 0x2d,
+ 0x23, 0x78, 0x30, 0x41, 0x43, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x41, 0x43, 0x42, 0x2d, 0x23,
+ 0x78, 0x30, 0x41, 0x43, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x30, 0x31, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x30, 0x33, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x42, 0x33, 0x43, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x33, 0x45, 0x2d,
+ 0x23, 0x78, 0x30, 0x42, 0x34, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x34, 0x37, 0x2d, 0x23,
+ 0x78, 0x30, 0x42, 0x34, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x34, 0x42, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x34, 0x44, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x35, 0x36, 0x2d, 0x23, 0x78,
+ 0x30, 0x42, 0x35, 0x37, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x42, 0x38, 0x32, 0x2d, 0x23, 0x78, 0x30,
+ 0x42, 0x38, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x42, 0x42, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x42,
+ 0x43, 0x32, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x42, 0x43, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x43,
+ 0x38, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x42, 0x43, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x43,
+ 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78,
+ 0x30, 0x42, 0x44, 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x43, 0x30, 0x31, 0x2d, 0x23, 0x78, 0x30, 0x43,
+ 0x30, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x43, 0x33, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x34,
+ 0x34, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x43, 0x34, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x34,
+ 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x43, 0x34, 0x41, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x34, 0x44,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x43, 0x35, 0x35, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x35, 0x36, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x43, 0x38, 0x32, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x38, 0x33, 0x5d, 0x0d,
+ 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x43, 0x42, 0x45, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x43, 0x34, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43,
+ 0x43, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x43, 0x38, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x43,
+ 0x41, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x43, 0x44, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x44, 0x35,
+ 0x2d, 0x23, 0x78, 0x30, 0x43, 0x44, 0x36, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x30, 0x32,
+ 0x2d, 0x23, 0x78, 0x30, 0x44, 0x30, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x33, 0x45, 0x2d,
+ 0x23, 0x78, 0x30, 0x44, 0x34, 0x33, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x34, 0x36, 0x2d, 0x23,
+ 0x78, 0x30, 0x44, 0x34, 0x38, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x34, 0x41, 0x2d, 0x23, 0x78,
+ 0x30, 0x44, 0x34, 0x44, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x44, 0x35, 0x37, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x33, 0x31, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x33,
+ 0x34, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x33, 0x41, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x34, 0x37,
+ 0x2d, 0x23, 0x78, 0x30, 0x45, 0x34, 0x45, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x42, 0x31, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45,
+ 0x42, 0x34, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x42, 0x39, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x42,
+ 0x42, 0x2d, 0x23, 0x78, 0x30, 0x45, 0x42, 0x43, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x43, 0x38,
+ 0x2d, 0x23, 0x78, 0x30, 0x45, 0x43, 0x44, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x31, 0x38,
+ 0x2d, 0x23, 0x78, 0x30, 0x46, 0x31, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x46, 0x33, 0x35, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x46, 0x33, 0x37,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x46,
+ 0x33, 0x39, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78,
+ 0x30, 0x46, 0x33, 0x45, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x30, 0x46, 0x33, 0x46, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x37, 0x31, 0x2d, 0x23,
+ 0x78, 0x30, 0x46, 0x38, 0x34, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x38, 0x36, 0x2d, 0x23, 0x78,
+ 0x30, 0x46, 0x38, 0x42, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x39, 0x30, 0x2d, 0x23, 0x78, 0x30,
+ 0x46, 0x39, 0x35, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x30, 0x46, 0x39, 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x39, 0x39, 0x2d, 0x23,
+ 0x78, 0x30, 0x46, 0x41, 0x44, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x42, 0x31, 0x2d, 0x23, 0x78,
+ 0x30, 0x46, 0x42, 0x37, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x23, 0x78, 0x30, 0x46, 0x42, 0x39, 0x0d, 0x0a, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x32, 0x30, 0x44, 0x30, 0x2d,
+ 0x23, 0x78, 0x32, 0x30, 0x44, 0x43, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x32, 0x30, 0x45, 0x31, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30, 0x32, 0x41,
+ 0x2d, 0x23, 0x78, 0x33, 0x30, 0x32, 0x46, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x33, 0x30, 0x39, 0x39, 0x0d, 0x0a,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x33, 0x30, 0x39,
+ 0x41, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x72, 0x6f, 0x64,
+ 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54, 0x2d, 0x44, 0x69, 0x67, 0x69,
+ 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x44, 0x69,
+ 0x67, 0x69, 0x74, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68,
+ 0x73, 0x3e, 0x5b, 0x23, 0x78, 0x30, 0x30, 0x33, 0x30, 0x2d, 0x23, 0x78,
+ 0x30, 0x30, 0x33, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70,
+ 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x36, 0x36, 0x30, 0x2d, 0x23, 0x78, 0x30,
+ 0x36, 0x36, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x36, 0x46, 0x30, 0x2d, 0x23, 0x78, 0x30, 0x36,
+ 0x46, 0x39, 0x5d, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x5b, 0x23, 0x78, 0x30, 0x39, 0x36, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x39,
+ 0x36, 0x46, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b,
+ 0x23, 0x78, 0x30, 0x39, 0x45, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x39, 0x45,
+ 0x46, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23,
+ 0x78, 0x30, 0x41, 0x36, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x36, 0x46,
+ 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x41, 0x45, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x41, 0x45, 0x46, 0x5d,
+ 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78,
+ 0x30, 0x42, 0x36, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x36, 0x46, 0x5d,
+ 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30,
+ 0x42, 0x45, 0x37, 0x2d, 0x23, 0x78, 0x30, 0x42, 0x45, 0x46, 0x5d, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43,
+ 0x36, 0x36, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x36, 0x46, 0x5d, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x43, 0x45,
+ 0x36, 0x2d, 0x23, 0x78, 0x30, 0x43, 0x45, 0x46, 0x5d, 0x0d, 0x0a, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x44, 0x36,
+ 0x36, 0x2d, 0x23, 0x78, 0x30, 0x44, 0x36, 0x46, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x35, 0x30,
+ 0x2d, 0x23, 0x78, 0x30, 0x45, 0x35, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x45, 0x44, 0x30, 0x2d,
+ 0x23, 0x78, 0x30, 0x45, 0x44, 0x39, 0x5d, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x30, 0x46, 0x32, 0x30, 0x2d, 0x23,
+ 0x78, 0x30, 0x46, 0x32, 0x39, 0x5d, 0x20, 0x3c, 0x2f, 0x72, 0x68, 0x73,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x4e, 0x54,
+ 0x2d, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6c, 0x68, 0x73, 0x3e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64,
+ 0x65, 0x72, 0x3c, 0x2f, 0x6c, 0x68, 0x73, 0x3e, 0x3c, 0x72, 0x68, 0x73,
+ 0x3e, 0x23, 0x78, 0x30, 0x30, 0x42, 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62,
+ 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x32, 0x44, 0x30, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x32, 0x44, 0x31, 0x20,
+ 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30, 0x33, 0x38,
+ 0x37, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x30,
+ 0x36, 0x34, 0x30, 0x0d, 0x0a, 0x7c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x23, 0x78, 0x30, 0x45, 0x34, 0x36, 0x20, 0x7c, 0x26, 0x6e, 0x62, 0x73,
+ 0x70, 0x3b, 0x23, 0x78, 0x30, 0x45, 0x43, 0x36, 0x20, 0x7c, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x23, 0x78, 0x33, 0x30, 0x30, 0x35, 0x20, 0x7c,
+ 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30, 0x33,
+ 0x31, 0x2d, 0x23, 0x78, 0x33, 0x30, 0x33, 0x35, 0x5d, 0x20, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30, 0x39, 0x44,
+ 0x2d, 0x23, 0x78, 0x33, 0x30, 0x39, 0x45, 0x5d, 0x0d, 0x0a, 0x7c, 0x26,
+ 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x5b, 0x23, 0x78, 0x33, 0x30, 0x46, 0x43,
+ 0x2d, 0x23, 0x78, 0x33, 0x30, 0x46, 0x45, 0x5d, 0x20, 0x3c, 0x2f, 0x72,
+ 0x68, 0x73, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x72,
+ 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3c, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x37, 0x22, 0x3e, 0x5b, 0x45,
+ 0x36, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x32, 0x2e, 0x30,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65,
+ 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x4c,
+ 0x6c, 0x2c, 0x20, 0x4c, 0x75, 0x2c, 0x20, 0x4c, 0x6f, 0x2c, 0x0d, 0x0a,
+ 0x4c, 0x74, 0x2c, 0x20, 0x4e, 0x6c, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c,
+ 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x4e, 0x61, 0x6d, 0x65,
+ 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68,
+ 0x61, 0x76, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69,
+ 0x65, 0x73, 0x20, 0x4d, 0x63, 0x2c, 0x20, 0x4d, 0x65, 0x2c, 0x20, 0x4d,
+ 0x6e, 0x2c, 0x20, 0x4c, 0x6d, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x4e, 0x64,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x43,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,
+ 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20,
+ 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x23, 0x78, 0x46, 0x39, 0x30, 0x30, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x23, 0x78, 0x46, 0x46, 0x46, 0x45, 0x29, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20,
+ 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70,
+ 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x64, 0x65,
+ 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x0d, 0x0a, 0x74, 0x68, 0x6f, 0x73, 0x65,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, 0x67, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x20, 0x35, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, 0x0a, 0x64,
+ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x2d, 0x2d, 0x20, 0x6d,
+ 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x20, 0x35, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69,
+ 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3c, 0x2f, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e,
+ 0x6f, 0x74, 0x0d, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20,
+ 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x0d, 0x0a, 0x74, 0x68, 0x61, 0x6e,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72,
+ 0x74, 0x79, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20,
+ 0x61, 0x73, 0x20, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69,
+ 0x63, 0x3a, 0x0d, 0x0a, 0x5b, 0x23, 0x78, 0x30, 0x32, 0x42, 0x42, 0x2d,
+ 0x23, 0x78, 0x30, 0x32, 0x43, 0x31, 0x5d, 0x2c, 0x20, 0x23, 0x78, 0x30,
+ 0x35, 0x35, 0x39, 0x2c, 0x20, 0x23, 0x78, 0x30, 0x36, 0x45, 0x35, 0x2c,
+ 0x20, 0x23, 0x78, 0x30, 0x36, 0x45, 0x36, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x23, 0x78, 0x32, 0x30, 0x44, 0x44, 0x2d,
+ 0x23, 0x78, 0x32, 0x30, 0x45, 0x30, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65,
+ 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x28, 0x69, 0x6e, 0x20,
+ 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63,
+ 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e,
+ 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d,
+ 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x36, 0x37, 0x22, 0x3e,
+ 0x5b, 0x45, 0x36, 0x37, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x32,
+ 0x2e, 0x30, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2c,
+ 0x0d, 0x0a, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x35, 0x2e,
+ 0x31, 0x34, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x23, 0x78, 0x30, 0x30, 0x42, 0x37, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2c,
+ 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x0d, 0x0a, 0x6c,
+ 0x69, 0x73, 0x74, 0x20, 0x73, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x69, 0x74, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x43, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x23, 0x78, 0x30, 0x33, 0x38, 0x37, 0x20,
+ 0x69, 0x73, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73,
+ 0x65, 0x20, 0x23, 0x78, 0x30, 0x30, 0x42, 0x37, 0x20, 0x69, 0x73, 0x0d,
+ 0x0a, 0x69, 0x74, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e,
+ 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x27,
+ 0x3a, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x5f, 0x27, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x27,
+ 0x2d, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x2e, 0x27, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x61,
+ 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69,
+ 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x31, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64, 0x69,
+ 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x78,
+ 0x6d, 0x6c, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x73, 0x67, 0x6d, 0x6c, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x58, 0x4d, 0x4c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x3c, 0x2f, 0x68,
+ 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74,
+ 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31,
+ 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x23, 0x45, 0x34, 0x33, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x33,
+ 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x58, 0x4d, 0x4c, 0x0d, 0x0a,
+ 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73,
+ 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x2c, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x65, 0x76, 0x65, 0x72,
+ 0x79, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x61, 0x6c,
+ 0x73, 0x6f, 0x0d, 0x0a, 0x62, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x47, 0x4d, 0x4c,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x46, 0x6f, 0x72, 0x20,
+ 0x61, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x63,
+ 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x6e,
+ 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62,
+ 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x2c, 0x20, 0x73, 0x65, 0x65,
+ 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x22, 0x2f, 0x3e, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69,
+ 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6e, 0x74, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x3c, 0x2f,
+ 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x78, 0x20,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x73, 0x6f, 0x6d,
+ 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69,
+ 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2d, 0x0d,
+ 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x2d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x73, 0x70, 0x65,
+ 0x63, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x65,
+ 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x63, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x44, 0x54, 0x44, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41,
+ 0x5b, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x78,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x22, 0x3c, 0x70, 0x3e, 0x41, 0x6e,
+ 0x20, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x28,
+ 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x33, 0x38, 0x3b, 0x29, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65,
+ 0x64, 0x0d, 0x0a, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c,
+ 0x6c, 0x79, 0x20, 0x28, 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x33, 0x38,
+ 0x3b, 0x23, 0x33, 0x38, 0x3b, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x28, 0x26, 0x61,
+ 0x6d, 0x70, 0x3b, 0x61, 0x6d, 0x70, 0x3b, 0x29, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x22, 0x20, 0x3e, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73,
+ 0x73, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e,
+ 0x20, 0x69, 0x74, 0x0d, 0x0a, 0x70, 0x61, 0x72, 0x73, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x6d, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20,
+ 0x73, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x65, 0x78,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3a, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44,
+ 0x41, 0x54, 0x41, 0x5b, 0x3c, 0x70, 0x3e, 0x41, 0x6e, 0x20, 0x61, 0x6d,
+ 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x28, 0x26, 0x23, 0x33,
+ 0x38, 0x3b, 0x29, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x65,
+ 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x0d, 0x0a, 0x6e, 0x75, 0x6d, 0x65,
+ 0x72, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x28, 0x26, 0x23, 0x33,
+ 0x38, 0x3b, 0x23, 0x33, 0x38, 0x3b, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x28, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x6d, 0x70, 0x3b, 0x29, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x70, 0x3e, 0x41, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f,
+ 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26,
+ 0x61, 0x6d, 0x70, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3b,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x61,
+ 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70, 0x61, 0x72,
+ 0x73, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x2d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e,
+ 0x64, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x0d, 0x0a, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x70, 0x3c, 0x2f, 0x65, 0x6c,
+ 0x3e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69,
+ 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e,
+ 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x0d, 0x0a,
+ 0x62, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64,
+ 0x65, 0x64, 0x2c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e,
+ 0x67, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x70,
+ 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x61, 0x6c, 0x6c, 0x20, 0x64,
+ 0x61, 0x74, 0x61, 0x2c, 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x6c, 0x69,
+ 0x6d, 0x69, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x61,
+ 0x72, 0x6b, 0x75, 0x70, 0x29, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x65, 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41,
+ 0x5b, 0x41, 0x6e, 0x20, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e,
+ 0x64, 0x20, 0x28, 0x26, 0x29, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+ 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x0d, 0x0a, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x28, 0x26,
+ 0x23, 0x33, 0x38, 0x3b, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x0d, 0x0a, 0x28, 0x26, 0x61, 0x6d,
+ 0x70, 0x3b, 0x29, 0x2e, 0x5d, 0x5d, 0x3e, 0x3c, 0x2f, 0x65, 0x67, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20,
+ 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x65, 0x78, 0x61, 0x6d,
+ 0x70, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x69, 0x6c, 0x6c,
+ 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
+ 0x65, 0x69, 0x72, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x20,
+ 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2e, 0x0d, 0x0a, 0x49, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67,
+ 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6c, 0x65, 0x6c,
+ 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x65,
+ 0x67, 0x3e, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x31,
+ 0x20, 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x3d, 0x27, 0x31, 0x2e, 0x30, 0x27, 0x3f, 0x3e, 0x0d, 0x0a,
+ 0x32, 0x20, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20,
+ 0x74, 0x65, 0x73, 0x74, 0x20, 0x5b, 0x0d, 0x0a, 0x33, 0x20, 0x3c, 0x21,
+ 0x45, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x20, 0x74, 0x65, 0x73, 0x74,
+ 0x20, 0x28, 0x23, 0x50, 0x43, 0x44, 0x41, 0x54, 0x41, 0x29, 0x20, 0x3e,
+ 0x0d, 0x0a, 0x34, 0x20, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x25, 0x20, 0x78, 0x78, 0x20, 0x27, 0x26, 0x23, 0x33, 0x37, 0x3b,
+ 0x7a, 0x7a, 0x3b, 0x27, 0x3e, 0x0d, 0x0a, 0x35, 0x20, 0x3c, 0x21, 0x45,
+ 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x7a, 0x7a, 0x20, 0x27,
+ 0x26, 0x23, 0x36, 0x30, 0x3b, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59,
+ 0x20, 0x74, 0x72, 0x69, 0x63, 0x6b, 0x79, 0x20, 0x22, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x6e, 0x65, 0x22, 0x20, 0x3e, 0x27,
+ 0x20, 0x3e, 0x0d, 0x0a, 0x36, 0x20, 0x25, 0x78, 0x78, 0x3b, 0x0d, 0x0a,
+ 0x37, 0x20, 0x5d, 0x3e, 0x0d, 0x0a, 0x38, 0x20, 0x3c, 0x74, 0x65, 0x73,
+ 0x74, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c,
+ 0x65, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x20, 0x26, 0x74,
+ 0x72, 0x69, 0x63, 0x6b, 0x79, 0x3b, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f,
+ 0x64, 0x2e, 0x3c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x3e, 0x5d, 0x5d, 0x3e,
+ 0x3c, 0x2f, 0x65, 0x67, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22,
+ 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x69, 0x6e, 0x20, 0x6c,
+ 0x69, 0x6e, 0x65, 0x20, 0x34, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x33, 0x37,
+ 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64,
+ 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79,
+ 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x78, 0x78, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x69,
+ 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x0d, 0x0a,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x25, 0x7a,
+ 0x7a, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e,
+ 0x6e, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x7a, 0x7a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e,
+ 0x69, 0x7a, 0x65, 0x64, 0x2e, 0x20, 0x28, 0x41, 0x6e, 0x64, 0x20, 0x69,
+ 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x69,
+ 0x74, 0x20, 0x77, 0x65, 0x72, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63,
+ 0x65, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x7a, 0x7a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x79, 0x65, 0x74, 0x20, 0x64, 0x65, 0x63,
+ 0x6c, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x29, 0x3c, 0x2f, 0x70, 0x3e, 0x3c,
+ 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x65,
+ 0x20, 0x35, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x23, 0x36,
+ 0x30, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x65, 0x78,
+ 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x64,
+ 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x7a, 0x7a, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e,
+ 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x72, 0x69, 0x63, 0x6b, 0x79, 0x20,
+ 0x22, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x6e, 0x65,
+ 0x22, 0x0d, 0x0a, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x77, 0x65, 0x6c, 0x6c,
+ 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69,
+ 0x74, 0x79, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65,
+ 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70,
+ 0x3e, 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x78, 0x78, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20,
+ 0x69, 0x73, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65,
+ 0x64, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x78, 0x78, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74,
+ 0x65, 0x3e, 0x20, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x6c, 0x79, 0x20, 0x3c,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x25, 0x7a, 0x7a, 0x3b, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x0d, 0x0a, 0x69, 0x73,
+ 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x7a, 0x7a, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x20, 0x69, 0x73, 0x20,
+ 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x0d, 0x0a, 0x69, 0x74, 0x73, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x72, 0x65, 0x70,
+ 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x78,
+ 0x74, 0x20, 0x28, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x45, 0x4e, 0x54,
+ 0x49, 0x54, 0x59, 0x20, 0x74, 0x72, 0x69, 0x63, 0x6b, 0x79, 0x20, 0x22,
+ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x6e, 0x65, 0x22,
+ 0x0d, 0x0a, 0x3e, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x74, 0x72, 0x69, 0x63, 0x6b, 0x79, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e,
+ 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x62, 0x65,
+ 0x65, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x2c,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x70, 0x72,
+ 0x6f, 0x6e, 0x65, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69,
+ 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x69, 0x6e, 0x20, 0x6c, 0x69,
+ 0x6e, 0x65, 0x20, 0x38, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x74, 0x72, 0x69, 0x63, 0x6b,
+ 0x79, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6e,
+ 0x64, 0x65, 0x64, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x65, 0x6c, 0x3e,
+ 0x74, 0x65, 0x73, 0x74, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x65,
+ 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2d, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x61, 0x6e, 0x64, 0x20, 0x75,
+ 0x6e, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c,
+ 0x29, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3c, 0x65, 0x6d,
+ 0x70, 0x68, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x61, 0x6d, 0x70,
+ 0x6c, 0x65, 0x0d, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x20,
+ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x6e, 0x65, 0x20,
+ 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x3c, 0x2f, 0x65, 0x6d, 0x70,
+ 0x68, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64, 0x69,
+ 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x2d, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x65,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x6d, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x44, 0x65, 0x74, 0x65, 0x72,
+ 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x20, 0x43, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x3c,
+ 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x3c,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d,
+ 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d,
+ 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c,
+ 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72,
+ 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x32, 0x22, 0x3e, 0x5b,
+ 0x45, 0x31, 0x30, 0x32, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41,
+ 0x73, 0x0d, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x3c, 0x73, 0x70, 0x65, 0x63, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x3e,
+ 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65,
+ 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e,
+ 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x74, 0x65,
+ 0x72, 0x6d, 0x72, 0x65, 0x66, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x3d, 0x22,
+ 0x64, 0x74, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x22, 0x3e, 0x66,
+ 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69,
+ 0x6c, 0x69, 0x74, 0x79, 0x3c, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x72, 0x65,
+ 0x66, 0x3e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x53, 0x47, 0x4d, 0x4c,
+ 0x20, 0x28, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6c, 0x6c,
+ 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73,
+ 0x74, 0x69, 0x63, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f,
+ 0x74, 0x65, 0x3e, 0x75, 0x6e, 0x61, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x6f,
+ 0x75, 0x73, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x29, 0x3b,
+ 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x73,
+ 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x0d, 0x0a, 0x75, 0x73, 0x69, 0x6e,
+ 0x67, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65,
+ 0x6d, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x66, 0x6c, 0x61, 0x67, 0x20,
+ 0x6e, 0x6f, 0x6e, 0x2d, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x69, 0x73, 0x74, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x61, 0x73, 0x20,
+ 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d,
+ 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x3c,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x28, 0x28, 0x62, 0x2c, 0x20, 0x63, 0x29,
+ 0x20, 0x7c, 0x20, 0x28, 0x62, 0x2c, 0x20, 0x64, 0x29, 0x29, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x6e,
+ 0x2d, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74,
+ 0x69, 0x63, 0x2c, 0x0d, 0x0a, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65,
+ 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e,
+ 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x62, 0x3c,
+ 0x2f, 0x65, 0x6c, 0x3e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63,
+ 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c,
+ 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65,
+ 0x66, 0x22, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d,
+ 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x35, 0x22, 0x3e, 0x5b, 0x45, 0x39,
+ 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x58, 0x4d, 0x4c, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x0d, 0x0a, 0x63, 0x61, 0x6e, 0x6e,
+ 0x6f, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x62, 0x3c, 0x2f, 0x65, 0x6c, 0x3e,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x6d,
+ 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f,
+ 0x75, 0x74, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x61, 0x68, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x65,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x62, 0x3c, 0x2f, 0x65, 0x6c,
+ 0x3e, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63,
+ 0x61, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x6f,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0d,
+ 0x0a, 0x74, 0x6f, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x62, 0x3c, 0x2f, 0x65,
+ 0x6c, 0x3e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f,
+ 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f,
+ 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x20, 0x6d, 0x61, 0x6b,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x28, 0x62, 0x2c, 0x0d, 0x0a, 0x28, 0x63, 0x20, 0x7c, 0x20, 0x64,
+ 0x29, 0x29, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x2e, 0x20, 0x41,
+ 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x65,
+ 0x6c, 0x3e, 0x62, 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x20, 0x6e, 0x6f, 0x77,
+ 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x20,
+ 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0d,
+ 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64,
+ 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x3c, 0x6c,
+ 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72,
+ 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65,
+ 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c,
+ 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31,
+ 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x39, 0x35,
+ 0x22, 0x3e, 0x5b, 0x45, 0x39, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f, 0x63,
+ 0x3e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x2f,
+ 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x3e, 0x20, 0x64, 0x6f,
+ 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x20, 0x61, 0x68, 0x65, 0x61, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x65, 0x20, 0x77, 0x68, 0x61, 0x74,
+ 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x3b, 0x20, 0x65, 0x69,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x63, 0x3c, 0x2f,
+ 0x65, 0x6c, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x3c, 0x65, 0x6c, 0x3e, 0x64,
+ 0x3c, 0x2f, 0x65, 0x6c, 0x3e, 0x0d, 0x0a, 0x77, 0x6f, 0x75, 0x6c, 0x64,
+ 0x20, 0x62, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4d, 0x6f,
+ 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x3a,
+ 0x20, 0x61, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x73, 0x74,
+ 0x61, 0x74, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x6f,
+ 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x0d, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x20, 0x75, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64,
+ 0x61, 0x72, 0x64, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+ 0x6d, 0x73, 0x2c, 0x20, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x61, 0x6c, 0x67,
+ 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x33, 0x2e, 0x35, 0x20, 0x69,
+ 0x6e, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x2e,
+ 0x39, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x41, 0x68, 0x6f, 0x2c, 0x20, 0x53,
+ 0x65, 0x74, 0x68, 0x69, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x55, 0x6c,
+ 0x6c, 0x6d, 0x61, 0x6e, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66,
+ 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x41, 0x68, 0x6f, 0x22, 0x2f, 0x3e,
+ 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x75,
+ 0x63, 0x68, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
+ 0x73, 0x2c, 0x20, 0x61, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x0d,
+ 0x0a, 0x73, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x65, 0x61, 0x63, 0x68, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x67,
+ 0x75, 0x6c, 0x61, 0x72, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x65,
+ 0x61, 0x63, 0x68, 0x0d, 0x0a, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x6f,
+ 0x64, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79,
+ 0x6e, 0x74, 0x61, 0x78, 0x20, 0x74, 0x72, 0x65, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61,
+ 0x72, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x29, 0x3b, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20,
+ 0x61, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x6f,
+ 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x65, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x72, 0x72,
+ 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62,
+ 0x65, 0x0d, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x41, 0x6c, 0x67,
+ 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x20, 0x65, 0x78, 0x69, 0x73,
+ 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x77, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x64,
+ 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x72,
+ 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d,
+ 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20,
+ 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x64,
+ 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63,
+ 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x3b, 0x20, 0x73, 0x65, 0x65,
+ 0x0d, 0x0a, 0x42, 0x72, 0xfc, 0x67, 0x67, 0x65, 0x6d, 0x61, 0x6e, 0x6e,
+ 0x2d, 0x4b, 0x6c, 0x65, 0x69, 0x6e, 0x20, 0x31, 0x39, 0x39, 0x31, 0x20,
+ 0x3c, 0x62, 0x69, 0x62, 0x72, 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d,
+ 0x22, 0x41, 0x42, 0x4b, 0x22, 0x2f, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64,
+ 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x67, 0x75, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61,
+ 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66,
+ 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77,
+ 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x30, 0x32, 0x31, 0x30,
+ 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61, 0x23, 0x45, 0x31, 0x30, 0x35,
+ 0x22, 0x3e, 0x5b, 0x45, 0x31, 0x30, 0x35, 0x5d, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3d, 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66,
+ 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39,
+ 0x39, 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74,
+ 0x61, 0x23, 0x45, 0x34, 0x38, 0x22, 0x3e, 0x5b, 0x45, 0x34, 0x38, 0x5d,
+ 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x65,
+ 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6f, 0x66, 0x20,
+ 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73,
+ 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
+ 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61,
+ 0x63, 0x68, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2c, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x20, 0x42,
+ 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x63,
+ 0x61, 0x6e, 0x0d, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72,
+ 0x2c, 0x20, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x61, 0x72, 0x65, 0x6e,
+ 0x74, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6b,
+ 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x75,
+ 0x73, 0x65, 0x26, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x74, 0x72, 0x79,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63,
+ 0x61, 0x74, 0x65, 0x2e, 0x0d, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x73,
+ 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61,
+ 0x20, 0x68, 0x6f, 0x70, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x73, 0x69,
+ 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x74, 0x20,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72,
+ 0x65, 0x6c, 0x79, 0x20, 0x68, 0x6f, 0x70, 0x65, 0x6c, 0x65, 0x73, 0x73,
+ 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x2c, 0x20, 0x68, 0x6f,
+ 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75,
+ 0x73, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x77,
+ 0x6f, 0x20, 0x77, 0x61, 0x79, 0x73, 0x3a, 0x20, 0x65, 0x61, 0x63, 0x68,
+ 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x69, 0x73, 0x20, 0x61, 0x73, 0x73, 0x75,
+ 0x6d, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x20, 0x66, 0x69,
+ 0x6e, 0x69, 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x0d, 0x0a, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
+ 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b,
+ 0x65, 0x0d, 0x0a, 0x69, 0x74, 0x20, 0x66, 0x65, 0x61, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x65,
+ 0x74, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x73, 0x6f,
+ 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61,
+ 0x73, 0x65, 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x64,
+ 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x69,
+ 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x20, 0x54, 0x77, 0x6f, 0x20, 0x63,
+ 0x61, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20,
+ 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65,
+ 0x64, 0x2c, 0x0d, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x74,
+ 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x6f, 0x75, 0x74, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x61, 0x63, 0x63,
+ 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x28, 0x65,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x29, 0x20, 0x69, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x57, 0x65,
+ 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x61, 0x73, 0x65,
+ 0x0d, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x65, 0x63, 0x2d, 0x67, 0x75, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67,
+ 0x2d, 0x6e, 0x6f, 0x2d, 0x65, 0x78, 0x74, 0x2d, 0x69, 0x6e, 0x66, 0x6f,
+ 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x44, 0x65, 0x74,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x57, 0x69, 0x74, 0x68, 0x6f,
+ 0x75, 0x74, 0x20, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20,
+ 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65,
+ 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x42, 0x65, 0x63, 0x61,
+ 0x75, 0x73, 0x65, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3c, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x6d,
+ 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x78,
+ 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x0d, 0x0a, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x2f, 0x70,
+ 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e,
+ 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x54,
+ 0x46, 0x2d, 0x31, 0x36, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x20, 0x3c, 0x65, 0x6d, 0x70, 0x68, 0x3e,
+ 0x6d, 0x75, 0x73, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x70, 0x68, 0x3e, 0x0d,
+ 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20,
+ 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x0d, 0x0a, 0x62, 0x65, 0x20, 0x27, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x26, 0x6c, 0x74, 0x3b, 0x3f, 0x78, 0x6d, 0x6c, 0x3c,
+ 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x79,
+ 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x63, 0x61,
+ 0x6e, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x61, 0x66,
+ 0x74, 0x65, 0x72, 0x20, 0x74, 0x77, 0x6f, 0x0d, 0x0a, 0x74, 0x6f, 0x20,
+ 0x66, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x61, 0x73,
+ 0x65, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x2e, 0x20, 0x49, 0x6e,
+ 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x0d, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x74, 0x6f, 0x20,
+ 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e,
+ 0x20, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x27, 0x26, 0x6c, 0x74,
+ 0x3b, 0x27, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65,
+ 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x23, 0x78, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x33, 0x43, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x6e,
+ 0x64, 0x20, 0x27, 0x3f, 0x27, 0x20, 0x69, 0x73, 0x20, 0x3c, 0x71, 0x75,
+ 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x23, 0x78,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x46, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x79, 0x74,
+ 0x65, 0x20, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x72, 0x6b,
+ 0x0d, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x6f,
+ 0x66, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x20, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x69, 0x73,
+ 0x20, 0x3c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x23, 0x78, 0x46, 0x45, 0x46, 0x46, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x3e, 0x2e,
+ 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x54, 0x68, 0x65,
+ 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, 0x76,
+ 0x61, 0x72, 0x3e, 0x23, 0x23, 0x3c, 0x2f, 0x76, 0x61, 0x72, 0x3e, 0x20,
+ 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64,
+ 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x62, 0x79,
+ 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x65, 0x78, 0x63,
+ 0x65, 0x70, 0x74, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d,
+ 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x63, 0x6f, 0x6e,
+ 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x20, 0x3c, 0x76, 0x61,
+ 0x72, 0x3e, 0x23, 0x23, 0x3c, 0x2f, 0x76, 0x61, 0x72, 0x3e, 0x73, 0x20,
+ 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x62, 0x6f,
+ 0x74, 0x68, 0x20, 0x30, 0x30, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x3e, 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x57, 0x69, 0x74, 0x68,
+ 0x20, 0x61, 0x20, 0x42, 0x79, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x64, 0x65,
+ 0x72, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3d,
+ 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x74, 0x62,
+ 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e,
+ 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x30, 0x30, 0x20, 0x30, 0x30, 0x20,
+ 0x46, 0x45, 0x0d, 0x0a, 0x46, 0x46, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x43,
+ 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x62, 0x69, 0x67, 0x2d, 0x65, 0x6e, 0x64,
+ 0x69, 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20,
+ 0x28, 0x31, 0x32, 0x33, 0x34, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x29,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74,
+ 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e,
+ 0x46, 0x46, 0x0d, 0x0a, 0x46, 0x45, 0x20, 0x30, 0x30, 0x20, 0x30, 0x30,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x6c,
+ 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e,
+ 0x20, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x34, 0x33,
+ 0x32, 0x31, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x29, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x72,
+ 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x30,
+ 0x30, 0x20, 0x30, 0x30, 0x20, 0x46, 0x46, 0x20, 0x46, 0x45, 0x3c, 0x2f,
+ 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x75, 0x6e, 0x75,
+ 0x73, 0x75, 0x61, 0x6c, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x20, 0x28, 0x32, 0x31, 0x34, 0x33, 0x29, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c,
+ 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x46, 0x45, 0x20, 0x46, 0x46, 0x20, 0x30, 0x30, 0x20, 0x30, 0x30,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x75,
+ 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74,
+ 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x28, 0x33, 0x34, 0x31, 0x32,
+ 0x29, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72,
+ 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x46, 0x45, 0x20, 0x46, 0x46, 0x20, 0x23, 0x23, 0x20,
+ 0x23, 0x23, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36,
+ 0x2c, 0x20, 0x62, 0x69, 0x67, 0x2d, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x46, 0x46, 0x20, 0x46, 0x45, 0x20, 0x23, 0x23, 0x20, 0x23,
+ 0x23, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x2c,
+ 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x69,
+ 0x61, 0x6e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e,
+ 0x3c, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x45, 0x46, 0x20, 0x42, 0x42, 0x20, 0x42, 0x46,
+ 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e,
+ 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x62, 0x6f,
+ 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64,
+ 0x64, 0x22, 0x3e, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61,
+ 0x20, 0x42, 0x79, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20,
+ 0x4d, 0x61, 0x72, 0x6b, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d,
+ 0x22, 0x31, 0x22, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x62,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x74, 0x62, 0x6f, 0x64,
+ 0x79, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x30, 0x30, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b,
+ 0x30, 0x30, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x30, 0x30, 0x26, 0x6e,
+ 0x62, 0x73, 0x70, 0x3b, 0x33, 0x43, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x20,
+ 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x34, 0x22, 0x3e,
+ 0x55, 0x43, 0x53, 0x2d, 0x34, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69,
+ 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x74, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x0d, 0x0a, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x41, 0x53, 0x43,
+ 0x49, 0x49, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
+ 0x6c, 0x79, 0x20, 0x62, 0x69, 0x67, 0x2d, 0x65, 0x6e, 0x64, 0x69, 0x61,
+ 0x6e, 0x20, 0x28, 0x31, 0x32, 0x33, 0x34, 0x29, 0x2c, 0x20, 0x6c, 0x69,
+ 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0d,
+ 0x0a, 0x28, 0x34, 0x33, 0x32, 0x31, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x20,
+ 0x62, 0x79, 0x74, 0x65, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x20,
+ 0x28, 0x32, 0x31, 0x34, 0x33, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x33, 0x34,
+ 0x31, 0x32, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64,
+ 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x20,
+ 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, 0x75, 0x70,
+ 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69,
+ 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x0d,
+ 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x2e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c,
+ 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x33, 0x43, 0x20,
+ 0x30, 0x30, 0x20, 0x30, 0x30, 0x20, 0x30, 0x30, 0x3c, 0x2f, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x21,
+ 0x2d, 0x2d, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c,
+ 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x69,
+ 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20, 0x28,
+ 0x34, 0x33, 0x32, 0x31, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x29, 0x3c,
+ 0x2f, 0x74, 0x64, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74,
+ 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x30, 0x30, 0x20, 0x30, 0x30, 0x20, 0x33, 0x43,
+ 0x20, 0x30, 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x74, 0x64,
+ 0x3e, 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x75, 0x6e, 0x75, 0x73,
+ 0x75, 0x61, 0x6c, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x6f, 0x72,
+ 0x64, 0x65, 0x72, 0x20, 0x28, 0x32, 0x31, 0x34, 0x33, 0x29, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72,
+ 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x30, 0x30, 0x20, 0x33, 0x43, 0x20, 0x30, 0x30, 0x20,
+ 0x30, 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x3c, 0x74, 0x64, 0x3e,
+ 0x55, 0x43, 0x53, 0x2d, 0x34, 0x2c, 0x20, 0x75, 0x6e, 0x75, 0x73, 0x75,
+ 0x61, 0x6c, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x6f, 0x72, 0x64,
+ 0x65, 0x72, 0x20, 0x28, 0x33, 0x34, 0x31, 0x32, 0x29, 0x3c, 0x2f, 0x74,
+ 0x64, 0x3e, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e,
+ 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x30, 0x30, 0x20, 0x33, 0x43, 0x20, 0x30, 0x30, 0x20, 0x33,
+ 0x46, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36, 0x42,
+ 0x45, 0x20, 0x6f, 0x72, 0x20, 0x62, 0x69, 0x67, 0x2d, 0x65, 0x6e, 0x64,
+ 0x69, 0x61, 0x6e, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x31, 0x30, 0x36, 0x34,
+ 0x36, 0x2d, 0x55, 0x43, 0x53, 0x2d, 0x32, 0x0d, 0x0a, 0x6f, 0x72, 0x20,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
+ 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x31, 0x36,
+ 0x2d, 0x62, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e,
+ 0x69, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x69, 0x67, 0x2d, 0x65, 0x6e,
+ 0x64, 0x69, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x41, 0x53, 0x43, 0x49,
+ 0x49, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d,
+ 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65,
+ 0x0d, 0x0a, 0x77, 0x68, 0x69, 0x63, 0x68, 0x29, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x33, 0x43, 0x20, 0x30,
+ 0x30, 0x20, 0x33, 0x46, 0x20, 0x30, 0x30, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x55,
+ 0x54, 0x46, 0x2d, 0x31, 0x36, 0x4c, 0x45, 0x20, 0x6f, 0x72, 0x20, 0x6c,
+ 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e, 0x64, 0x69, 0x61, 0x6e,
+ 0x0d, 0x0a, 0x49, 0x53, 0x4f, 0x2d, 0x31, 0x30, 0x36, 0x34, 0x36, 0x2d,
+ 0x55, 0x43, 0x53, 0x2d, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x31, 0x36, 0x2d, 0x62, 0x69,
+ 0x74, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x74, 0x20,
+ 0x69, 0x6e, 0x20, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x2d, 0x65, 0x6e,
+ 0x64, 0x69, 0x61, 0x6e, 0x0d, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x41, 0x53, 0x43, 0x49,
+ 0x49, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e,
+ 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x29, 0x3c, 0x2f, 0x74, 0x64,
+ 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74,
+ 0x64, 0x3e, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x33, 0x43, 0x20, 0x33,
+ 0x46, 0x20, 0x37, 0x38, 0x20, 0x36, 0x44, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64,
+ 0x3e, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x2c, 0x20, 0x49, 0x53, 0x4f, 0x20,
+ 0x36, 0x34, 0x36, 0x2c, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x2c, 0x20,
+ 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x35, 0x39, 0x2c, 0x20, 0x53,
+ 0x68, 0x69, 0x66, 0x74, 0x2d, 0x4a, 0x49, 0x53, 0x2c, 0x20, 0x45, 0x55,
+ 0x43, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x0d, 0x0a, 0x37, 0x2d, 0x62, 0x69, 0x74, 0x2c, 0x20,
+ 0x38, 0x2d, 0x62, 0x69, 0x74, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x69,
+ 0x78, 0x65, 0x64, 0x2d, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68,
+ 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x41, 0x53, 0x43,
+ 0x49, 0x49, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69,
+ 0x72, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x64, 0x74,
+ 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61,
+ 0x6c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73,
+ 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x75, 0x73, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x62, 0x69,
+ 0x74, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x76,
+ 0x61, 0x6e, 0x74, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x0d, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62,
+ 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x72, 0x65, 0x6c, 0x69, 0x61,
+ 0x62, 0x6c, 0x79, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72,
+ 0x3e, 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x3c, 0x63, 0x6f,
+ 0x64, 0x65, 0x3e, 0x34, 0x43, 0x0d, 0x0a, 0x36, 0x46, 0x20, 0x41, 0x37,
+ 0x20, 0x39, 0x34, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x45, 0x42, 0x43, 0x44, 0x49,
+ 0x43, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x66,
+ 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x75, 0x6c, 0x6c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0d, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65,
+ 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x61,
+ 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65,
+ 0x29, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c,
+ 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x3e, 0x4f, 0x74, 0x68, 0x65, 0x72,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x74, 0x64, 0x3e, 0x55,
+ 0x54, 0x46, 0x2d, 0x38, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74,
+ 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x65, 0x64, 0x0d, 0x0a, 0x28, 0x6c, 0x61, 0x63, 0x6b, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
+ 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65,
+ 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2c, 0x20,
+ 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x2c, 0x20, 0x66, 0x72, 0x61,
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x2c, 0x20, 0x6f, 0x72,
+ 0x20, 0x65, 0x6e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x61, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x20,
+ 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6b, 0x69, 0x6e, 0x64,
+ 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f,
+ 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c,
+ 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x49, 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x20, 0x61,
+ 0x62, 0x6f, 0x76, 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x64,
+ 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64,
+ 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74,
+ 0x6f, 0x0d, 0x0a, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x2c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34,
+ 0x2e, 0x33, 0x2e, 0x33, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x72,
+ 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x0d, 0x0a, 0x69, 0x66, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x62, 0x65, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x0d, 0x0a, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x41,
+ 0x6c, 0x73, 0x6f, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x6e, 0x65, 0x77, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73,
+ 0x0d, 0x0a, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e,
+ 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74,
+ 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x20, 0x74,
+ 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x64,
+ 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x61,
+ 0x74, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x76,
+ 0x65, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x65,
+ 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x65,
+ 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x61,
+ 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20,
+ 0x70, 0x61, 0x72, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69,
+ 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x65, 0x63, 0x65,
+ 0x73, 0x73, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73,
+ 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c,
+ 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x65, 0x61, 0x63, 0x68, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20,
+ 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73,
+ 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x65,
+ 0x6c, 0x6c, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x0d, 0x0a, 0x38, 0x38, 0x35, 0x39, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x38, 0x38, 0x35, 0x39, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
+ 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x20,
+ 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e,
+ 0x67, 0x75, 0x69, 0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x0d, 0x0a, 0x45, 0x42, 0x43, 0x44,
+ 0x49, 0x43, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65,
+ 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x73, 0x6f, 0x20, 0x6f, 0x6e, 0x29, 0x2e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65,
+ 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x72, 0x65,
+ 0x70, 0x65, 0x72, 0x74, 0x6f, 0x69, 0x72, 0x65, 0x20, 0x28, 0x68, 0x6f,
+ 0x77, 0x65, 0x76, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65,
+ 0x64, 0x29, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x2c,
+ 0x0d, 0x0a, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f,
+ 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62,
+ 0x6c, 0x79, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x6f, 0x6f, 0x6e, 0x20,
+ 0x61, 0x73, 0x20, 0x69, 0x74, 0x0d, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x64,
+ 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x6f, 0x66, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x69, 0x73,
+ 0x20, 0x69, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x20, 0x53, 0x69, 0x6e,
+ 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69,
+ 0x63, 0x65, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x69, 0x64, 0x65,
+ 0x6c, 0x79, 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x73, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e,
+ 0x74, 0x6f, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73,
+ 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x0d, 0x0a, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x72, 0x65, 0x61,
+ 0x73, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x69,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x2d, 0x62, 0x61, 0x6e, 0x64,
+ 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2c, 0x0d, 0x0a, 0x65,
+ 0x76, 0x65, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x65, 0x78, 0x74,
+ 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x72, 0x61, 0x6e,
+ 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+ 0x6f, 0x6c, 0x0d, 0x0a, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x75, 0x6e, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65,
+ 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20, 0x64, 0x69,
+ 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x4e, 0x6f, 0x74,
+ 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61,
+ 0x72, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65,
+ 0x73, 0x0d, 0x0a, 0x69, 0x6e, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x31, 0x36,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x61, 0x75, 0x74, 0x6f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
+ 0x6c, 0x77, 0x61, 0x79, 0x73, 0x0d, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x2e,
+ 0x20, 0x41, 0x6c, 0x73, 0x6f, 0x2c, 0x20, 0x3c, 0x2f, 0x70, 0x68, 0x72,
+ 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x43,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20,
+ 0x61, 0x73, 0x20, 0x55, 0x54, 0x46, 0x2d, 0x37, 0x0d, 0x0a, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72,
+ 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x41, 0x53, 0x43, 0x49, 0x49, 0x2d, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x62,
+ 0x65, 0x20, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x64,
+ 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0x3c, 0x2f, 0x70, 0x68,
+ 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x70, 0x3e, 0x4f, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70,
+ 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x20, 0x68, 0x61, 0x73,
+ 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20,
+ 0x75, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ 0x61, 0x63, 0x74, 0x0d, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+ 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6b,
+ 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61,
+ 0x74, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x72, 0x6f, 0x75,
+ 0x74, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63,
+ 0x68, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2c, 0x0d, 0x0a, 0x6f, 0x72, 0x20,
+ 0x62, 0x79, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x75, 0x6e,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63,
+ 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20,
+ 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x3c, 0x2f, 0x70,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x4c, 0x69, 0x6b, 0x65, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2d, 0x6c, 0x61, 0x62, 0x65,
+ 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x0d, 0x0a, 0x69, 0x66, 0x20,
+ 0x61, 0x6e, 0x79, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
+ 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x27, 0x73, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x20,
+ 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x49, 0x6d, 0x70, 0x6c,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2d, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x65, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x0d, 0x0a,
+ 0x62, 0x65, 0x20, 0x63, 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x74,
+ 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+ 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0d, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x74, 0x69, 0x74, 0x79, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x64, 0x69, 0x76, 0x32, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76,
+ 0x32, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x63, 0x2d, 0x67, 0x75,
+ 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2d, 0x77, 0x69, 0x74, 0x68, 0x2d,
+ 0x65, 0x78, 0x74, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x68, 0x65, 0x61, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x61, 0x64, 0x64, 0x22, 0x3e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
+ 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x45,
+ 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x45, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f,
+ 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20,
+ 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20,
+ 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x61,
+ 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20,
+ 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6e, 0x65,
+ 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+ 0x6f, 0x6c, 0x73, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x6d, 0x75,
+ 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x0d, 0x0a, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61,
+ 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x69, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x20, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x72, 0x65, 0x64, 0x0d, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20,
+ 0x6f, 0x66, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x20, 0x73, 0x68, 0x6f,
+ 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68,
+ 0x65, 0x72, 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x0d, 0x0a, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x20, 0x58,
+ 0x4d, 0x4c, 0x2e, 0x20, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e, 0x49,
+ 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72,
+ 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x3c, 0x62, 0x69, 0x62, 0x72,
+ 0x65, 0x66, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x72, 0x66, 0x63, 0x32,
+ 0x33, 0x37, 0x36, 0x22, 0x2f, 0x3e, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x74,
+ 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2c,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65,
+ 0x3e, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x78, 0x6d, 0x6c, 0x3c, 0x2f, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x63,
+ 0x6f, 0x64, 0x65, 0x3e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3c, 0x2f, 0x63, 0x6f, 0x64,
+ 0x65, 0x3e, 0x20, 0x4d, 0x49, 0x4d, 0x45, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+ 0x65, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x75, 0x73, 0x65, 0x66,
+ 0x75, 0x6c, 0x20, 0x67, 0x75, 0x69, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2e,
+ 0x0d, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74,
+ 0x65, 0x72, 0x65, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69,
+ 0x74, 0x79, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
+ 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72,
+ 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x2e, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f, 0x70, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x61,
+ 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c,
+ 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x79, 0x74, 0x65, 0x2d,
+ 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66,
+ 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x50, 0x49, 0x20, 0x3c,
+ 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x61, 0x72, 0x65, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x28, 0x69, 0x66, 0x20, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74,
+ 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x3c, 0x70, 0x68, 0x72, 0x61, 0x73,
+ 0x65, 0x0d, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c,
+ 0x22, 0x3e, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d,
+ 0x22, 0x65, 0x72, 0x72, 0x61, 0x74, 0x75, 0x6d, 0x72, 0x65, 0x66, 0x22,
+ 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x78, 0x6d, 0x6c, 0x2d, 0x31, 0x39, 0x39,
+ 0x38, 0x30, 0x32, 0x31, 0x30, 0x2d, 0x65, 0x72, 0x72, 0x61, 0x74, 0x61,
+ 0x23, 0x45, 0x37, 0x34, 0x22, 0x3e, 0x5b, 0x45, 0x37, 0x34, 0x5d, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x65, 0x75, 0x72, 0x69, 0x73, 0x74,
+ 0x69, 0x63, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73,
+ 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x72,
+ 0x72, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79,
+ 0x2e, 0x3c, 0x2f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x75, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d,
+ 0x3e, 0x3c, 0x70, 0x3e, 0x49, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d,
+ 0x4c, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20,
+ 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x61, 0x20, 0x4d, 0x49, 0x4d, 0x45, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x3c, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x63, 0x68, 0x61, 0x72,
+ 0x73, 0x65, 0x74, 0x3c, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3e, 0x20, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x4d, 0x49, 0x4d, 0x45, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
+ 0x65, 0x72, 0x0d, 0x0a, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
+ 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3b, 0x20, 0x61, 0x6c, 0x6c,
+ 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x65, 0x75, 0x72, 0x69,
+ 0x73, 0x74, 0x69, 0x63, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x0d, 0x0a, 0x66, 0x6f, 0x72,
+ 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x76,
+ 0x65, 0x72, 0x79, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74,
+ 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x3c,
+ 0x70, 0x3e, 0x49, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65,
+ 0x6c, 0x69, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68,
+ 0x20, 0x61, 0x20, 0x4d, 0x49, 0x4d, 0x45, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x2c, 0x0d, 0x0a, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x79, 0x74, 0x65, 0x2d,
+ 0x4f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2d,
+ 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x50, 0x49, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x28, 0x69, 0x66, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x29,
+ 0x0d, 0x0a, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69,
+ 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x68, 0x65, 0x75, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0d, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6c, 0x65,
+ 0x6c, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
+ 0x20, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x3c, 0x2f,
+ 0x70, 0x3e, 0x3c, 0x2f, 0x69, 0x74, 0x65, 0x6d, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x75, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x70, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x64, 0x65, 0x6c, 0x22, 0x3e, 0x54,
+ 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
+ 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d,
+ 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0d, 0x0a, 0x69,
+ 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72,
+ 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d,
+ 0x49, 0x4d, 0x45, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x2f, 0x78, 0x6d, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
+ 0x6d, 0x6c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x64, 0x2c, 0x0d, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x65,
+ 0x76, 0x61, 0x6e, 0x74, 0x20, 0x52, 0x46, 0x43, 0x20, 0x77, 0x69, 0x6c,
+ 0x6c, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x65, 0x64, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e,
+ 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x32,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d,
+ 0x64, 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22,
+ 0x73, 0x65, 0x63, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x77, 0x67, 0x22, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x57, 0x33, 0x43, 0x20,
+ 0x58, 0x4d, 0x4c, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20,
+ 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x64,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65,
+ 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x57, 0x33, 0x43, 0x0d, 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x57, 0x6f,
+ 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20,
+ 0x28, 0x57, 0x47, 0x29, 0x2e, 0x20, 0x57, 0x47, 0x20, 0x61, 0x70, 0x70,
+ 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79,
+ 0x0d, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x57, 0x47, 0x20, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x73, 0x20, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x69, 0x74, 0x73, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76,
+ 0x61, 0x6c, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72,
+ 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x65, 0x72, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0d, 0x0a,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x57,
+ 0x47, 0x20, 0x61, 0x72, 0x65, 0x3a, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x6f, 0x72, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x4a, 0x6f, 0x6e, 0x20, 0x42, 0x6f, 0x73, 0x61, 0x6b, 0x3c, 0x2f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x53, 0x75, 0x6e, 0x3c, 0x2f, 0x61,
+ 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3c, 0x2f,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d,
+ 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x43, 0x6c, 0x61, 0x72, 0x6b, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x54, 0x65, 0x63, 0x68,
+ 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4c, 0x65, 0x61, 0x64, 0x3c, 0x2f,
+ 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x54, 0x69, 0x6d, 0x20, 0x42, 0x72,
+ 0x61, 0x79, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66,
+ 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x54, 0x65,
+ 0x78, 0x74, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x4e, 0x65, 0x74, 0x73, 0x63, 0x61, 0x70, 0x65, 0x3c, 0x2f, 0x61,
+ 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x43,
+ 0x6f, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x3c, 0x2f, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x65, 0x61, 0x6e, 0x20, 0x50, 0x61, 0x6f,
+ 0x6c, 0x69, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66,
+ 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x4d, 0x69,
+ 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3e, 0x58, 0x4d, 0x4c, 0x0d, 0x0a, 0x43, 0x6f, 0x2d, 0x65,
+ 0x64, 0x69, 0x74, 0x6f, 0x72, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e,
+ 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x43, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x53, 0x70, 0x65, 0x72, 0x62,
+ 0x65, 0x72, 0x67, 0x2d, 0x4d, 0x63, 0x51, 0x75, 0x65, 0x65, 0x6e, 0x3c,
+ 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x55, 0x2e, 0x20, 0x6f, 0x66,
+ 0x20, 0x49, 0x6c, 0x6c, 0x2e, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3e, 0x58, 0x4d, 0x4c, 0x20, 0x43, 0x6f, 0x2d, 0x65, 0x64,
+ 0x69, 0x74, 0x6f, 0x72, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x3c,
+ 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x44, 0x61, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x6e, 0x6f, 0x6c, 0x6c, 0x79,
+ 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x57, 0x33, 0x43, 0x3c,
+ 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3e, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x57, 0x33, 0x43, 0x20, 0x4c,
+ 0x69, 0x61, 0x69, 0x73, 0x6f, 0x6e, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x50, 0x61, 0x75, 0x6c, 0x61, 0x20, 0x41, 0x6e,
+ 0x67, 0x65, 0x72, 0x73, 0x74, 0x65, 0x69, 0x6e, 0x3c, 0x2f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x54, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x3c, 0x2f,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x53, 0x74, 0x65, 0x76, 0x65, 0x20, 0x44, 0x65, 0x52, 0x6f, 0x73,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x49, 0x4e, 0x53,
+ 0x4f, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x44, 0x61, 0x76, 0x65, 0x20, 0x48, 0x6f, 0x6c,
+ 0x6c, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x48, 0x50, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x45, 0x6c, 0x69, 0x6f, 0x74,
+ 0x20, 0x4b, 0x69, 0x6d, 0x62, 0x65, 0x72, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x49, 0x53, 0x4f, 0x47, 0x45, 0x4e, 0x3c, 0x2f, 0x61,
+ 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c,
+ 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x45, 0x76, 0x65, 0x20, 0x4d, 0x61, 0x6c, 0x65, 0x72, 0x3c, 0x2f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x41, 0x72, 0x62, 0x6f, 0x72, 0x54, 0x65,
+ 0x78, 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x54, 0x6f, 0x6d, 0x20, 0x4d, 0x61, 0x67,
+ 0x6c, 0x69, 0x65, 0x72, 0x79, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3e, 0x4e, 0x43, 0x53, 0x41, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d,
+ 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4d, 0x75, 0x72, 0x72,
+ 0x61, 0x79, 0x20, 0x4d, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x79, 0x3c, 0x2f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22,
+ 0x63, 0x68, 0x67, 0x22, 0x3e, 0x53, 0x6f, 0x66, 0x74, 0x51, 0x75, 0x61,
+ 0x64, 0x2c, 0x20, 0x47, 0x72, 0x69, 0x66, 0x0d, 0x0a, 0x53, 0x41, 0x2c,
+ 0x20, 0x4d, 0x75, 0x7a, 0x6d, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x56,
+ 0x65, 0x6f, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x3c, 0x2f,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x63, 0x68, 0x67, 0x22, 0x3e,
+ 0x4d, 0x55, 0x52, 0x41, 0x54, 0x41, 0x20, 0x4d, 0x61, 0x6b, 0x6f, 0x74,
+ 0x6f, 0x20, 0x28, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x20, 0x47, 0x69,
+ 0x76, 0x65, 0x6e, 0x29, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x46, 0x75, 0x6a, 0x69, 0x0d, 0x0a, 0x58, 0x65, 0x72, 0x6f, 0x78, 0x20,
+ 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x3c, 0x2f, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d,
+ 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x6f,
+ 0x65, 0x6c, 0x20, 0x4e, 0x61, 0x76, 0x61, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x3c, 0x2f, 0x61, 0x66,
+ 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x43,
+ 0x6f, 0x6e, 0x6c, 0x65, 0x74, 0x68, 0x20, 0x4f, 0x27, 0x43, 0x6f, 0x6e,
+ 0x6e, 0x65, 0x6c, 0x6c, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x56, 0x69, 0x67, 0x6e, 0x65, 0x74, 0x74, 0x65, 0x3c, 0x2f, 0x61, 0x66,
+ 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x50, 0x65, 0x74, 0x65, 0x72, 0x20, 0x53, 0x68, 0x61, 0x72, 0x70,
+ 0x65, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x53, 0x6f, 0x66,
+ 0x74, 0x51, 0x75, 0x61, 0x64, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d,
+ 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x6f, 0x68, 0x6e,
+ 0x20, 0x54, 0x69, 0x67, 0x75, 0x65, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x44, 0x61, 0x74, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
+ 0x6c, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x6f, 0x72, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64,
+ 0x69, 0x76, 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f, 0x72,
+ 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73,
+ 0x65, 0x63, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2d, 0x77, 0x67, 0x22, 0x20,
+ 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61, 0x64, 0x64, 0x22, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x57, 0x33, 0x43, 0x20, 0x58,
+ 0x4d, 0x4c, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75,
+ 0x70, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x70,
+ 0x3e, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20,
+ 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72,
+ 0x65, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x57, 0x33, 0x43, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x43, 0x6f,
+ 0x72, 0x65, 0x0d, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20,
+ 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x28, 0x57, 0x47, 0x29, 0x2e, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x57, 0x47, 0x20, 0x61, 0x74,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0d, 0x0a, 0x65, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x65, 0x72, 0x65, 0x3a, 0x3c,
+ 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x6f, 0x72, 0x67, 0x6c, 0x69, 0x73,
+ 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x50, 0x61, 0x75, 0x6c, 0x61, 0x20,
+ 0x41, 0x6e, 0x67, 0x65, 0x72, 0x73, 0x74, 0x65, 0x69, 0x6e, 0x3c, 0x2f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x56, 0x69, 0x67, 0x6e, 0x65, 0x74,
+ 0x74, 0x65, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x44, 0x61, 0x6e, 0x69, 0x65, 0x6c, 0x20,
+ 0x41, 0x75, 0x73, 0x74, 0x69, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x41, 0x73, 0x6b, 0x20, 0x4a, 0x65, 0x65, 0x76, 0x65, 0x73,
+ 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x54, 0x69, 0x6d, 0x20, 0x42, 0x6f, 0x6c, 0x61, 0x6e,
+ 0x64, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x2f, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x41, 0x6c, 0x6c,
+ 0x65, 0x6e, 0x20, 0x42, 0x72, 0x6f, 0x77, 0x6e, 0x3c, 0x2f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,
+ 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x44, 0x61, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x6e,
+ 0x6f, 0x6c, 0x6c, 0x79, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x57, 0x33, 0x43, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x53,
+ 0x74, 0x61, 0x66, 0x66, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63,
+ 0x74, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x6f, 0x68,
+ 0x6e, 0x20, 0x43, 0x6f, 0x77, 0x61, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x52, 0x65, 0x75, 0x74, 0x65, 0x72, 0x73, 0x20, 0x4c,
+ 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a,
+ 0x6f, 0x68, 0x6e, 0x20, 0x45, 0x76, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x3c,
+ 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x58, 0x4d, 0x4c, 0x53, 0x6f,
+ 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x43, 0x6f, 0x72, 0x70,
+ 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c,
+ 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x50, 0x61, 0x75, 0x6c, 0x20, 0x47, 0x72, 0x6f, 0x73, 0x73, 0x6f, 0x3c,
+ 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x41, 0x72, 0x62, 0x6f, 0x72,
+ 0x74, 0x65, 0x78, 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e,
+ 0x43, 0x6f, 0x2d, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3c, 0x2f, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x41, 0x72, 0x6e, 0x61, 0x75, 0x64,
+ 0x20, 0x4c, 0x65, 0x20, 0x48, 0x6f, 0x72, 0x73, 0x3c, 0x2f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x49, 0x42, 0x4d, 0x3c, 0x2f, 0x61, 0x66, 0x66,
+ 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x72, 0x6f,
+ 0x6c, 0x65, 0x3e, 0x43, 0x6f, 0x2d, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3c,
+ 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x45, 0x76, 0x65,
+ 0x20, 0x4d, 0x61, 0x6c, 0x65, 0x72, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x53, 0x75, 0x6e, 0x20, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
+ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x72,
+ 0x6f, 0x6c, 0x65, 0x3e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x45,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x64, 0x69, 0x74, 0x6f,
+ 0x72, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4a, 0x6f, 0x6e,
+ 0x61, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x3c,
+ 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x4d, 0x69, 0x63, 0x72, 0x6f,
+ 0x73, 0x6f, 0x66, 0x74, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62,
+ 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4d, 0x55, 0x52, 0x41, 0x54,
+ 0x41, 0x20, 0x4d, 0x61, 0x6b, 0x6f, 0x74, 0x6f, 0x20, 0x28, 0x46, 0x41,
+ 0x4d, 0x49, 0x4c, 0x59, 0x20, 0x47, 0x69, 0x76, 0x65, 0x6e, 0x29, 0x3c,
+ 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x49, 0x42, 0x4d, 0x3c, 0x2f,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x3e, 0x4d, 0x61, 0x72, 0x6b, 0x20, 0x4e, 0x65, 0x65, 0x64,
+ 0x6c, 0x65, 0x6d, 0x61, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3e, 0x44, 0x61, 0x74, 0x61, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72,
+ 0x63, 0x68, 0x20, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65,
+ 0x73, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x44, 0x61, 0x76, 0x69, 0x64, 0x20,
+ 0x4f, 0x72, 0x63, 0x68, 0x61, 0x72, 0x64, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x4a, 0x61, 0x6d, 0x63, 0x72, 0x61, 0x63, 0x6b, 0x65,
+ 0x72, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x4c, 0x65, 0x77, 0x20, 0x53, 0x68, 0x61, 0x6e,
+ 0x6e, 0x6f, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61,
+ 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x4e,
+ 0x43, 0x52, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x52, 0x69, 0x63, 0x68, 0x61, 0x72, 0x64,
+ 0x20, 0x54, 0x6f, 0x62, 0x69, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79,
+ 0x20, 0x6f, 0x66, 0x20, 0x45, 0x64, 0x69, 0x6e, 0x62, 0x75, 0x72, 0x67,
+ 0x68, 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65,
+ 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e,
+ 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x44, 0x61, 0x6e, 0x69, 0x65, 0x6c,
+ 0x20, 0x56, 0x65, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x64, 0x3c, 0x2f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x57, 0x33, 0x43, 0x3c, 0x2f, 0x61, 0x66,
+ 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x2f,
+ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65,
+ 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x44,
+ 0x61, 0x6e, 0x20, 0x56, 0x69, 0x6e, 0x74, 0x3c, 0x2f, 0x6e, 0x61, 0x6d,
+ 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x3e, 0x4c, 0x65, 0x78, 0x69, 0x63, 0x61, 0x3c, 0x2f, 0x61,
+ 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x3c,
+ 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e,
+ 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x57, 0x61, 0x6c, 0x73, 0x68,
+ 0x3c, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69,
+ 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x53, 0x75, 0x6e, 0x20,
+ 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
+ 0x3c, 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x3c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x46, 0x72, 0x61, 0x6e, 0xe7, 0x6f, 0x69,
+ 0x73, 0x20, 0x59, 0x65, 0x72, 0x67, 0x65, 0x61, 0x75, 0x3c, 0x2f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x41, 0x6c, 0x69, 0x73, 0x20, 0x54, 0x65,
+ 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x3c, 0x2f,
+ 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x45, 0x72, 0x72, 0x61,
+ 0x74, 0x61, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x45, 0x64, 0x69, 0x74,
+ 0x6f, 0x72, 0x3c, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x3e, 0x3c, 0x2f, 0x6d,
+ 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x6d,
+ 0x62, 0x65, 0x72, 0x3e, 0x3c, 0x6e, 0x61, 0x6d, 0x65, 0x3e, 0x4b, 0x6f,
+ 0x6e, 0x67, 0x79, 0x69, 0x20, 0x5a, 0x68, 0x6f, 0x75, 0x3c, 0x2f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x3e, 0x3c, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x3c,
+ 0x2f, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x3e, 0x3c, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x6f, 0x72, 0x67, 0x6c, 0x69, 0x73, 0x74, 0x3e, 0x0d, 0x0a,
+ 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64, 0x69, 0x76,
+ 0x31, 0x3e, 0x0d, 0x0a, 0x3c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d,
+ 0x64, 0x69, 0x76, 0x31, 0x20, 0x64, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x61,
+ 0x64, 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e,
+ 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4e,
+ 0x6f, 0x74, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d,
+ 0x0a, 0x3c, 0x70, 0x3e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x53, 0x65, 0x63,
+ 0x6f, 0x6e, 0x64, 0x20, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x77, 0x61, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20,
+ 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f,
+ 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39, 0x39, 0x38, 0x2f, 0x30, 0x36, 0x2f,
+ 0x78, 0x6d, 0x6c, 0x73, 0x70, 0x65, 0x63, 0x2d, 0x76, 0x32, 0x31, 0x2e,
+ 0x64, 0x74, 0x64, 0x22, 0x3e, 0x58, 0x4d, 0x4c, 0x73, 0x70, 0x65, 0x63,
+ 0x0d, 0x0a, 0x44, 0x54, 0x44, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x20,
+ 0x28, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74,
+ 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e,
+ 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39, 0x39, 0x38,
+ 0x2f, 0x30, 0x36, 0x2f, 0x78, 0x6d, 0x6c, 0x73, 0x70, 0x65, 0x63, 0x2d,
+ 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x76, 0x32, 0x31, 0x2e, 0x68,
+ 0x74, 0x6d, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d,
+ 0x0a, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x2e,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20,
+ 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c,
+ 0x6c, 0x6f, 0x63, 0x0d, 0x0a, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39, 0x39,
+ 0x38, 0x2f, 0x30, 0x36, 0x2f, 0x78, 0x6d, 0x6c, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x78, 0x73, 0x6c, 0x22, 0x3e, 0x78, 0x6d, 0x6c, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x78, 0x73, 0x6c, 0x3c, 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x2c,
+ 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77,
+ 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39,
+ 0x39, 0x38, 0x2f, 0x30, 0x36, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x78, 0x73, 0x6c, 0x22, 0x3e, 0x64, 0x69, 0x66, 0x66,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x78, 0x73, 0x6c, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x2c, 0x0d, 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x3c, 0x6c, 0x6f,
+ 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72,
+ 0x67, 0x2f, 0x58, 0x4d, 0x4c, 0x2f, 0x31, 0x39, 0x39, 0x38, 0x2f, 0x30,
+ 0x36, 0x2f, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d, 0x6c, 0x2d, 0x32, 0x65,
+ 0x2e, 0x78, 0x73, 0x6c, 0x22, 0x3e, 0x52, 0x45, 0x43, 0x2d, 0x78, 0x6d,
+ 0x6c, 0x2d, 0x32, 0x65, 0x2e, 0x78, 0x73, 0x6c, 0x3c, 0x2f, 0x6c, 0x6f,
+ 0x63, 0x3e, 0x0d, 0x0a, 0x58, 0x53, 0x4c, 0x54, 0x20, 0x73, 0x74, 0x79,
+ 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x73, 0x2e, 0x20, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x50, 0x44, 0x46, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75,
+ 0x63, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74,
+ 0x64, 0x62, 0x2e, 0x75, 0x75, 0x2e, 0x73, 0x65, 0x2f, 0x7e, 0x6a, 0x61,
+ 0x6e, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x70, 0x73, 0x2e, 0x68, 0x74,
+ 0x6d, 0x6c, 0x22, 0x3e, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x70, 0x73, 0x3c,
+ 0x2f, 0x6c, 0x6f, 0x63, 0x3e, 0x0d, 0x0a, 0x66, 0x61, 0x63, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x64, 0x69,
+ 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x67,
+ 0x72, 0x61, 0x6d, 0x2e, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f,
+ 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x2d, 0x64, 0x69, 0x76, 0x31, 0x3e,
+ 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x3e, 0x3c, 0x2f, 0x73,
+ 0x70, 0x65, 0x63, 0x3e, 0x0d, 0x0a
+};
+unsigned int t2_len = 201918;