aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README2
-rw-r--r--src/Content.c513
-rw-r--r--src/Headers.c22
-rw-r--r--src/Parameters.c573
-rw-r--r--src/images/www.h307
-rw-r--r--src/make.code.defn2
6 files changed, 922 insertions, 497 deletions
diff --git a/README b/README
index d91bf1e..52fd41e 100644
--- a/README
+++ b/README
@@ -163,6 +163,8 @@ Content.c
Groups.c
+Parameters.c
+
This makes use of the interfaces in http_Request.h described above to
provide content. In principle this could be in another thorn, but
that should wait until we have an agreed set of interfaces to allow
diff --git a/src/Content.c b/src/Content.c
index 591e44d..fd27c6c 100644
--- a/src/Content.c
+++ b/src/Content.c
@@ -67,11 +67,8 @@ struct httpLink
static int RegisterImages(void);
-static int RegisterParameterPages(void);
static int MainPage(cGH *cctkGH, httpRequest *request, void *data);
static int AboutPage(cGH *cctkGH, httpRequest *request, void *data);
-static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data);
-static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data);
static int ShowStaticPage(cGH *cctkGH, httpRequest *request, void *data);
@@ -88,6 +85,7 @@ static int CookieTestPage(cGH *cctkGH, httpRequest *request, void *data);
********************************************************************/
int HTTPi_RegisterGroupsPages(void);
+int HTTPi_RegisterParameterPages(void);
/********************************************************************
@@ -96,6 +94,10 @@ int HTTPi_RegisterGroupsPages(void);
struct httpLink *ContentLinks = NULL;
+static const char *notauthorized_page =
+"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\
+<BODY>You are not authorized to access this page</BODY>\n<HTML>\n";
+
#define USER_LENGTH 255
/********************************************************************
@@ -152,7 +154,7 @@ int HTTP_RegisterPages(void)
/* Register parameter stuff */
- RegisterParameterPages();
+ HTTPi_RegisterParameterPages();
/* Register parameter control stuff. */
@@ -495,497 +497,12 @@ static int MainPage(cGH *cctkGH, httpRequest *request, void *data)
return retval;
}
-
-/******************************************************************************
- ***************************** Parameter Pages ********************************
- ******************************************************************************/
-
-
-static int RegisterParameterPages(void)
-{
- int i;
- const char *thorn;
- char pagename[27+20]; /* Thorns have maximum length */
- char *namecopy;
-
- /* Two ways to do this - can either just have one function
- * registered as /Parameters which then checks request->residual,
- * to see what the actual accessed page is, or can register a
- * main page and one for each thorn.
- * Choose the latter for the mo to keep functions smaller, and also
- * since the compiled thorn list is static at the moment.
- */
-
- HTTP_RegisterPage("/Parameters/index.html", MainParameterPage, NULL);
-
- HTTP_ContentLink("/Parameters/index.html", "Parameters",
- "Parameter Information and Control",
- HTTP_QUICKLINK);
-
- for (i = 0; i < CCTK_NumCompiledThorns (); i++)
- {
- thorn = CCTK_CompiledThorn(i);
-
- sprintf(pagename,"/Parameters/%s", thorn);
-
- namecopy = Util_Strdup(thorn);
-
- HTTP_RegisterPage(pagename, ThornParameterPage, namecopy);
- }
-
- return 0;
-}
-
-
-
- /*@@
- @routine MainParameterPage
- @date Wed Sep 13 23:47:43 2000
- @author Tom Goodale
- @desc
- Displays the parameter page.
- @enddesc
- @calls
- @calledby
- @history
- @hdate Sat Sep 16 15:13:16 2000 @hauthor Tom Goodale
- @hdesc Copied content format from original http thorn
- developed by Werner Benger, with the aesthetic
- enhancements of Gabrielle Allen, John Shalf and
- Ed Seidel.
- @endhistory
-@@*/
-static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data)
-{
- int retval;
- char message[4098];
- int i;
- const char *thorn;
-
- /* Status message */
- strcpy(message,"HTTP/1.0 200 OK\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- /* Content-Type */
- strcpy(message,"Content-Type: text/html\r\n\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- /* Start the page */
- strcpy(message, "<HTML><HEAD><TITLE>Cactus Parameters Request</TITLE>\n");
- HTTP_Write(request, message, strlen(message));
-
- strcpy(message,"<HTML>\n");
- HTTP_Write(request, message, strlen(message));
-
- HTTP_ContentHeader(cctkGH,0,4098,message,NULL);
- HTTP_Write(request, message, strlen(message));
-
- strcpy(message, "<center>");
- HTTP_Write(request, message, strlen(message));
-
- strcpy(message,
- "<center><H1>Check/Modify Parameters</H1></center>\n"
- "</center><p>From this page you can check the values \n"
- "of all parameters for the \n"
- "simulation, and modify any parameters which have been designated as <i>steerable</i></p>\n"
- "<p>Parameters can be viewed for all <i>Active Thorns</i>, that is, for thorns which \n"
- "have been activated in the parameter file for the simulation. \n"
- "Select one of the active thorns for this simulation from the list below to \n"
- "view all of its parameters</p>\n"
- "<p>Steerable parameters can be identified by the presence of a form input box, \n"
- "to change the value of a parameter, simply edit the value in the box and press \n"
- " the submit button to register the new values.</p><center>\n"
- "<table cellspacing=5 border=0\n>"
- "<tr><td><b>Thorn Name</b></td><td><b>Implementation</b></td></tr>\n");
-
- HTTP_Write(request, message, strlen(message));
-
- for (i = 0; i < CCTK_NumCompiledThorns (); i++)
- {
- thorn = CCTK_CompiledThorn (i);
-
- if (CCTK_IsThornActive (thorn))
- {
- sprintf(message,
- "<tr><td valign=top><A HREF=\"/Parameters/%s/\">%s</A></td>\n"
- "<td valign=top>%s</td></tr>",
- thorn, thorn,CCTK_ThornImplementation(thorn));
- HTTP_Write(request, message, strlen(message));
-
- }
- }
-
- strcpy(message,"</table></center>");
- HTTP_Write(request, message, strlen(message));
-
- /* Write out the footer part. */
-
- HTTP_ContentFooter(cctkGH, 0, 4098, message);
- retval = HTTP_Write(request, message, strlen(message));
-
- return retval;
-}
-
-static const char *notauthorized_page =
-"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\
-<BODY>You are not authorized to access this page</BODY>\n<HTML>\n";
-
- /*@@
- @routine ThornParameterPage
- @date Sat Sep 16 15:13:55 2000
- @author Tom Goodale
- @desc
- Parameter page for a thorn.
- Checks to see if it is a setting request or
- an info request and behaves accordingly.
-
- Copied content format from original http thorn
- developed by Werner Benger, with the aesthetic
- enhancements of Gabrielle Allen, John Shalf and
- Ed Seidel.
-
- @enddesc
- @calls
- @calledby
- @history
-
- @endhistory
-
-@@*/
-static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
-{
- int retval=0;
- int i;
- char message[4098];
- char menu[4098];
- const char *thorn, *menuthorn;
- int first;
- const cParamData *pData;
- char *value;
- const httpArg *argument;
- char user[USER_LENGTH+1];
-
- int notauthorised;
- int readonly;
-
- int param_type;
- int param_bool;
- int nsteerable=0;
- int nfixed=0;
-
- thorn = (const char *)data;
-
- notauthorised = HTTP_AuthenticateBasic(request, "user", user, USER_LENGTH);
-
- readonly = notauthorised;
-
- if(request->n_arguments > 0)
- {
- /* This is a parameter set request */
-
- if(!notauthorised)
- {
- if(!readonly)
- {
- /* Queue parameters for steering */
- first = 1;
- while(argument = HTTP_ArgumentWalk(request, first))
- {
- first = 0;
- fprintf(stderr, "Setting %s::%s to %s\n", thorn, argument->arg, argument->value);
- HTTP_SteerQueue(thorn, argument->arg, argument->value);
- }
-
- /* Now redirect the browser to the normal page */
- /* Status message */
- if(request->http_major_version < 1 ||
- (request->http_major_version == 1 && request->http_minor_version < 1))
- {
- /* Older browsers don't understand 303 */
- strcpy(message,"HTTP/1.0 302 Found\r\n");
- }
- else
- {
- strcpy(message,"HTTP/1.0 303 See Other\r\n");
- }
-
- sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn);
-
- HTTP_Write(request, message, strlen(message));
- }
- else
- {
- /* Redirect the browser to the normal page */
- /* Status message */
- if(request->http_major_version < 1 ||
- (request->http_major_version == 1 && request->http_minor_version < 1))
- {
- /* Older browsers don't understand 303 */
- strcpy(message,"HTTP/1.0 302 Found\r\n");
- }
- else
- {
- strcpy(message,"HTTP/1.0 303 See Other\r\n");
- }
-
- sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn);
-
- HTTP_Write(request, message, strlen(message));
- }
- }
- else
- {
- strcpy(message,"HTTP/1.0 401 Unauthorized\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- strcpy(message,"WWW-Authenticate: Basic realm=\"foo\"\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- strcpy(message,"Content-Type: text/html\r\n\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- HTTP_Write(request, notauthorized_page, strlen(notauthorized_page));
- }
-
- }
- else
- {
- /* Display the page. */
- /* Status message */
- strcpy(message,"HTTP/1.0 200 OK\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- /* Content-Type */
- strcpy(message,"Content-Type: text/html\r\n\r\n");
-
- HTTP_Write(request, message, strlen(message));
-
- /* Start the page */
- sprintf(message,
- "<HTML><HEAD><TITLE>Cactus Parameters Request : %s</TITLE></HEAD>\n", thorn);
-
- HTTP_Write(request, message, strlen(message));
-
- if (CCTK_NumCompiledThorns()>0)
- {
- strcpy(menu,"<dt><b>Parameters:</b>\n");
- }
- /* Menu for this page */
- for (i = 0; i < CCTK_NumCompiledThorns (); i++)
- {
- menuthorn = CCTK_CompiledThorn (i);
- if (CCTK_IsThornActive (menuthorn))
- {
- sprintf(menu,
- "%s <dt> <A HREF=\"/Parameters/%s/\">%s</A>\n",
- menu,menuthorn, menuthorn);
- }
- }
- HTTP_ContentHeader(cctkGH,0,4098,message,menu);
- strcat(message,"<BODY>");
- HTTP_Write(request, message, strlen(message));
-
- if (!CCTK_IsThornActive(thorn))
- {
- sprintf(message,"<B> Thorn %s is not active !!!</B><BR>\n",thorn);
- HTTP_Write(request, message, strlen(message));
- }
- else
- {
- /* Send table of available parameters for given thorn */
- /* Steerable parameters can be edited in a FORM. */
- sprintf(message,
- "<center><H1>Check/Modify Parameters</H1>"
- "<H2>Thorn %s</H2></center>\n",
- thorn);
- strcat(message,
- "<p>Parameters in Cactus can be either <i>fixed</i> or <i>steerable</i>. "
- "Steerable parameters are those which can be modified during a "
- "simulation"
- "To change steerable parameters, edit the values and press \n"
- " the submit button."
- "Before applying the new parameter value, Cactus will check that"
- " the parameter lies in the allowed range. Note that there"
- " is currently no log of parameters which have been modified.</p>\n"
- "<p>The tables below show the parameter name, current value and description."
- "The default value of each parameter is shown in brackets at the end of the description.</p>"
- "<center><p><a href=\"../\">View parameters from another thorn</a></p>\n");
-
- HTTP_Write(request, message, strlen(message));
-
- if(!readonly )
- {
- sprintf(message,"<FORM ACTION=\"/Parameters/%s/\">",thorn);
- HTTP_Write(request, message, strlen(message));
- }
-
- /* Walk through all steerable parameters of given implementation. */
- first = 1;
-
- while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0)
- {
- first = 0;
- strcpy(message,"");
-
- value = CCTK_ParameterValString (pData->name, pData->thorn);
- if(value)
- {
- if (pData->steerable == CCTK_STEERABLE_ALWAYS)
- {
-
- if (nsteerable == 0)
- {
- strcat(message,"<h2>Steerable Parameters</h2>");
- if (readonly)
- {
- strcat(message,"<p><i>The following parameters are steerable, "
- "but you do not have authorisation to change them. "
- "To change parameters you must first register on the "
- "<a href=\"/control.html\">Simulation Control Page</a>."
- "</i></p>");
- }
- strcat(message,"<table cellpadding=5 cellspacing=5>");
- }
- nsteerable++;
-
- if (!readonly)
- {
- if (pData->type == PARAMETER_BOOLEAN)
- {
- param_bool =
- *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,&param_type));
- sprintf(message,
- "%s<TR><TD align=left valign=center>%s</TD>"
- "<TD align=left valign=center>"
- "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">"
- "&nbsp; No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">"
- "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
- message,pData->name,pData->name,
- param_bool ? "checked" : "", pData->name,
- param_bool ? "" : "checked",pData->description,pData->defval);
- }
- else
- {
- sprintf(message,
- "%s<TR><TD align=left valign=center>%s</TD>"
- "<TD align=left valign=center>"
- "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">"
- "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
- message, pData->name, pData->name,
- value, pData->description,pData->defval);
- }
- }
- else
- {
- sprintf(message,
- "%s<TR><TD align=left valign=center>%s</TD>"
- "<TD align=left valign=center>%s</TD><TD>"
- "<SMALL>%s (%s)</SMALL></TR>\n",
- message, pData->name, pData->name,
- value, pData->description,pData->defval);
- }
- }
- free (value);
- }
- HTTP_Write(request, message, strlen(message));
-
- }
-
- printf("nsteerable is %d\n",nsteerable);
- if (nsteerable>0)
- {
- strcpy(message, "</TABLE>\n");
- }
- else
- {
- strcpy(message, "<p>This thorn has no steerable parameters.</p>\n");
- }
- HTTP_Write(request, message, strlen(message));
-
- if(!readonly && nsteerable>0)
- {
- strcpy(message,
- "<INPUT TYPE=SUBMIT VALUE=\"Update all parameters\">\n"
- "</FORM>\n");
- HTTP_Write(request, message, strlen(message));
- }
-
-
- /* Walk through non-all steerable parameters of given implementation. */
- first = 1;
-
- while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0)
- {
- first = 0;
- strcpy(message,"");
-
- value = CCTK_ParameterValString (pData->name, pData->thorn);
- if(value)
- {
- if (!(pData->steerable == CCTK_STEERABLE_ALWAYS && !readonly))
- {
-
- if (nfixed == 0)
- {
- strcat(message,"<h2>Fixed Parameters</h2>"
- "<table cellpadding=5 cellspacing=5>");
- }
- nfixed++;
-
- /* FIXME: This is a hack - should put in parameter tags. */
- if(strcmp(thorn,CCTK_THORNSTRING) ||
- (strcmp(pData->name,"user") &&
- strcmp(pData->name,"password") &&
- strcmp(pData->name,"encryption_scheme")))
- {
- sprintf(message,
- "%s<TR><TD align=left valign=center>%s</TD>"
- "<TD>%s</TD><TD><SMALL>%s (%s)</SMALL></TD></TR>\n",
- message,pData->name, value, pData->description,pData->defval);
- }
- }
- free(value);
- }
- HTTP_Write(request, message, strlen(message));
-
- }
-
- if (nfixed>0)
- {
- strcpy(message, "</TABLE>\n");
- }
- else
- {
- strcpy(message, "<p>This thorn has no fixed parameters.</p>\n");
- }
- HTTP_Write(request, message, strlen(message));
-
- }
-
- strcpy(message,"</center>");
-
- HTTP_Write(request, message, strlen(message));
-
- /* Write out the footer part. */
-
- HTTP_ContentFooter(cctkGH, 0, 4098, message);
- retval = HTTP_Write(request, message, strlen(message));
- } /* n_arguments > 0 */
-
- return retval;
-}
-
/******************************************************************************
***************************** Images *****************************************
******************************************************************************/
#include "images/wwwcactuscodeorg.h"
+#include "images/www.h"
/*@@
@routine RegisterImages
@@ -1006,8 +523,9 @@ static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
static int RegisterImages(void)
{
struct httpStaticPage *image;
+ struct httpStaticPage *image2;
- image = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage));
+ image = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage));
if(image)
{
@@ -1024,6 +542,19 @@ static int RegisterImages(void)
HTTP_RegisterPage("/Images/wwwcactuscodeorg.jpg", ShowStaticPage, (void *)image);
}
+ image2 = (struct httpStaticPage *)malloc(sizeof(struct httpStaticPage));
+
+ if(image2)
+ {
+ image2->page = (char *)malloc(sizeof(www));
+ memcpy(image2->page, www, sizeof(www));
+ image2->length = sizeof(www);
+ image2->mime_type = (char *)malloc(strlen("image/gif")+1);
+ strcpy(image2->mime_type, "image/gif");
+
+ HTTP_RegisterPage("/Images/www.gif", ShowStaticPage, (void *)image2);
+ }
+
return 0;
}
diff --git a/src/Headers.c b/src/Headers.c
index 95b3f93..d85bc36 100644
--- a/src/Headers.c
+++ b/src/Headers.c
@@ -64,10 +64,10 @@ static const char *cactus_footer =
"<tr><td align=left valign=top>"
"<ADDRESS><DIV ALIGN=left>\n"
"<SMALL>\n"
-"<A HREF=\"http://www.cactuscode.org/\">Cactus Home Page</A><BR>\n"
-"Cactus Web Interface by <A HREF=\"mailto:cactusmaint@cactuscode.org\">The Cactus Team</A><BR>\n"
+"<A HREF=\"www.cactuscode.org\"><IMG SRC=\"/Images/www.gif\" BORDER=0></A><BR>\n"
"</SMALL></DIV></ADDRESS>"
"</TD><TD ALIGN=RIGHT VALIGN=TOP><SMALL>"
+"Cactus Web Interface by <A HREF=\"mailto:cactusmaint@cactuscode.org\">The Cactus Team</A><BR>\n"
"<A HREF=\"/About.html\"><i>About this Server</i></A>"
"</SMALL></TD></TR></TABLE>"
"</BODY></HTML>\n";
@@ -126,8 +126,8 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu)
sprintf( header,
"</HEAD>\n<BODY BGCOLOR=\"#FFFFFF\" link=\"#1B831D\" "
"vlink=\"#768000\" alink=\"#00FF00\">\n"
- "<center>\n<table cellpadding=10 width=100%% border=0>\n"
- "<tr>\n<td bgcolor=#E5FFA2 valign=top align=left width=20%%>\n");
+ "<center>\n<table cellpadding=10 width=100%% border=0>\n"
+ "<tr>\n<td bgcolor=#E5FFA2 valign=top align=left width=20%%>\n");
strcat(header, "<A HREF=\"/\">Master Run Page</A>\n");
sprintf(header,"%s\n"
"<small><dl>"
@@ -136,7 +136,9 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu)
"<dt>Date: %s"
"</dl></small>",
header,currenttime,currentdate);
- sprintf(header,"%s <small><dl><dt><b>Simulation:</b>"
+ sprintf(header,
+ "%s <small><dl>"
+ "<dt><b>Simulation:</b>"
"<dt><i>%s</i>"
"<dt>Iteration: %d"
"<dt>Physical time: %4.2f"
@@ -155,6 +157,16 @@ int HTTP_ContentHeader(cGH *GH, int choice, int len, char *header, char *menu)
strcat(header,"</dt></small>");
}
+ /* Online links */
+ sprintf(header,"%s\n"
+ "<small><dl>"
+ "<dt><b>On-Line:</b>"
+ "<dt><A HREF=\"http://www.cactuscode.org\">Cactus Homepage</A>"
+ "<dt><A HREF=\"http://www.cactuscode.org/Documentation/UsersGuide/\">Users Guide</A>"
+ "<dt><A HREF=\"mailto:cactusmaint@cactuscode.org\">Cactus Helpdesk</A>\n"
+ "</dl></small>",
+ header,currenttime,currentdate);
+
strcat(header,"</td><td valign=top>\n");
}
else
diff --git a/src/Parameters.c b/src/Parameters.c
new file mode 100644
index 0000000..261641b
--- /dev/null
+++ b/src/Parameters.c
@@ -0,0 +1,573 @@
+ /*@@
+ @file Parameters.c
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Files for displaying and steering parameters
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "cctk.h"
+
+#include "cctk_Parameter.h"
+#include "cctk_ActiveThorns.h"
+
+#include "util_String.h"
+
+#include "http_Request.h"
+
+#include "http_Auth.h"
+#include "http_Steer.h"
+#include "http_Cookies.h"
+
+#include "http_Content.h"
+
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(DevThorns_httpd_Parameters_c)
+
+/********************************************************************
+ ********************* Local Data Types ***********************
+ ********************************************************************/
+
+/********************************************************************
+ ********************* Local Routine Prototypes *********************
+ ********************************************************************/
+
+static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data);
+static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data);
+
+
+/********************************************************************
+ ********************* Other Routine Prototypes *********************
+ ********************************************************************/
+
+
+/********************************************************************
+ ********************* Local Data *****************************
+ ********************************************************************/
+
+static const char *notauthorized_page =
+"<HTML>\n<HEAD><TITLE>Error 401: Not Authorized</TITLE></HEAD>\
+<BODY>You are not authorized to access this page</BODY>\n<HTML>\n";
+
+
+#define USER_LENGTH 255
+/********************************************************************
+ ********************* External Routines **********************
+ ********************************************************************/
+
+ /*@@
+ @routine HTTPi_RegisterParameterPages
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Main page registration routine.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int HTTPi_RegisterParameterPages(void)
+{
+ DECLARE_CCTK_PARAMETERS
+
+ int i;
+ const char *thorn;
+ char pagename[27+20]; /* Thorns have maximum length */
+ char *namecopy;
+
+ /* Two ways to do this - can either just have one function
+ * registered as /Parameters which then checks request->residual,
+ * to see what the actual accessed page is, or can register a
+ * main page and one for each thorn.
+ * Choose the latter for the mo to keep functions smaller, and also
+ * since the compiled thorn list is static at the moment.
+ */
+
+ HTTP_RegisterPage("/Parameters/index.html", MainParameterPage, NULL);
+
+ HTTP_ContentLink("/Parameters/index.html", "Parameters",
+ "Parameter Information and Control",
+ HTTP_QUICKLINK);
+
+ for (i = 0; i < CCTK_NumCompiledThorns (); i++)
+ {
+ thorn = CCTK_CompiledThorn(i);
+
+ sprintf(pagename,"/Parameters/%s", thorn);
+
+ namecopy = Util_Strdup(thorn);
+
+ HTTP_RegisterPage(pagename, ThornParameterPage, namecopy);
+ }
+
+ return 0;
+}
+
+
+/********************************************************************
+ ********************* Local Routines *************************
+ ********************************************************************/
+
+
+/******************************************************************************
+ ***************************** Parameter Pages ********************************
+ ******************************************************************************/
+
+
+ /*@@
+ @routine MainParameterPage
+ @date Wed Sep 13 23:47:43 2000
+ @author Tom Goodale
+ @desc
+ Displays the parameter page.
+ @enddesc
+ @calls
+ @calledby
+ @history
+ @hdate Sat Sep 16 15:13:16 2000 @hauthor Tom Goodale
+ @hdesc Copied content format from original http thorn
+ developed by Werner Benger, with the aesthetic
+ enhancements of Gabrielle Allen, John Shalf and
+ Ed Seidel.
+ @endhistory
+@@*/
+static int MainParameterPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval;
+ char message[4098];
+ int i;
+ const char *thorn;
+
+ /* Status message */
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ /* Content-Type */
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ /* Start the page */
+ strcpy(message, "<HTML><HEAD><TITLE>Cactus Parameters Request</TITLE>\n");
+ HTTP_Write(request, message, strlen(message));
+
+ strcpy(message,"<HTML>\n");
+ HTTP_Write(request, message, strlen(message));
+
+ HTTP_ContentHeader(cctkGH,0,4098,message,NULL);
+ HTTP_Write(request, message, strlen(message));
+
+ strcpy(message, "<center>");
+ HTTP_Write(request, message, strlen(message));
+
+ strcpy(message,
+ "<center><H1>Check/Modify Parameters</H1></center>\n"
+ "</center><p>From this page you can check the values \n"
+ "of all parameters for the \n"
+ "simulation, and modify any parameters which have been designated as <i>steerable</i></p>\n"
+ "<p>Parameters can be viewed for all <i>Active Thorns</i>, that is, for thorns which \n"
+ "have been activated in the parameter file for the simulation. \n"
+ "Select one of the active thorns for this simulation from the list below to \n"
+ "view all of its parameters</p>\n"
+ "<p>Steerable parameters can be identified by the presence of a form input box, \n"
+ "to change the value of a parameter, simply edit the value in the box and press \n"
+ " the submit button to register the new values.</p><center>\n"
+ "<table cellspacing=5 border=0\n>"
+ "<tr><td><b>Thorn Name</b></td><td><b>Implementation</b></td></tr>\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ for (i = 0; i < CCTK_NumCompiledThorns (); i++)
+ {
+ thorn = CCTK_CompiledThorn (i);
+
+ if (CCTK_IsThornActive (thorn))
+ {
+ sprintf(message,
+ "<tr><td valign=top><A HREF=\"/Parameters/%s/\">%s</A></td>\n"
+ "<td valign=top>%s</td></tr>",
+ thorn, thorn,CCTK_ThornImplementation(thorn));
+ HTTP_Write(request, message, strlen(message));
+
+ }
+ }
+
+ strcpy(message,"</table></center>");
+ HTTP_Write(request, message, strlen(message));
+
+ /* Write out the footer part. */
+
+ HTTP_ContentFooter(cctkGH, 0, 4098, message);
+ retval = HTTP_Write(request, message, strlen(message));
+
+ return retval;
+}
+
+ /*@@
+ @routine ThornParameterPage
+ @date Sat Sep 16 15:13:55 2000
+ @author Tom Goodale
+ @desc
+ Parameter page for a thorn.
+ Checks to see if it is a setting request or
+ an info request and behaves accordingly.
+
+ Copied content format from original http thorn
+ developed by Werner Benger, with the aesthetic
+ enhancements of Gabrielle Allen, John Shalf and
+ Ed Seidel.
+
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+static int ThornParameterPage(cGH *cctkGH, httpRequest *request, void *data)
+{
+ int retval=0;
+ int i;
+ char message[4098];
+ char menu[4098];
+ const char *thorn, *menuthorn;
+ int first;
+ const cParamData *pData;
+ char *value;
+ const httpArg *argument;
+ char user[USER_LENGTH+1];
+
+ int notauthorised;
+ int readonly;
+
+ int param_type;
+ int param_bool;
+ int nsteerable=0;
+ int nfixed=0;
+
+ thorn = (const char *)data;
+
+ notauthorised = HTTP_AuthenticateBasic(request, "user", user, USER_LENGTH);
+
+ readonly = notauthorised;
+
+ if(request->n_arguments > 0)
+ {
+ /* This is a parameter set request */
+
+ if(!notauthorised)
+ {
+ if(!readonly)
+ {
+ /* Queue parameters for steering */
+ first = 1;
+ while(argument = HTTP_ArgumentWalk(request, first))
+ {
+ first = 0;
+ fprintf(stderr, "Setting %s::%s to %s\n", thorn, argument->arg, argument->value);
+ HTTP_SteerQueue(thorn, argument->arg, argument->value);
+ }
+
+ /* Now redirect the browser to the normal page */
+ /* Status message */
+ if(request->http_major_version < 1 ||
+ (request->http_major_version == 1 && request->http_minor_version < 1))
+ {
+ /* Older browsers don't understand 303 */
+ strcpy(message,"HTTP/1.0 302 Found\r\n");
+ }
+ else
+ {
+ strcpy(message,"HTTP/1.0 303 See Other\r\n");
+ }
+
+ sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn);
+
+ HTTP_Write(request, message, strlen(message));
+ }
+ else
+ {
+ /* Redirect the browser to the normal page */
+ /* Status message */
+ if(request->http_major_version < 1 ||
+ (request->http_major_version == 1 && request->http_minor_version < 1))
+ {
+ /* Older browsers don't understand 303 */
+ strcpy(message,"HTTP/1.0 302 Found\r\n");
+ }
+ else
+ {
+ strcpy(message,"HTTP/1.0 303 See Other\r\n");
+ }
+
+ sprintf(message, "%sLocation: /Parameters/%s/\r\n\r\n", message, thorn);
+
+ HTTP_Write(request, message, strlen(message));
+ }
+ }
+ else
+ {
+ strcpy(message,"HTTP/1.0 401 Unauthorized\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ strcpy(message,"WWW-Authenticate: Basic realm=\"foo\"\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ HTTP_Write(request, notauthorized_page, strlen(notauthorized_page));
+ }
+
+ }
+ else
+ {
+ /* Display the page. */
+ /* Status message */
+ strcpy(message,"HTTP/1.0 200 OK\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ /* Content-Type */
+ strcpy(message,"Content-Type: text/html\r\n\r\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ /* Start the page */
+ sprintf(message,
+ "<HTML><HEAD><TITLE>Cactus Parameters Request : %s</TITLE></HEAD>\n", thorn);
+
+ HTTP_Write(request, message, strlen(message));
+
+ if (CCTK_NumCompiledThorns()>0)
+ {
+ strcpy(menu,"<dt><b>Parameters:</b>\n");
+ }
+ /* Menu for this page */
+ for (i = 0; i < CCTK_NumCompiledThorns (); i++)
+ {
+ menuthorn = CCTK_CompiledThorn (i);
+ if (CCTK_IsThornActive (menuthorn))
+ {
+ sprintf(menu,
+ "%s <dt> <A HREF=\"/Parameters/%s/\">%s</A>\n",
+ menu,menuthorn, menuthorn);
+ }
+ }
+ HTTP_ContentHeader(cctkGH,0,4098,message,menu);
+ strcat(message,"<BODY>");
+ HTTP_Write(request, message, strlen(message));
+
+ if (!CCTK_IsThornActive(thorn))
+ {
+ sprintf(message,"<B> Thorn %s is not active !!!</B><BR>\n",thorn);
+ HTTP_Write(request, message, strlen(message));
+ }
+ else
+ {
+ /* Send table of available parameters for given thorn */
+ /* Steerable parameters can be edited in a FORM. */
+ sprintf(message,
+ "<center><H1>Check/Modify Parameters</H1>"
+ "<H2>Thorn %s</H2></center>\n",
+ thorn);
+ strcat(message,
+ "<p>Parameters in Cactus can be either <i>fixed</i> or <i>steerable</i>. "
+ "Steerable parameters are those which can be modified during a "
+ "simulation"
+ "To change steerable parameters, edit the values and press \n"
+ " the submit button."
+ "Before applying the new parameter value, Cactus will check that"
+ " the parameter lies in the allowed range. Note that there"
+ " is currently no log of parameters which have been modified.</p>\n"
+ "<p>The tables below show the parameter name, current value and description."
+ "The default value of each parameter is shown in brackets at the end of the description.</p>"
+ "<center><p><a href=\"../\">View parameters from another thorn</a></p>\n");
+
+ HTTP_Write(request, message, strlen(message));
+
+ if(!readonly )
+ {
+ sprintf(message,"<FORM ACTION=\"/Parameters/%s/\">",thorn);
+ HTTP_Write(request, message, strlen(message));
+ }
+
+ /* Walk through all steerable parameters of given implementation. */
+ first = 1;
+
+ while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0)
+ {
+ first = 0;
+ strcpy(message,"");
+
+ value = CCTK_ParameterValString (pData->name, pData->thorn);
+ if(value)
+ {
+ if (pData->steerable == CCTK_STEERABLE_ALWAYS)
+ {
+
+ if (nsteerable == 0)
+ {
+ strcat(message,"<h2>Steerable Parameters</h2>");
+ if (readonly)
+ {
+ strcat(message,"<p><i>The following parameters are steerable, "
+ "but you do not have authorisation to change them. "
+ "To change parameters you must first register on the "
+ "<a href=\"/control.html\">Simulation Control Page</a>."
+ "</i></p>");
+ }
+ strcat(message,"<table cellpadding=5 cellspacing=5>");
+ }
+ nsteerable++;
+
+ if (!readonly)
+ {
+ if (pData->type == PARAMETER_BOOLEAN)
+ {
+ /* Steerable boolean */
+ param_bool =
+ *((CCTK_INT *)CCTK_ParameterGet(pData->name,thorn,&param_type));
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD align=left valign=center>"
+ "Yes <INPUT type=\"radio\" name=\"%s\" %s value=\"1\">"
+ "&nbsp; No <INPUT type=\"radio\" name=\"%s\" %s value=\"0\">"
+ "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
+ message,pData->name,pData->name,
+ param_bool ? "checked" : "", pData->name,
+ param_bool ? "" : "checked",pData->description,pData->defval);
+ }
+ else
+ {
+ /* Steerable nonboolean */
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD align=left valign=center>"
+ "<INPUT TYPE=TEXT NAME=\"%s\" VALUE=\"%s\">"
+ "</TD><TD><SMALL>%s (%s)</SMALL></TR>\n",
+ message, pData->name, pData->name,
+ value, pData->description,pData->defval);
+ }
+ }
+ else
+ {
+ /* Steerable but no authority */
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD align=left valign=center>%s</TD><TD>"
+ "<SMALL>%s (%s)</SMALL></TR>\n",
+ message, pData->name, value, pData->description,pData->defval);
+ }
+ }
+ free (value);
+ }
+ HTTP_Write(request, message, strlen(message));
+
+ }
+
+ if (nsteerable>0)
+ {
+ strcpy(message, "</TABLE>\n");
+ }
+ else
+ {
+ strcpy(message, "<p>This thorn has no steerable parameters.</p>\n");
+ }
+ HTTP_Write(request, message, strlen(message));
+
+ if(!readonly && nsteerable>0)
+ {
+ strcpy(message,
+ "<INPUT TYPE=SUBMIT VALUE=\"Update all parameters\">\n"
+ "</FORM>\n");
+ HTTP_Write(request, message, strlen(message));
+ }
+
+
+ /* Walk through non-all steerable parameters of given implementation. */
+ first = 1;
+
+ while(CCTK_ParameterWalk(first, thorn, NULL, &pData) == 0)
+ {
+ first = 0;
+ strcpy(message,"");
+
+ value = CCTK_ParameterValString (pData->name, pData->thorn);
+ if(value)
+ {
+ if (!(pData->steerable == CCTK_STEERABLE_ALWAYS && !readonly))
+ {
+
+ if (nfixed == 0)
+ {
+ strcat(message,"<h2>Fixed Parameters</h2>"
+ "<table cellpadding=5 cellspacing=5>");
+ }
+ nfixed++;
+
+ /* FIXME: This is a hack - should put in parameter tags. */
+ if(strcmp(thorn,CCTK_THORNSTRING) ||
+ (strcmp(pData->name,"user") &&
+ strcmp(pData->name,"password") &&
+ strcmp(pData->name,"encryption_scheme")))
+ {
+ sprintf(message,
+ "%s<TR><TD align=left valign=center>%s</TD>"
+ "<TD>%s</TD><TD><SMALL>%s (%s)</SMALL></TD></TR>\n",
+ message,pData->name, value, pData->description,pData->defval);
+ }
+ }
+ free(value);
+ }
+ HTTP_Write(request, message, strlen(message));
+
+ }
+
+ if (nfixed>0)
+ {
+ strcpy(message, "</TABLE>\n");
+ }
+ else
+ {
+ strcpy(message, "<p>This thorn has no fixed parameters.</p>\n");
+ }
+ HTTP_Write(request, message, strlen(message));
+
+ }
+
+ strcpy(message,"</center>");
+
+ HTTP_Write(request, message, strlen(message));
+
+ /* Write out the footer part. */
+
+ HTTP_ContentFooter(cctkGH, 0, 4098, message);
+ retval = HTTP_Write(request, message, strlen(message));
+ } /* n_arguments > 0 */
+
+ return retval;
+}
+
diff --git a/src/images/www.h b/src/images/www.h
new file mode 100644
index 0000000..175e128
--- /dev/null
+++ b/src/images/www.h
@@ -0,0 +1,307 @@
+#ifndef __www_H_
+#define __www_H_
+
+
+static char www[]={0x47,0x49,0x46,0x38,0x37,0x61,0xA1,0x00,0x20,
+ 0x00,0xF7,0x00,0x00,0x0C,0x22,0x04,0x7C,0x93,0x29,0xAC,0xCA,
+ 0x57,0xBC,0xCA,0xB4,0x96,0xB1,0x47,0xCC,0xE7,0x71,0xDC,0xE7,
+ 0xB2,0x9C,0xAE,0x84,0x44,0x5A,0x0C,0x5F,0x79,0x19,0xB4,0xCB,
+ 0x80,0xE6,0xE8,0xE2,0x8C,0x95,0x6F,0xAC,0xBA,0x5C,0xD4,0xD9,
+ 0xB7,0xE4,0xF1,0x91,0x8A,0xA3,0x3A,0x6C,0x78,0x4A,0xB4,0xB4,
+ 0x98,0xC4,0xDB,0x7E,0xEC,0xF6,0xE0,0x9E,0xBB,0x4A,0xC4,0xD5,
+ 0x6C,0xD4,0xD5,0xD6,0xEC,0xF8,0xB3,0x84,0x93,0x53,0xD2,0xE7,
+ 0x8E,0x5C,0x5E,0x1C,0xB7,0xC1,0x8B,0xA1,0xB0,0x68,0xAC,0xC0,
+ 0x5D,0xE4,0xFB,0x86,0x74,0x87,0x4E,0xB8,0xC1,0xA7,0xC4,0xD0,
+ 0x86,0xBC,0xD7,0x5D,0x74,0x82,0x24,0x94,0xA5,0x46,0xC4,0xD6,
+ 0xAC,0xEB,0xF0,0xE0,0xDC,0xE7,0xC8,0xFC,0xFA,0xEB,0xAC,0xC0,
+ 0x72,0xC4,0xDA,0x94,0xDC,0xDF,0xDA,0xD4,0xDF,0xB5,0x60,0x6E,
+ 0x18,0x8C,0x96,0x44,0x99,0xA4,0x6E,0xAC,0xCA,0x64,0xC4,0xCB,
+ 0xC7,0xD4,0xF2,0x78,0x89,0x9B,0x4E,0xAC,0xBB,0x8B,0xDB,0xF4,
+ 0x8F,0x7C,0x9A,0x2F,0x4C,0x5A,0x30,0xC7,0xDF,0x71,0xA2,0xB6,
+ 0x67,0xE4,0xFC,0x94,0x94,0xA5,0x5D,0x64,0x6E,0x37,0xA4,0xB4,
+ 0x57,0x74,0x76,0x5C,0xA4,0xBC,0x68,0xEC,0xF6,0xCE,0xC4,0xC6,
+ 0x9C,0x80,0x88,0x5E,0xF4,0xF2,0xEA,0xDC,0xEE,0x7A,0xAA,0xB0,
+ 0xA4,0x64,0x78,0x31,0xBC,0xCC,0x9C,0xE4,0xF1,0x9E,0xB7,0xC6,
+ 0x89,0xE4,0xEF,0xC7,0xC4,0xC6,0xA4,0xC5,0xCC,0xA3,0xE4,0xE2,
+ 0xE1,0xA0,0xA4,0x98,0xBC,0xCE,0x6A,0xD1,0xE8,0x7F,0xF4,0xF6,
+ 0xF5,0xDC,0xEA,0x8F,0x74,0x8B,0x34,0xBC,0xC5,0x7B,0xCC,0xD1,
+ 0xB9,0x9C,0xB6,0x4A,0x6C,0x7E,0x44,0xD4,0xDD,0x9A,0x94,0x9E,
+ 0x4C,0xE4,0xEF,0xB3,0xEA,0xE8,0xEE,0x8C,0xA4,0x58,0x9F,0xB1,
+ 0x77,0xBC,0xC6,0xA9,0xD9,0xDF,0xC8,0x94,0xAA,0x57,0xAC,0xAE,
+ 0x8C,0xD4,0xD5,0xC8,0xD4,0xE2,0x7C,0xAC,0xC6,0x5F,0x84,0x8D,
+ 0x4F,0xFC,0xFA,0xFB,0xAF,0xC6,0x6D,0x54,0x67,0x27,0xC4,0xE2,
+ 0x7C,0xF4,0xFE,0xE1,0xA4,0xC2,0x57,0xB7,0xC0,0x99,0xEC,0xEE,
+ 0xED,0x8B,0x9C,0x5E,0xF4,0xFD,0x9F,0x68,0x72,0x34,0x64,0x7E,
+ 0x2C,0x7F,0x94,0x3F,0x9A,0xB1,0x58,0xBC,0xD3,0x7D,0xE4,0xF6,
+ 0x8D,0xD4,0xDA,0xD7,0xBB,0xC1,0xB7,0x94,0xAA,0x6C,0xD4,0xE0,
+ 0x74,0xFC,0xFE,0xD1,0xC4,0xD2,0xB4,0xAC,0xB0,0x74,0x8C,0xAA,
+ 0x39,0xB4,0xB8,0xA8,0xC4,0xDA,0x6F,0x47,0x55,0x1F,0x54,0x6A,
+ 0x04,0x94,0x9C,0x72,0x1C,0x32,0x04,0x6C,0x80,0x24,0x5C,0x66,
+ 0x3E,0xBC,0xD2,0x5C,0x54,0x5E,0x0C,0x7C,0x81,0x62,0xC4,0xD3,
+ 0x9F,0xAC,0xB9,0x74,0xBC,0xD8,0x6F,0x6C,0x7A,0x24,0xF4,0xFE,
+ 0x8C,0xCC,0xD6,0xC8,0x84,0x9C,0x42,0x84,0x8A,0x3C,0x7C,0x82,
+ 0x54,0xD4,0xEE,0x90,0x5E,0x72,0x26,0x54,0x62,0x37,0xA4,0xAA,
+ 0x8F,0x8C,0x96,0x8C,0xF4,0xF2,0xF4,0xE4,0xE1,0xEE,0x74,0x86,
+ 0x29,0xA4,0xC2,0x64,0xDC,0xEE,0x98,0xB4,0xD2,0x5C,0xD4,0xEE,
+ 0x70,0xA4,0xB6,0x84,0x4C,0x62,0x18,0xEC,0xFE,0xAC,0x7C,0x8E,
+ 0x4A,0xC4,0xD6,0x82,0x94,0xAA,0x47,0xCC,0xE2,0x98,0x8C,0x9E,
+ 0x3E,0xB4,0xD2,0x68,0xCC,0xD2,0xC5,0xDC,0xFA,0x7C,0xF4,0xFE,
+ 0xC4,0x82,0x8E,0x62,0xAC,0xB6,0xA4,0x8C,0xA5,0x47,0xA3,0xBC,
+ 0x59,0x88,0x95,0x5F,0xDC,0xDE,0xE5,0x5E,0x6D,0x28,0x9C,0xA2,
+ 0x84,0xDC,0xF4,0xA0,0x65,0x6C,0x45,0x4C,0x56,0x34,0xE8,0xF6,
+ 0x9F,0xD4,0xEE,0x82,0xD5,0xDA,0xC9,0xB4,0xBA,0x97,0x5C,0x66,
+ 0x2C,0xFC,0xFE,0xE9,0xA4,0xB6,0x79,0xBC,0xD2,0xA4,0xBC,0xC6,
+ 0x9A,0xBC,0xD2,0x6B,0xD4,0xE2,0x9C,0xAC,0xB6,0x8E,0x6A,0x72,
+ 0x48,0x74,0x7F,0x37,0xAC,0xBA,0x98,0xA4,0xBA,0x78,0xDC,0xE9,
+ 0x9F,0x54,0x66,0x18,0x84,0x92,0x34,0xC4,0xCC,0xB4,0xD4,0xE8,
+ 0x74,0xE4,0xEA,0xB4,0xA4,0xB0,0x8B,0xBC,0xCD,0x85,0xEC,0xF2,
+ 0x94,0x74,0x7A,0x49,0xCC,0xDD,0x84,0xF4,0xF8,0xE5,0xDC,0xD6,
+ 0xDE,0xEC,0xFE,0x8A,0x7C,0x89,0x4F,0xCC,0xD6,0xB7,0xE4,0xE8,
+ 0xCC,0xB4,0xC0,0x74,0xCC,0xDB,0x9E,0xDC,0xE2,0xB3,0xB4,0xCC,
+ 0x6C,0xCC,0xCD,0xCB,0xDC,0xF4,0x7F,0x84,0x9D,0x32,0x54,0x5C,
+ 0x2E,0xEC,0xFC,0x99,0x9C,0xA5,0x5C,0xF4,0xF8,0xD1,0x6C,0x78,
+ 0x34,0xEC,0xF1,0xCE,0x7C,0x8E,0x36,0x74,0x80,0x4B,0xEC,0xF1,
+ 0xB9,0x6C,0x7F,0x37,0x9C,0x9E,0x74,0xCC,0xD6,0xA4,0xB4,0xBA,
+ 0x74,0xFC,0xFE,0xFC,0xBC,0xDE,0x74,0xC4,0xC6,0xB9,0x9C,0xB6,
+ 0x57,0x94,0x9E,0x60,0xD4,0xEE,0xA4,0xA4,0xAA,0xA0,0x74,0x86,
+ 0x39,0xB4,0xCA,0x59,0x9C,0xAA,0x61,0xB4,0xC6,0x5C,0xCC,0xE2,
+ 0x82,0xEC,0xF6,0x94,0xDC,0xDA,0xDA,0x9C,0xAA,0x71,0xCC,0xDA,
+ 0x70,0x64,0x66,0x3C,0xF4,0xFE,0xB4,0xCC,0xD6,0x84,0x9C,0xAA,
+ 0x4C,0x94,0x9E,0x3C,0x2C,0x00,0x00,0x00,0x00,0xA1,0x00,0x20,
+ 0x00,0x00,0x08,0xFE,0x00,0xD7,0x09,0x1C,0x48,0x50,0xE0,0x99,
+ 0x75,0x29,0x0A,0x1E,0x2C,0xC8,0xB0,0xA1,0xC3,0x87,0x10,0x77,
+ 0x41,0x9C,0x48,0x71,0xDD,0x2E,0x89,0x15,0x33,0x6A,0xDC,0x08,
+ 0xF1,0x4C,0x42,0x89,0x0B,0x39,0x8A,0x1C,0x49,0xB2,0xA4,0xC9,
+ 0x93,0x1A,0x77,0x8D,0x5B,0x77,0x30,0x24,0xCA,0x97,0x30,0x31,
+ 0xC2,0x9C,0x49,0x32,0x57,0x93,0x74,0x1C,0x12,0x0E,0x74,0x49,
+ 0xB3,0xA7,0xCF,0x9F,0x34,0x77,0xE5,0x5A,0xB6,0x07,0x5D,0x93,
+ 0x8B,0x32,0x81,0x36,0x4C,0xAA,0xB4,0xA9,0xD3,0x81,0x7B,0xC0,
+ 0xF5,0x01,0xF7,0x2A,0x42,0x34,0xA6,0x4F,0xB3,0x6A,0x55,0x8A,
+ 0x87,0x88,0x13,0x6B,0x4C,0xC0,0x2D,0x7A,0x61,0xE6,0x19,0x98,
+ 0x05,0xD6,0xB6,0xEE,0x64,0x79,0xA6,0x6D,0x5B,0x96,0x24,0x5D,
+ 0x26,0x94,0xE2,0x96,0x6D,0xDD,0x8E,0x6A,0x1B,0x9E,0x78,0x62,
+ 0x45,0xCC,0x38,0x70,0xEA,0x3A,0x94,0x13,0x86,0xC7,0xDA,0x18,
+ 0x8E,0x2E,0xEB,0xB6,0x74,0x1B,0x52,0x6E,0x0A,0x95,0xCB,0x54,
+ 0xED,0x89,0x26,0x85,0x2E,0xE3,0xB5,0x8D,0x19,0x27,0x3E,0x83,
+ 0x49,0xE2,0x9E,0x70,0x41,0xC2,0x85,0x8B,0xE6,0x06,0xD3,0xE5,
+ 0x85,0x17,0xAF,0xA6,0xB8,0xDC,0x71,0xA1,0x62,0xB8,0x23,0xA5,
+ 0x30,0x69,0x07,0xA6,0x4D,0x8B,0x2A,0xD7,0xC0,0x0D,0xFB,0x31,
+ 0x66,0x8C,0x13,0x29,0x19,0x5D,0xDB,0x35,0xC8,0x16,0xEE,0x62,
+ 0xE3,0xBB,0xF6,0x6C,0xC9,0xC2,0x8F,0x9F,0x33,0x63,0xA3,0x13,
+ 0x26,0xE4,0xF9,0x76,0x78,0x5D,0x90,0x6E,0x77,0x85,0x33,0x60,
+ 0x0C,0xC3,0x03,0x63,0x41,0x28,0xFE,0x73,0x7E,0xBB,0xEB,0xCC,
+ 0xAE,0x68,0xAA,0x5A,0x8C,0x8B,0x76,0xC6,0xF2,0xDD,0x87,0xEF,
+ 0x5B,0x8A,0x3C,0x98,0xC2,0x5A,0x1B,0x73,0x22,0x7C,0x5C,0x7B,
+ 0xE1,0x6D,0x88,0xC4,0xE9,0x4B,0x09,0xB4,0x8B,0x74,0xAB,0xB1,
+ 0x17,0xCD,0x6A,0x29,0x48,0x91,0x42,0x0A,0x06,0x2E,0xA8,0x60,
+ 0x82,0x6E,0xA5,0x10,0x0E,0x06,0xF7,0x90,0x71,0x48,0x03,0x9C,
+ 0xF4,0x53,0x85,0x01,0xEB,0x51,0x66,0xDA,0x81,0x17,0x79,0x14,
+ 0xCD,0x38,0xE1,0x0C,0x58,0x99,0x79,0x74,0x1D,0x78,0x06,0x11,
+ 0xD1,0x04,0xF1,0x0D,0x1C,0xF3,0x94,0x60,0xC1,0x03,0x1C,0x64,
+ 0x31,0x0E,0x11,0x52,0x60,0xA2,0x63,0x65,0x41,0x18,0xF3,0xC0,
+ 0x37,0x50,0x58,0x73,0xC2,0x09,0x52,0xE0,0x68,0x99,0x45,0x48,
+ 0x42,0xC8,0x9E,0x74,0x74,0x21,0xF8,0x5E,0x4A,0x12,0x88,0xF1,
+ 0x0E,0x3D,0xFA,0x81,0x13,0x08,0x03,0x5C,0x38,0xF0,0xC7,0x1F,
+ 0x58,0x59,0xC4,0x20,0x83,0xE1,0x45,0x13,0xCE,0x09,0xA3,0xB5,
+ 0x78,0x42,0x8B,0x44,0x04,0xD1,0xA1,0x68,0xD1,0xAC,0x11,0x0E,
+ 0x11,0x98,0xA4,0x40,0x04,0x06,0xB6,0x38,0xF3,0x8F,0x0B,0x91,
+ 0x6C,0xC0,0x03,0x3A,0xD8,0x9C,0x30,0xCE,0x38,0x27,0x60,0xA2,
+ 0x60,0x98,0xA0,0x8D,0xB3,0xCC,0x16,0x41,0x9C,0x40,0x44,0x0A,
+ 0xE1,0xE9,0x38,0x62,0x68,0xAA,0x4C,0x01,0x87,0x3F,0x88,0xCC,
+ 0xF1,0x02,0x0D,0xE0,0x08,0x81,0xE8,0x8D,0x94,0xB1,0xB8,0x8C,
+ 0x08,0x87,0x1C,0x62,0x4A,0x36,0x0B,0x2C,0xE0,0x27,0x9C,0x29,
+ 0x2E,0x18,0xCD,0xAA,0x09,0x8A,0x79,0xA6,0x9B,0xFE,0x2D,0x52,
+ 0xB0,0x2A,0x7B,0xD5,0x51,0x74,0xD0,0x38,0x4D,0x70,0x30,0x0C,
+ 0x0D,0x55,0x54,0xD1,0x41,0x1C,0xE8,0x58,0x63,0x0D,0x2E,0x7F,
+ 0xE8,0xC4,0x56,0x72,0xAA,0x7C,0xF3,0x4D,0x28,0x49,0xD8,0x91,
+ 0x84,0x31,0x9C,0x6C,0x61,0xCB,0x03,0xB6,0xDC,0xE3,0xEC,0x3D,
+ 0xCE,0x7C,0xF3,0xA3,0x1D,0xDC,0x56,0x3B,0x05,0x06,0xE3,0x58,
+ 0xB3,0x45,0x11,0x45,0x68,0x31,0x4C,0x3A,0x4E,0x80,0x61,0x06,
+ 0x35,0xD9,0x70,0xF2,0x40,0x11,0x0F,0x64,0x83,0x81,0x01,0x3F,
+ 0xEE,0xF0,0xC0,0x03,0x76,0xE4,0x50,0x84,0x0D,0xDF,0x44,0x31,
+ 0x45,0x12,0xB6,0x00,0xC3,0x89,0x06,0xA1,0xD8,0x11,0x85,0x32,
+ 0x51,0x70,0x23,0x0E,0x07,0x0E,0x80,0xA1,0x0E,0x0C,0x59,0x4C,
+ 0xF1,0x8D,0xB3,0xC0,0x18,0xB3,0x8C,0x31,0xD3,0x14,0x61,0xC7,
+ 0x2F,0xA6,0x44,0xA1,0x81,0x1D,0xF8,0x2E,0x33,0x8E,0x1B,0x6D,
+ 0x72,0x62,0x8B,0xB2,0x51,0x24,0x21,0xAD,0x33,0x49,0x4C,0x01,
+ 0xB2,0xB2,0xD3,0xD8,0x31,0xC5,0x38,0x39,0xD2,0x55,0x51,0x5B,
+ 0xBB,0x34,0xD1,0x47,0x1C,0x66,0x88,0x50,0x85,0x16,0xB1,0x50,
+ 0x23,0x84,0x35,0x4D,0xC4,0x23,0x60,0x84,0xD9,0x94,0x32,0xCD,
+ 0x03,0xCA,0x38,0xF2,0x01,0x14,0xFA,0x88,0x00,0x85,0x2D,0x1F,
+ 0xE4,0x90,0x31,0x20,0xD0,0xE8,0x01,0x45,0xCC,0xBF,0x70,0xA3,
+ 0x0F,0xD4,0x70,0x54,0xD1,0x84,0x35,0xE3,0x8C,0xE0,0x09,0x09,
+ 0x3C,0x58,0x81,0x0F,0x0B,0x4A,0x2C,0xD3,0xAC,0x1D,0x8E,0x28,
+ 0x73,0x08,0xC0,0xF6,0x7C,0x90,0xAF,0x1D,0xCA,0xB0,0x21,0xC0,
+ 0xFE,0x0C,0x1F,0x14,0x90,0xC3,0x03,0x53,0x58,0x50,0xC4,0x37,
+ 0x39,0x7C,0xA0,0xCC,0x08,0xCA,0xE4,0x20,0x0A,0x12,0xD9,0x80,
+ 0xE1,0x00,0x36,0xC0,0xE0,0x1B,0xC5,0x3D,0x53,0x40,0xC3,0x89,
+ 0x23,0xBF,0xE4,0xA0,0x8C,0x05,0x10,0x14,0xB1,0x83,0x32,0x1F,
+ 0x38,0x92,0x05,0x0A,0x0B,0x2C,0xB1,0x8C,0xC1,0x51,0x7C,0xB0,
+ 0x34,0x27,0x2F,0xC2,0x01,0x85,0xC6,0xDC,0x68,0x3C,0x0D,0x14,
+ 0x0E,0x2C,0xE0,0x86,0xCD,0x3C,0x39,0x94,0x82,0x10,0xB9,0x0C,
+ 0x43,0x4E,0x07,0x3C,0x98,0xEB,0xCD,0x3E,0x42,0x44,0xE3,0x04,
+ 0x11,0x44,0x18,0x64,0xDE,0x1E,0xD9,0xF8,0x10,0x05,0x01,0xA4,
+ 0xD8,0xE1,0x8F,0x06,0x3C,0xD0,0xC0,0x83,0x07,0xA6,0xD0,0xA1,
+ 0x41,0x09,0xA3,0xA8,0x40,0x83,0x0F,0x39,0x74,0x23,0x00,0x14,
+ 0x04,0xDC,0xD2,0xC1,0x31,0x4B,0xB4,0xD0,0xC2,0x21,0xFA,0x20,
+ 0x43,0x0F,0x36,0xBD,0x61,0x53,0x8F,0x05,0x34,0xC8,0xA3,0x81,
+ 0x08,0x01,0x70,0xF3,0x81,0x3C,0xD7,0x90,0xA3,0x89,0x2B,0x80,
+ 0x08,0x00,0x01,0x3A,0x91,0x03,0x0F,0xD4,0xA3,0x1E,0xF7,0x98,
+ 0xC3,0x2F,0x02,0xF7,0xBC,0x00,0xD8,0x63,0x02,0x19,0x68,0x46,
+ 0x32,0x64,0x30,0x86,0x66,0x14,0x40,0x19,0x8D,0x28,0x01,0x10,
+ 0x34,0xE0,0x01,0x4F,0xD8,0x80,0x04,0xF5,0xE8,0xC4,0x3C,0x6E,
+ 0x50,0x80,0x28,0x5C,0x41,0x1B,0xAE,0x38,0x07,0xC3,0xB0,0x61,
+ 0x0F,0x65,0xCC,0x61,0x0E,0x2A,0x00,0x04,0x04,0xEA,0x01,0x85,
+ 0x46,0x50,0x82,0x06,0xBF,0x88,0xC2,0x1C,0x5C,0xF1,0x80,0x39,
+ 0xF4,0xC0,0x1A,0xFE,0x5C,0x70,0x03,0x8E,0x72,0xC7,0x90,0x83,
+ 0xE4,0x4C,0x1D,0x71,0x38,0x87,0x0E,0xAA,0x27,0x09,0x71,0xD0,
+ 0x42,0x0C,0x12,0x48,0x46,0x3C,0xB6,0x51,0x90,0x68,0x6C,0x81,
+ 0x07,0x64,0xF0,0x80,0x07,0xEC,0xC1,0x06,0x0D,0xBC,0x83,0x03,
+ 0x61,0x18,0xC5,0x15,0x3C,0x50,0x0A,0x6D,0xD8,0x43,0x07,0x2A,
+ 0x68,0x85,0x36,0xAE,0x90,0x03,0x35,0xB0,0xA1,0x00,0x74,0xE0,
+ 0x85,0x22,0x84,0x00,0x0C,0x57,0xD8,0x03,0x12,0x3E,0x50,0xC4,
+ 0x1D,0x92,0xC1,0x88,0x02,0x74,0x83,0x0E,0xB3,0x18,0xC5,0x04,
+ 0x90,0x61,0xC6,0x39,0x8C,0x62,0x11,0x25,0x18,0x01,0x20,0xA8,
+ 0xA0,0xB7,0x1C,0x54,0x60,0x1E,0xF5,0xE0,0x04,0x39,0x3A,0x66,
+ 0x83,0x1D,0x00,0xA2,0x01,0xDA,0x20,0x83,0x3C,0x9A,0x81,0x0D,
+ 0x54,0x98,0x60,0x1E,0x7E,0x23,0x87,0x0A,0xFC,0x61,0x8F,0x45,
+ 0x8C,0xC0,0x02,0x61,0x50,0x81,0x36,0x04,0xD0,0x0D,0x45,0xB6,
+ 0xE2,0x05,0x9A,0x88,0x80,0x12,0x56,0x90,0x39,0x46,0x98,0x82,
+ 0x1E,0xDA,0xB0,0xA5,0x05,0x7E,0x41,0x02,0x2D,0x50,0x69,0x02,
+ 0x10,0xC8,0x81,0x36,0x1A,0xF1,0x0A,0x16,0x38,0xC1,0x76,0xC9,
+ 0x23,0x62,0x43,0xAC,0x81,0x8E,0x7C,0x88,0x03,0x08,0x34,0xD0,
+ 0x41,0x0F,0x9C,0x18,0x82,0x5C,0xA0,0xE2,0x0F,0xA8,0x08,0x89,
+ 0x14,0xD6,0x40,0x01,0x18,0x80,0xE3,0x17,0x65,0x20,0x47,0x0E,
+ 0xE8,0x50,0x0C,0x13,0x70,0xC0,0x15,0xA3,0xC8,0x03,0x24,0xEC,
+ 0x11,0x86,0x37,0x20,0xA1,0x18,0x7E,0x60,0x47,0x05,0x08,0xA0,
+ 0x0D,0x52,0xE4,0x41,0x1B,0x1F,0xFE,0xB0,0x41,0x1D,0x5A,0x01,
+ 0x89,0x51,0xB4,0x42,0x00,0x80,0xB0,0x81,0x0D,0xAE,0x50,0x00,
+ 0x4F,0x74,0x43,0x0D,0x51,0x68,0x05,0x10,0xEC,0xE1,0x0A,0x46,
+ 0xD4,0xE1,0x17,0xB9,0xBC,0x41,0x05,0x04,0xC0,0x08,0x57,0x8C,
+ 0x20,0x07,0xD0,0x98,0x43,0x1D,0x5C,0x21,0x08,0x1F,0x40,0x81,
+ 0x0A,0x5D,0x50,0x01,0x1D,0xEA,0xA1,0x8D,0x1C,0xD8,0x00,0x85,
+ 0xAE,0xB8,0x41,0x27,0xD4,0x50,0x07,0x1A,0x74,0x60,0x05,0xAE,
+ 0xA0,0xE8,0x08,0xFC,0xD0,0x50,0x01,0x9C,0x62,0x02,0xEC,0x98,
+ 0x04,0x37,0x4E,0x51,0x06,0x0D,0xD0,0x01,0x02,0x8C,0x50,0x43,
+ 0x02,0x2C,0x4A,0x8E,0x2E,0xA8,0xC1,0x1E,0xEC,0x20,0x40,0x05,
+ 0x12,0x20,0x8A,0x3A,0x8C,0xE1,0x2C,0xA5,0xB1,0x19,0x45,0xCE,
+ 0xC3,0x00,0x18,0x9C,0xC3,0x7B,0x1C,0xD0,0x45,0x0F,0x68,0x11,
+ 0x82,0x5D,0x9C,0x80,0x21,0x95,0xA1,0x40,0x08,0xDE,0x00,0x84,
+ 0x46,0x1C,0xE1,0x14,0x54,0x40,0x02,0x12,0x7A,0xD1,0x0A,0x05,
+ 0x1C,0x81,0x1C,0x68,0x38,0xC7,0x1B,0x7A,0xA1,0x80,0x30,0x6C,
+ 0x62,0x0E,0x90,0x88,0x41,0x37,0x8A,0xA1,0x82,0x54,0x4C,0x80,
+ 0x07,0x68,0xD0,0xA8,0x19,0x6F,0x11,0x05,0x01,0x08,0xC2,0x1D,
+ 0xB7,0xB8,0x42,0x14,0x26,0xA1,0x82,0x39,0xE8,0x60,0x02,0x36,
+ 0xB8,0x05,0x10,0xC2,0xE0,0x8A,0x18,0x68,0x83,0x00,0x36,0xB5,
+ 0x47,0x0E,0x7E,0x11,0x4D,0x68,0xD8,0x03,0xA2,0xC7,0xA0,0x01,
+ 0x35,0x9A,0x31,0x81,0x5B,0x7C,0xC0,0x13,0x47,0x38,0xC7,0x1C,
+ 0xA0,0x40,0x58,0x6D,0xC4,0xE2,0x15,0x40,0x60,0xFE,0x84,0x0D,
+ 0x34,0xA0,0x06,0x02,0xF8,0xA1,0x02,0xA7,0x88,0x82,0x3D,0x36,
+ 0xF1,0x0B,0x35,0xB8,0x22,0x0C,0x68,0x40,0x83,0x1A,0x6E,0xB1,
+ 0x48,0x6D,0x4C,0x20,0x9A,0xF6,0xD8,0xC1,0x0E,0x26,0xC1,0x08,
+ 0x6D,0xC4,0x60,0x05,0x63,0xB8,0x83,0x13,0xB8,0x70,0x82,0x5A,
+ 0x45,0x24,0x05,0x21,0xA0,0x86,0x28,0x8A,0xD1,0x81,0x0E,0xC4,
+ 0xE2,0x19,0xC2,0x48,0x46,0x9B,0x1A,0x52,0x19,0x14,0xE4,0x83,
+ 0x06,0xC7,0xC8,0x03,0x0F,0x10,0xC0,0x87,0x64,0xF0,0x81,0x07,
+ 0x6F,0x00,0x41,0x1E,0xE4,0x11,0x87,0x4F,0x24,0xC3,0x04,0x79,
+ 0x08,0x03,0x28,0x68,0x30,0x07,0x4D,0x20,0x41,0x09,0x61,0x18,
+ 0x84,0x21,0x54,0xA0,0x80,0x34,0xBC,0x41,0x09,0x75,0x50,0x80,
+ 0x0B,0x28,0x31,0x87,0x3C,0xD4,0x21,0x16,0x1D,0xF0,0xC2,0x1B,
+ 0x8E,0x00,0x04,0x05,0xA8,0xA0,0x0B,0x5D,0x10,0x05,0x1D,0x74,
+ 0xC0,0x4F,0x48,0xB8,0xA3,0x0B,0x54,0x10,0x47,0x06,0x78,0xE0,
+ 0x0A,0x1D,0x0C,0x23,0x0D,0xBE,0xD0,0xAE,0x2B,0xA0,0xC0,0x08,
+ 0x77,0x04,0xA2,0x18,0x19,0x70,0x05,0x10,0x8A,0x41,0x89,0x23,
+ 0x0C,0x42,0x1E,0x3A,0x50,0x80,0x0E,0xE4,0x41,0x85,0xFA,0x89,
+ 0x02,0x0D,0x40,0xE0,0x67,0x17,0x28,0x21,0x0A,0x2C,0xD0,0x80,
+ 0x0D,0x8C,0xA0,0x02,0x2F,0x8A,0xF1,0x86,0x68,0x42,0x82,0x1D,
+ 0x36,0x08,0xC5,0x2C,0x34,0x30,0x01,0x05,0x58,0x61,0x0C,0x0B,
+ 0xE0,0x02,0x17,0xA4,0x3A,0x11,0x22,0x38,0x60,0x17,0xCF,0x78,
+ 0x45,0x07,0x54,0xA0,0x84,0x08,0x44,0xC0,0x12,0x69,0x61,0x41,
+ 0xFE,0x43,0x6E,0x77,0x02,0x0A,0x04,0xC3,0x00,0xB8,0xA8,0x41,
+ 0x13,0x64,0x80,0x8A,0x47,0x3C,0x22,0x04,0xA8,0x40,0x05,0x12,
+ 0xDA,0x81,0x8A,0x6D,0x6C,0x03,0x0C,0x5E,0x18,0x40,0x32,0xDA,
+ 0xE0,0x8B,0xDE,0x7C,0x82,0x19,0xBE,0x78,0x04,0x2E,0xF8,0xC0,
+ 0x01,0x15,0xB4,0x81,0x19,0x03,0xA8,0x06,0x18,0x6A,0xC0,0x0C,
+ 0x6C,0x1C,0x80,0x19,0xDB,0xF8,0xC2,0x01,0x16,0xD1,0x8C,0x47,
+ 0x58,0x21,0x19,0x07,0xB0,0x2F,0x12,0x28,0x1D,0x82,0x4F,0x10,
+ 0x83,0x09,0xC4,0xF0,0x42,0x1B,0x42,0x90,0x0C,0x3C,0x0C,0x9A,
+ 0x19,0x1C,0x60,0x46,0x30,0x50,0x80,0x0A,0x16,0xB4,0xE1,0x13,
+ 0x1C,0x40,0x42,0x0B,0xF8,0xD0,0x0B,0x2F,0x98,0x9A,0x19,0xC4,
+ 0x18,0x80,0x2F,0x3E,0xC1,0x8B,0x1A,0x54,0xC3,0x04,0x4A,0x08,
+ 0xC1,0x1D,0x64,0x10,0x82,0x03,0x14,0xA3,0x0D,0xD5,0xF0,0x45,
+ 0x30,0xBE,0xA0,0x04,0xDA,0xB2,0x81,0x10,0x00,0xB8,0x41,0x1D,
+ 0x34,0x91,0x0C,0xDF,0x70,0x81,0x08,0xD6,0x75,0xC8,0x19,0x16,
+ 0xF0,0x84,0x31,0xBC,0xE2,0x0D,0xA2,0xE8,0x02,0x36,0xBC,0xE1,
+ 0x0D,0x30,0x84,0x00,0x17,0x46,0x53,0xC8,0x3A,0xA4,0x50,0x2A,
+ 0x14,0x9C,0xE0,0x0E,0x60,0x78,0x04,0x2C,0x2E,0x70,0x01,0x16,
+ 0x80,0xE1,0x02,0xDB,0x18,0x83,0x34,0x2E,0x20,0x8D,0x80,0xE3,
+ 0x02,0x1F,0x63,0x70,0x00,0x3E,0x50,0x81,0x0F,0x14,0x6C,0x01,
+ 0x05,0xB0,0x80,0x05,0x18,0x0C,0xD0,0x02,0x30,0x80,0xC1,0x1A,
+ 0x2C,0x40,0x41,0x35,0x70,0x91,0x0C,0x07,0x6C,0x83,0xCF,0xE9,
+ 0x68,0x42,0x32,0xFE,0x96,0x8D,0x6F,0x19,0xE0,0xE2,0x11,0xD5,
+ 0xB0,0x73,0x9E,0x3D,0x6D,0x05,0x54,0x4C,0xB0,0xCF,0x28,0x97,
+ 0x34,0x2E,0x60,0x21,0x83,0x4C,0xA0,0x42,0xE3,0xF9,0xBE,0x43,
+ 0x35,0xAA,0x91,0x8C,0x9E,0x6F,0xE3,0xD3,0x7C,0xA8,0x86,0x1E,
+ 0xEF,0xF0,0x88,0x25,0xB0,0x00,0x16,0x28,0xA8,0xF8,0x1D,0xF8,
+ 0x10,0x73,0x13,0x40,0xA2,0xA2,0xA5,0x80,0x47,0x33,0xDC,0x01,
+ 0x8A,0x6A,0x5C,0xC0,0x54,0xB7,0x53,0x66,0x41,0xA4,0x10,0x02,
+ 0x16,0xAC,0xC2,0x0B,0xC3,0xC8,0xC7,0x3B,0x68,0x91,0x88,0x68,
+ 0x48,0x60,0x01,0x78,0x90,0x02,0x53,0xE8,0x52,0x19,0x37,0x70,
+ 0xA1,0x54,0x4E,0xB8,0x40,0x26,0x16,0x90,0x09,0x2E,0x1C,0x93,
+ 0x05,0x2C,0x58,0x00,0x2C,0x32,0x31,0xF7,0xB9,0x1B,0x13,0x1F,
+ 0x5A,0x3E,0x01,0x17,0x60,0x41,0xF7,0xB9,0x97,0xCA,0x1A,0x85,
+ 0x67,0x01,0x3E,0xA4,0x01,0x8B,0xB5,0x65,0xA2,0xDF,0xF8,0xC8,
+ 0x84,0x34,0x8C,0x79,0x81,0xB5,0xC1,0xE2,0x0E,0x97,0x9F,0xFC,
+ 0x1D,0x2A,0x9F,0x09,0x7C,0x60,0xFE,0x98,0xA5,0x32,0x3C,0x3E,
+ 0x00,0x1F,0x71,0x7C,0x5C,0xDE,0xF4,0x04,0x27,0x38,0xDE,0x57,
+ 0xEF,0x86,0xBD,0x83,0xC1,0x09,0x75,0x87,0x85,0xE2,0xA3,0x0B,
+ 0x86,0x16,0xBC,0x42,0x14,0x71,0x00,0x41,0x06,0x44,0xD1,0x86,
+ 0xD1,0x67,0x19,0xDC,0x5A,0x27,0x88,0x14,0xBE,0x2A,0x8B,0x7C,
+ 0x64,0x20,0x1F,0x66,0x10,0x46,0x22,0xCE,0x93,0x20,0xD8,0x6C,
+ 0x3D,0x47,0x6E,0xCF,0xC4,0x74,0xBD,0x92,0x65,0x2D,0x97,0xEA,
+ 0xED,0x75,0x77,0x83,0x1B,0x10,0xFE,0x6F,0x77,0xB7,0x6B,0x19,
+ 0x13,0x82,0xC7,0x84,0x1B,0xAA,0xEF,0x04,0xC1,0xBB,0xE1,0x98,
+ 0xE8,0x77,0xC2,0x74,0xEB,0x2E,0x7D,0xEB,0xD3,0x7D,0x01,0x80,
+ 0x67,0xC1,0x1D,0xD6,0xB6,0x80,0x0B,0xBC,0xBD,0x54,0xC6,0xA4,
+ 0x6E,0x96,0x31,0x81,0x7D,0x4C,0xE4,0x7D,0x01,0xEA,0xA7,0x7E,
+ 0x6B,0xE3,0x04,0xB0,0x80,0x7E,0xB0,0xC0,0x05,0x98,0xB0,0x00,
+ 0x14,0xC0,0x02,0x7C,0xA7,0x7E,0x5C,0xD0,0x79,0xD5,0xE0,0x00,
+ 0xC4,0x40,0x0C,0xC1,0x10,0x0C,0x56,0x00,0x06,0xF8,0x00,0x06,
+ 0x41,0x24,0x28,0xC1,0x67,0x10,0x7F,0xB0,0x00,0x0E,0x30,0x04,
+ 0x6F,0xA0,0x0B,0x83,0xD0,0x03,0x86,0x30,0x08,0x0B,0x20,0x01,
+ 0xB8,0x60,0x04,0x5F,0xD5,0x10,0x6E,0x21,0x28,0x35,0x53,0x24,
+ 0x44,0x20,0x44,0xC8,0x83,0x3C,0x3A,0x22,0x28,0x37,0x98,0x23,
+ 0x70,0x82,0x83,0x3C,0x78,0x83,0x3A,0x32,0x83,0xDA,0x67,0x7E,
+ 0x6E,0x37,0x83,0xE2,0x87,0x09,0x40,0xA8,0x7D,0x48,0x18,0x44,
+ 0x6E,0x20,0x84,0x3E,0xF8,0x83,0x70,0x52,0x1A,0x50,0x58,0x1A,
+ 0x08,0x28,0x44,0x42,0xA4,0x84,0x50,0x58,0x84,0x45,0x42,0x85,
+ 0x49,0x78,0x7F,0x0B,0xB0,0x7A,0xC6,0xF4,0x7B,0x1C,0x78,0x33,
+ 0xED,0xC0,0x02,0x96,0x90,0x08,0x43,0x10,0x08,0x20,0x80,0x03,
+ 0xB5,0x60,0x09,0xAC,0x00,0x06,0x2C,0x98,0x0C,0xF0,0xE1,0x1E,
+ 0x6C,0xD7,0x1E,0x95,0x51,0x87,0x76,0x78,0x87,0x78,0xD8,0x1E,
+ 0x74,0x58,0x19,0x38,0x58,0x24,0x3B,0xD2,0x84,0x35,0xD3,0x84,
+ 0x3E,0xB8,0x83,0x3D,0x98,0x23,0x7D,0x58,0x87,0xF9,0x82,0x38,
+ 0x88,0x46,0x18,0x88,0x78,0xC8,0x87,0x3E,0xE8,0x7E,0x00,0xE8,
+ 0x80,0x41,0xC4,0x65,0xAD,0x81,0x07,0x0B,0x80,0x0B,0x11,0x20,
+ 0x0A,0x5E,0x50,0x0E,0xAB,0xA0,0x0B,0xC4,0xE0,0x6E,0x03,0x60,
+ 0x04,0xB7,0x33,0x11,0xD4,0x41,0x1C,0xF2,0xD1,0x18,0xC5,0x61,
+ 0x1C,0xA7,0x68,0x17,0x9A,0xA1,0x87,0x8C,0x61,0x19,0xB0,0xE8,
+ 0x8A,0x72,0x68,0x1D,0xAA,0xE8,0x16,0xC0,0x31,0x87,0x73,0xD8,
+ 0x8A,0x8B,0xF1,0x8A,0x76,0xA8,0x23,0x4A,0xB8,0x23,0xEE,0x91,
+ 0x11,0x1F,0xF1,0x0C,0x83,0xF0,0x0A,0x58,0xB0,0x0A,0xDE,0x90,
+ 0x0B,0x27,0xB0,0x06,0x02,0xD1,0x82,0x79,0x21,0x1F,0xC6,0x41,
+ 0x8B,0xD0,0xE8,0x82,0xC3,0x11,0x8D,0x04,0x21,0x1C,0x45,0xE4,
+ 0x7C,0xC4,0x21,0x6F,0xA7,0xC8,0x76,0x85,0x78,0x24,0xC1,0x01,
+ 0x1C,0xBB,0x40,0x0B,0x20,0x60,0x06,0xE5,0x20,0x0E,0x86,0x10,
+ 0x02,0x62,0x90,0x0C,0xA8,0xB0,0x0E,0x97,0x90,0x17,0xF0,0x98,
+ 0x15,0xAF,0x98,0x8A,0xF3,0x51,0x0B,0xAB,0x50,0x0E,0xBA,0x30,
+ 0x04,0xFB,0x90,0x0C,0x12,0x70,0x07,0xA8,0x10,0x0D,0xF1,0xD0,
+ 0x81,0xF1,0x38,0x90,0x28,0xB1,0x8B,0x23,0x61,0x1E,0x56,0xC0,
+ 0x00,0x92,0x20,0x0C,0xB4,0xF0,0x03,0xC9,0xE0,0x15,0x02,0xB1,
+ 0x00,0x04,0x39,0x91,0x14,0x09,0x1F,0xE6,0x61,0x0D,0xAB,0x90,
+ 0x08,0x89,0x50,0x2C,0x48,0x02,0x1C,0x15,0xF9,0x91,0x1F,0xC9,
+ 0x13,0xCD,0x07,0x92,0x24,0x19,0x92,0x05,0x61,0x2C,0xD1,0x28,
+ 0x90,0x25,0xB9,0x92,0x26,0x11,0x10,0x00,0x3B};
+
+#endif // __www_H_
+
diff --git a/src/make.code.defn b/src/make.code.defn
index d6d49e0..da9e03f 100644
--- a/src/make.code.defn
+++ b/src/make.code.defn
@@ -7,7 +7,7 @@ MISC_SRC = Startup.c Expression.c
SERVER_SRC = Server.c Sockets.c http.c
-CONTENT_SRC = Content.c Headers.c Groups.c
+CONTENT_SRC = Content.c Headers.c Groups.c Parameters.c
STEERING_SRC = Steer.c