Commit 3d23f8f8 authored by jselbie's avatar jselbie

Support for configuration file

parent 2fa4f5de
...@@ -51,6 +51,8 @@ ...@@ -51,6 +51,8 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <boost/scoped_array.hpp> #include <boost/scoped_array.hpp>
#include <boost/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <map> #include <map>
#include <vector> #include <vector>
......
...@@ -31,6 +31,7 @@ The following options are supported. ...@@ -31,6 +31,7 @@ The following options are supported.
\-\-ddp \-\-ddp
\-\-primaryadvertised \-\-primaryadvertised
\-\-altadvertised \-\-altadvertised
\-\-configfile
\-\-help \-\-help
\f[] \f[]
.fi .fi
...@@ -205,6 +206,23 @@ correctly set these parameters for use within Amazon EC2. ...@@ -205,6 +206,23 @@ correctly set these parameters for use within Amazon EC2.
.PP .PP
* * * * * * * * * *
.PP .PP
\f[B]\-\-configfile\f[] FILENAME
.PP
The \-\-configfile switch allows the server to be configured with a JSON
configuration file rather that through command line parameters.
If this switch is specified, most other command line parameters will be
ignored.
(\-\-verbosity is the only one honored).
Instead of configuring the server with command line parameters, the
configuration will be read from file.
Since multiple configurations can be specified, this has the added
advantage of allowing multiple protocols and IP families to run within
the same process (each in a separate thread).
The fields of each configuration node are named identical to the
corresponding command line parameters (with the leading dashes removed).
An example stun.conf configuration file is shipped in the "testcode"
folder of the source package ____
.PP
\f[B]\-\-help\f[] \f[B]\-\-help\f[]
.PP .PP
Prints this help page Prints this help page
......
...@@ -29,6 +29,7 @@ The following options are supported. ...@@ -29,6 +29,7 @@ The following options are supported.
--ddp --ddp
--primaryadvertised --primaryadvertised
--altadvertised --altadvertised
--configfile
--help --help
Details of each option are as follows. Details of each option are as follows.
...@@ -185,6 +186,18 @@ For more details, visit www.stunprotocol.org for details on how to correctly set ...@@ -185,6 +186,18 @@ For more details, visit www.stunprotocol.org for details on how to correctly set
____ ____
**--configfile** FILENAME
The --configfile switch allows the server to be configured with a JSON configuration file rather
that through command line parameters. If this switch is specified, most other command line parameters will be ignored.
(--verbosity is the only one honored). Instead of configuring the server with command line parameters, the configuration
will be read from file. Since multiple configurations can be specified, this has the added advantage of allowing multiple
protocols and IP families to run within the same process (each in a separate thread). The fields of each configuration node
are named identical to the corresponding command line parameters (with the leading dashes removed). An example stun.conf
configuration file is shipped in the "testcode" folder of the source package
____
**--help** **--help**
Prints this help page Prints this help page
...@@ -214,6 +227,7 @@ stunserver --mode full --primaryinterface eth0 --altinterface eth1 ...@@ -214,6 +227,7 @@ stunserver --mode full --primaryinterface eth0 --altinterface eth1
enumerated by the system. The "ifconfig" or "ipconfig" command will enumerated by the system. The "ifconfig" or "ipconfig" command will
enumerate available interface names. enumerate available interface names.
# AUTHOR # AUTHOR
john selbie (john@selbie.com) john selbie (john@selbie.com)
......
...@@ -52,570 +52,645 @@ const char stunserver_text[] = { ...@@ -52,570 +52,645 @@ const char stunserver_text[] = {
0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65,
0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x0a,
0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65,
0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x61, 0x63, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61,
0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x0a, 0x0a, 0x72, 0x65, 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77,
0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x4f, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d,
0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4f, 0x44, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x68, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61,
0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x62, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x66, 0x75, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65,
0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x72, 0x20, 0x22, 0x62, 0x61, 0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x20, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20,
0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20,
0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c,
0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x20, 0x42, 0x61, 0x73, 0x69, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20,
0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e,
0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20,
0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x74, 0x69, 0x73, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e,
0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x20, 0x73, 0x63, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20,
0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x4e, 0x41, 0x54, 0x20, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61,
0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x6c, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20,
0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63,
0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x69, 0x74, 0x73, 0x20, 0x65, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20,
0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x69, 0x74, 0x73, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61,
0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e,
0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61,
0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73,
0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f,
0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x20, 0x61, 0x74, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20,
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45,
0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70,
0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e,
0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72,
0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73,
0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66,
0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f,
0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x2e, 0x20, 0x41, 0x20, 0x63, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68,
0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x2e, 0x20, 0x41, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62,
0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x6e, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65,
0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x66, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f,
0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c,
0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f,
0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c,
0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c,
0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x4e, 0x41, 0x54, 0x74, 0x73, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e,
0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x72, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66,
0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68,
0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65,
0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75,
0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x49, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75,
0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69,
0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x71, 0x75, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6f, 0x76, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x75, 0x6e, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c,
0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x43, 0x48, 0x41, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65,
0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x20, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x66, 0x72, 0x61, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51,
0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x55, 0x45, 0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20,
0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70,
0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e,
0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x4e, 0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45,
0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69,
0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c,
0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31,
0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29,
0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74,
0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22,
0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64,
0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75,
0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72,
0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61,
0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69,
0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x64, 0x61, 0x70,
0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49, 0x4e, 0x41, 0x44, 0x44, 0x52,
0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61,
0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x4e, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20,
0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e,
0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52,
0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73, 0x70,
0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65,
0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61,
0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e,
0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33, 0x22, 0x29, 0x20, 0x6f, 0x66,
0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x72,
0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66,
0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65, 0x2e,
0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x31, 0x22, 0x29, 0x2e, 0x0a,
0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x6c,
0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20,
0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x63,
0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68,
0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73,
0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20,
0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73,
0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20,
0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57,
0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41,
0x43, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61,
0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20,
0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33,
0x22, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f,
0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68,
0x31, 0x22, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20,
0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x69, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66,
0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f,
0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64,
0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d,
0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54,
0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31,
0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a,
0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20,
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68,
0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69,
0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68,
0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74,
0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e,
0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65,
0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36,
0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c,
0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20,
0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67,
0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71,
0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73,
0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64,
0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61, 0x64, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74,
0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69,
0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e,
0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e,
0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a,
0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x0a, 0x2d, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50,
0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x72, 0x65, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e,
0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22,
0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x34, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f,
0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50,
0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x56, 0x34, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a,
0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34,
0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73,
0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x61, 0x67, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73,
0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20,
0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70,
0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e,
0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69,
0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x33,
0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x66, 0x61,
0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49,
0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x50,
0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x69, 0x73, 0x20, 0x65,
0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x34, 0x22, 0x20, 0x6f, 0x72,
0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63,
0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x61, 0x67,
0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50, 0x56, 0x34, 0x20, 0x6f, 0x72,
0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x66, 0x61, 0x6d, 0x69,
0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72,
0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f,
0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x20, 0x69, 0x73, 0x20, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54,
0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x49, 0x50, 0x20, 0x70, 0x72, 0x4f, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x22, 0x75, 0x64, 0x70, 0x49, 0x50, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c,
0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74, 0x63, 0x70, 0x22, 0x2e, 0x0a, 0x20, 0x22, 0x75, 0x64, 0x70, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74,
0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x70, 0x22, 0x2e, 0x0a, 0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73,
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f,
0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f, 0x6e, 0x6e, 0x20, 0x4d, 0x41, 0x6e, 0x6e, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a,
0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e,
0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61,
0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31, 0x30, 0x6e, 0x64, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a,
0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x54, 0x46, 0x6f, 0x72, 0x20, 0x54, 0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d,
0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6e, 0x75, 0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66,
0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x69, 0x6d, 0x75, 0x20, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75,
0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65,
0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20,
0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a,
0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72,
0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20,
0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x55, 0x44, 0x50, 0x2e, 0x20, 0x55, 0x44, 0x50, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x31, 0x30, 0x30, 0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f,
0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56, 0x45, 0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72,
0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4c, 0x4f, 0x47, 0x65, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69,
0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72,
0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f,
0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30,
0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61,
0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x68, 0x69, 0x65, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68,
0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20,
0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f,
0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61,
0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x73, 0x20, 0x74, 0x72, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69,
0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65,
0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e,
0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76,
0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x30, 0x20, 0x6f, 0x66, 0x20, 0x30, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d,
0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e,
0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e,
0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20,
0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x31, 0x20, 0x73, 0x68, 0x6f, 0x31, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67,
0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x20, 0x68, 0x74, 0x6c, 0x79, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41,
0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20,
0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d,
0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79,
0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x33, 0x69, 0x6e, 0x67, 0x20, 0x33, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73,
0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x61, 0x68, 0x6f, 0x77, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f,
0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a,
0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65,
0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x64, 0x64, 0x20, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63,
0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69,
0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65,
0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65, 0x6e, 0x69, 0x61, 0x6c, 0x20, 0x6e, 0x69, 0x61, 0x6c, 0x20, 0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72,
0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x29, 0x76, 0x69, 0x63, 0x65, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63,
0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63,
0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c,
0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x73, 0x20, 0x6f, 0x6f, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f,
0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65,
0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72,
0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75, 0x74, 0x73, 0x20, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61,
0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x22, 0x70, 0x65, 0x6e, 0x20, 0x22, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f,
0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f, 0x78, 0x22, 0x20, 0x74, 0x68, 0x78, 0x22, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c,
0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73,
0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61,
0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73,
0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x49, 0x50, 0x20, 0x74, 0x20, 0x49, 0x50, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72,
0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72,
0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61,
0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f,
0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65, 0x73, 0x70, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61,
0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52,
0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65,
0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68,
0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d,
0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x20, 0x61, 0x6e, 0x49, 0x50, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49,
0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x20, 0x61, 0x72, 0x65, 0x50, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61,
0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28, 0x65, 0x67, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30,
0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30, 0x31, 0x2e, 0x32, 0x33, 0x2e, 0x31, 0x2e, 0x32, 0x33, 0x2e, 0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29,
0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68,
0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x62, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20,
0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66,
0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x2d, 0x61, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74,
0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x73, 0x73, 0x65, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73,
0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x62, 0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54,
0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72,
0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20,
0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64,
0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x75, 0x73, 0x61, 0x67, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e,
0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x69, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e,
0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70,
0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69,
0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65,
0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61,
0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f,
0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20,
0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20,
0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e,
0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61,
0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54, 0x2e, 0x20, 0x4e, 0x41, 0x54, 0x2e, 0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74,
0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61,
0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65,
0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20,
0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79,
0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20,
0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x69, 0x74, 0x20, 0x63, 0x72, 0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a,
0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x4e, 0x6f, 0x72, 0x6d, 0x0a, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77,
0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65,
0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74,
0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x52, 0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74,
0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48,
0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61,
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e,
0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44,
0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65,
0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20,
0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x62, 0x79, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20,
0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x65, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64,
0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x71, 0x75, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f,
0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68,
0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67,
0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x73, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69,
0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61,
0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x20, 0x77, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74,
0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20,
0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72,
0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68,
0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f,
0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d,
0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x79, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20,
0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x75, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c,
0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45,
0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x53, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e,
0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20,
0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x2c, 0x20, 0x61, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73,
0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e,
0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20,
0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20,
0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x53, 0x20, 0x6f, 0x72, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c,
0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20,
0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74,
0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64,
0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x69, 0x6f, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69,
0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20,
0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x4e, 0x41, 0x54, 0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e,
0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x67, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72,
0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x73, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65,
0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69,
0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x46, 0x73, 0x69, 0x74, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e,
0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67,
0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69, 0x73, 0x69, 0x74, 0x20, 0x77, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63,
0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74,
0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x68, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73,
0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61,
0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a,
0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65,
0x20, 0x46, 0x49, 0x4c, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x0a, 0x0a, 0x54,
0x68, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66,
0x69, 0x6c, 0x65, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x61,
0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69,
0x74, 0x68, 0x20, 0x61, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20,
0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68,
0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e,
0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x77,
0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20,
0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x28,
0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
0x6f, 0x6e, 0x65, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x29,
0x2e, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x69, 0x6e, 0x67,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20,
0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70,
0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e,
0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
0x77, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x20,
0x61, 0x6e, 0x64, 0x20, 0x49, 0x50, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c,
0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x77,
0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61,
0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x28,
0x65, 0x61, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61,
0x64, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72,
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28,
0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61,
0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x61, 0x73, 0x68, 0x65, 0x73, 0x20,
0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x29, 0x2e, 0x20, 0x41, 0x6e,
0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x75,
0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c,
0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64,
0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x74, 0x65, 0x73,
0x74, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x65,
0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x50,
0x70, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68,
0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x61, 0x67, 0x65, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x0a, 0x0a, 0x0a,
0x0a, 0x0a, 0x0a, 0x0a, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x0a, 0x0a, 0x0a, 0x73,
0x0a, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0a, 0x20, 0x20,
0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x20, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x6f, 0x70,
0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74,
0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x62, 0x61, 0x73, 0x69, 0x73, 0x20, 0x61, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x53, 0x54,
0x63, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73,
0x6e, 0x67, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x55, 0x44,
0x6e, 0x20, 0x55, 0x44, 0x50, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x33, 0x50, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x33, 0x34, 0x37, 0x38, 0x2e,
0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c,
0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e,
0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x20, 0x2d, 0x2d, 0x61,
0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39,
0x36, 0x2e, 0x37, 0x39, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x20,
0x6f, 0x76, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72,
0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x75, 0x61, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x75, 0x61, 0x6c, 0x2d, 0x68, 0x6f,
0x6c, 0x2d, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x74, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x22, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x22, 0x20, 0x61, 0x6e,
0x22, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x64, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36,
0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20, 0x54, 0x68, 0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20,
0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x55, 0x44, 0x50,
0x20, 0x55, 0x44, 0x50, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74,
0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x20, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x31,
0x20, 0x20, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a,
0x2e, 0x37, 0x38, 0x3a, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20,
0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38,
0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61,
0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31,
0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a,
0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e,
0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a, 0x33, 0x34, 0x37,
0x39, 0x20, 0x28, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x39, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49,
0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a, 0x41, 0x6e, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33,
0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x38,
0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50,
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f,
0x66, 0x69, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35,
0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x28, 0x41,
0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x49, 0x50, 0x2c,
0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x50,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a, 0x41, 0x6e, 0x20, 0x65, 0x72, 0x72,
0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x69, 0x66,
0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x68, 0x30, 0x20, 0x2d, 0x2d, 0x61, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73,
0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63,
0x65, 0x74, 0x68, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x61, 0x6d, 0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x6e,
0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76,
0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65,
0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20,
0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61,
0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x65, 0x74, 0x68, 0x30, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e,
0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x68, 0x31,
0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73,
0x22, 0x69, 0x66, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65,
0x72, 0x20, 0x22, 0x69, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70,
0x6c, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61,
0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64,
0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74,
0x0a, 0x0a, 0x0a, 0x6a, 0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x62, 0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x69, 0x66, 0x63,
0x69, 0x65, 0x20, 0x28, 0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73, 0x65, 0x6c, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x69,
0x62, 0x69, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00}; 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x6e,
0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69,
0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x0a, 0x0a,
0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x0a, 0x0a, 0x0a, 0x6a,
0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x62, 0x69, 0x65, 0x20, 0x28,
0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73, 0x65, 0x6c, 0x62, 0x69, 0x65, 0x2e,
0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00};
...@@ -34,6 +34,9 @@ ...@@ -34,6 +34,9 @@
#include "resolvehostname.h" #include "resolvehostname.h"
using namespace boost::property_tree;
void PrintUsage(bool fSummaryUsage) void PrintUsage(bool fSummaryUsage)
{ {
size_t width = GetConsoleWidth(); size_t width = GetConsoleWidth();
...@@ -120,6 +123,7 @@ struct StartupArgs ...@@ -120,6 +123,7 @@ struct StartupArgs
std::string strVerbosity; std::string strVerbosity;
std::string strMaxConnections; std::string strMaxConnections;
std::string strDosProtect; std::string strDosProtect;
std::string strConfigFile;
}; };
...@@ -527,6 +531,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs* ...@@ -527,6 +531,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
cmdline.AddOption("help", no_argument, &pStartupArgs->strHelp); cmdline.AddOption("help", no_argument, &pStartupArgs->strHelp);
cmdline.AddOption("verbosity", required_argument, &pStartupArgs->strVerbosity); cmdline.AddOption("verbosity", required_argument, &pStartupArgs->strVerbosity);
cmdline.AddOption("ddp", no_argument, &pStartupArgs->strDosProtect); cmdline.AddOption("ddp", no_argument, &pStartupArgs->strDosProtect);
cmdline.AddOption("configfile", required_argument, &pStartupArgs->strConfigFile);
cmdline.ParseCommandLine(argc, argv, startindex, &fError); cmdline.ParseCommandLine(argc, argv, startindex, &fError);
...@@ -534,6 +539,79 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs* ...@@ -534,6 +539,79 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
} }
HRESULT LoadConfigsFromFile(const std::string& filename, std::vector<StartupArgs>& configurations)
{
ptree tree;
bool error = false;
std::string errorMessage;
/* EXAMPLE configuration file
{
"configurations": [
{
"description" : "UDP Full Mode listening on default ports",
"mode": "full",
"family": "4",
"protocol": "udp",
"ddp": "1"
},
{
"description" : "TCP Full Mode listening on default port",
"mode": "full",
"family": "6",
"protocol": "tcp",
"ddp": "1"
}
]
}
*/
try
{
read_json(filename, tree);
ptree root = tree.get_child("configurations");
for (ptree::iterator itor = root.begin(); itor != root.end(); itor++)
{
const ptree& child = itor->second;
StartupArgs args;
args.strMode = child.get("mode", "");
args.strPrimaryInterface = child.get("primaryinterface", "");
args.strAltInterface = child.get("altinterface", "");
args.strPrimaryAdvertised = child.get("primaryadvertised", "");
args.strAlternateAdvertised = child.get("altadvertised", "");
args.strPrimaryPort = child.get("primaryport", "");
args.strAltPort = child.get("altport", "");
args.strFamily = child.get("family", "");
args.strProtocol = child.get("protocol", "");
args.strMaxConnections = child.get("maxconn", "");
args.strDosProtect = child.get("ddp", "");
configurations.push_back(args);
}
}
catch(ptree_error ex1)
{
Logging::LogMsg(LL_ALWAYS, "Error processing configuration file: %s", ex1.what());
error = true;
}
if (!error && configurations.size() == 0)
{
Logging::LogMsg(LL_ALWAYS, "File is valid json, but no configurations found");
error = true;
}
if (error)
{
configurations.clear();
return E_FAIL;
}
return S_OK;
}
HRESULT BlockSignal(int sig) HRESULT BlockSignal(int sig)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
...@@ -589,7 +667,7 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi ...@@ -589,7 +667,7 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
hr = CStunServer::CreateInstance(config, spServer.GetPointerPointer()); hr = CStunServer::CreateInstance(config, spServer.GetPointerPointer());
if (FAILED(hr)) if (FAILED(hr))
{ {
Logging::LogMsg(LL_ALWAYS, "Unable to initialize server (error code = x%x)", hr); Logging::LogMsg(LL_ALWAYS, "Unable to initialize UDP server (error code = x%x)", hr);
LogHR(LL_ALWAYS, hr); LogHR(LL_ALWAYS, hr);
return hr; return hr;
} }
...@@ -597,10 +675,11 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi ...@@ -597,10 +675,11 @@ HRESULT StartUDP(CRefCountedPtr<CStunServer>& spServer, CStunServerConfig& confi
hr = spServer->Start(); hr = spServer->Start();
if (FAILED(hr)) if (FAILED(hr))
{ {
Logging::LogMsg(LL_ALWAYS, "Unable to start server (error code = x%x)", hr); Logging::LogMsg(LL_ALWAYS, "Unable to start UDP server (error code = x%x)", hr);
LogHR(LL_ALWAYS, hr); LogHR(LL_ALWAYS, hr);
return hr; return hr;
} }
sleep(1);
return S_OK; return S_OK;
} }
...@@ -625,6 +704,8 @@ HRESULT StartTCP(CRefCountedPtr<CTCPServer>& spTCPServer, CStunServerConfig& con ...@@ -625,6 +704,8 @@ HRESULT StartTCP(CRefCountedPtr<CTCPServer>& spTCPServer, CStunServerConfig& con
return hr; return hr;
} }
sleep(1);
return S_OK; return S_OK;
} }
...@@ -633,9 +714,22 @@ int main(int argc, char** argv) ...@@ -633,9 +714,22 @@ int main(int argc, char** argv)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
StartupArgs args; StartupArgs args;
CStunServerConfig config; std::vector<StartupArgs> argsVector;
CRefCountedPtr<CStunServer> spServer; int serverindex = 1;
CRefCountedPtr<CTCPServer> spTCPServer;
typedef CRefCountedPtr<CStunServer> UdpServerPtr;
typedef CRefCountedPtr<CTCPServer> TcpServerPtr;
std::vector<UdpServerPtr> udpServers;
std::vector<TcpServerPtr> tcpServers;
// block sigpipe so that socket send calls from raising SIGPIPE
signal(SIGPIPE, SIG_IGN);
BlockSignal(SIGPIPE);
// Block SIGTERM and SIGINT such that the child threads will never get that signal (so that subsequent WaitForAppExitSignal hooks on *this* thread)
BlockSignal(SIGTERM);
BlockSignal(SIGINT);
#ifdef DEBUG #ifdef DEBUG
...@@ -667,69 +761,92 @@ int main(int argc, char** argv) ...@@ -667,69 +761,92 @@ int main(int argc, char** argv)
Logging::SetLogLevel((uint32_t)loglevel); Logging::SetLogLevel((uint32_t)loglevel);
} }
} }
if (SUCCEEDED(hr))
{
::DumpStartupArgs(args);
hr = BuildServerConfigurationFromArgs(args, &config);
}
if (FAILED(hr))
{
Logging::LogMsg(LL_ALWAYS, "Error building configuration from command line options");
PrintUsage(true);
return -3;
}
DumpConfig(config);
// block sigpipe so that socket send calls from raising SIGPIPE if (args.strConfigFile.empty() == false)
signal(SIGPIPE, SIG_IGN);
BlockSignal(SIGPIPE);
// Block SIGTERM and SIGINT such that the child threads will never get that signal (so that subsequent WaitForAppExitSignal hooks on *this* thread)
BlockSignal(SIGTERM);
BlockSignal(SIGINT);
if (config.fTCP == false)
{ {
hr = StartUDP(spServer, config); hr = LoadConfigsFromFile(args.strConfigFile, argsVector);
if (FAILED(hr)) if (FAILED(hr))
{ {
return -4; Logging::LogMsg(LL_ALWAYS, "Can't process configuration file");
return -3;
} }
} }
else else
{ {
hr = StartTCP(spTCPServer, config); argsVector.push_back(args);
if (FAILED(hr)) }
if (SUCCEEDED(hr))
{
for (std::vector<StartupArgs>::iterator itor = argsVector.begin(); itor != argsVector.end(); itor++)
{ {
return -5; CStunServerConfig config;
StartupArgs args = *itor;
Logging::LogMsg(LL_DEBUG, "Starting server %d", serverindex);
serverindex++;
::DumpStartupArgs(args);
hr = BuildServerConfigurationFromArgs(args, &config);
if (FAILED(hr))
{
Logging::LogMsg(LL_ALWAYS, "Error building configuration from options given");
break;
}
DumpConfig(config);
if (config.fTCP)
{
TcpServerPtr spTcpServer;
hr = StartTCP(spTcpServer, config);
if (SUCCEEDED(hr))
{
tcpServers.push_back(spTcpServer);
}
}
else
{
UdpServerPtr spUdpServer;
hr = StartUDP(spUdpServer, config);
if (SUCCEEDED(hr))
{
udpServers.push_back(spUdpServer);
}
}
if (FAILED(hr))
{
break;
}
} }
} }
Logging::LogMsg(LL_DEBUG, "Successfully started server."); if (SUCCEEDED(hr))
{
Logging::LogMsg(LL_DEBUG, "Successfully started server.");
WaitForAppExitSignal();
}
WaitForAppExitSignal();
Logging::LogMsg(LL_DEBUG, "Server is exiting"); Logging::LogMsg(LL_DEBUG, "Server is exiting");
if (spServer != NULL)
for (std::vector<UdpServerPtr>::iterator itor = udpServers.begin(); itor != udpServers.end(); itor++)
{ {
spServer->Stop(); Logging::LogMsg(LL_DEBUG, "Shutting down UDP server");
spServer.ReleaseAndClear(); UdpServerPtr server = *itor;
server->Stop();
} }
if (spTCPServer != NULL) for (std::vector<TcpServerPtr>::iterator itor = tcpServers.begin(); itor != tcpServers.end(); itor++)
{ {
spTCPServer->Stop(); Logging::LogMsg(LL_DEBUG, "Shutting down TCP server");
spTCPServer.ReleaseAndClear(); TcpServerPtr server = *itor;
server->Stop();
} }
return 0; return 0;
} }
{
"configurations" : [
{
"_description" : "STUN over UDP on IPv4 on default ports (basic mode)",
"mode" : "basic",
"primaryinterface" : "",
"secondaryinterface" : "",
"primaryport" : "3478",
"secondaryport" : "3479",
"family" : "4",
"protocol" : "udp",
"maxconn" : "",
"primaryadvertised" : "",
"altadvertised" : "",
"ddp" : "1"
},
{
"_description" : "STUN over UDP on IPv6 on default ports (basic mode)",
"mode" : "basic",
"primaryinterface" : "",
"secondaryinterface" : "",
"primaryport" : "3478",
"secondaryport" : "3479",
"family" : "6",
"protocol" : "udp",
"maxconn" : "",
"primaryadvertised" : "",
"altadvertised" : "",
"ddp" : "1"
}
]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment