diff -urNa dev_tree/bs_extra/banner dev_tree_new/bs_extra/banner
--- dev_tree/bs_extra/banner	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/bs_extra/banner	2008-06-06 16:34:02.000000000 +0200
@@ -15,5 +15,5 @@
 +++++++++++++++++++++++++++++++++#############+++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +-----------------------------------------------------------------------------+
-| bitswitcher image - Version 0.2.0 - build: 11.04.2008                       |
+| bitswitcher image - Version 0.2.1 - build: 06.06.2008                       |
 +-----------------------------------------------------------------------------+
diff -urNa dev_tree/bs_extra/dnsmasq-2.35/start_script/dhcp_conf.sh dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dhcp_conf.sh
--- dev_tree/bs_extra/dnsmasq-2.35/start_script/dhcp_conf.sh	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dhcp_conf.sh	2008-06-06 16:34:02.000000000 +0200
@@ -2,6 +2,7 @@
 
 DHCP_CONF="/var/dhcp.dnsmasq"
 
+must_save=0
 
 start=`nvram get dhcp_start`
 if [ "$start" = "Failed" ]; then
@@ -21,12 +22,14 @@
  nvram set dhcp_dns2=""
  nvram set dhcp_dns3=""
  nvram set dhcp_dns4=""
+ must_save=1
 
  start=1
 fi
 
 if [ "$start" != "1" ]; then
  echo "" > $DHCP_CONF
+ [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
  exit 0
 fi
 
@@ -65,6 +68,7 @@
    custom_start=$dhcp_custom_start
 else
    /bin/nvram set dhcp_custom_start=0
+   must_save=1
    custom_start="0"
 fi
 if [ "$custom_start" = "1" ]; then
@@ -87,3 +91,4 @@
 
 echo -e "dhcp-lease-max=50"'\n'"dhcp-leasefile=/var/dnsmasq.leases"'\n'"dhcp-authoritative"'\n'"cache-size=50"'\n' >> $DHCP_CONF
 
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
diff -urNa dev_tree/bs_extra/dnsmasq-2.35/start_script/dhcp_dns.sh dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dhcp_dns.sh
--- dev_tree/bs_extra/dnsmasq-2.35/start_script/dhcp_dns.sh	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dhcp_dns.sh	2008-06-06 16:34:02.000000000 +0200
@@ -31,7 +31,7 @@
 		$0 start
 		;;
 	*)
-		echo "Usage: /etc/start_scripts/dnsmasq {start|stop|restart}"
+		echo "Usage: /etc/start_scripts/dhcp_dns.sh {start|stop|restart}"
 		exit 1
 		;;
 esac
diff -urNa dev_tree/bs_extra/dnsmasq-2.35/start_script/dns_conf.sh dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dns_conf.sh
--- dev_tree/bs_extra/dnsmasq-2.35/start_script/dns_conf.sh	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/dnsmasq-2.35/start_script/dns_conf.sh	2008-06-06 16:34:02.000000000 +0200
@@ -3,18 +3,20 @@
 DNS_CONF="/var/dns.dnsmasq"
 HOSTS="/var/hosts"
 
+must_save=0
 start=`nvram get dns_start`
 if [ "$start" = "Failed" ]; then
 
  nvram set dns_start=1
  nvram set dns_domain="lan"
  nvram set dnshosts=""
-
+ must_save=1
  start=1
 fi
 
 if [ "$start" != "1" ]; then
  echo "" > $DNS_CONF
+ [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
  exit 0
 fi
 
@@ -31,6 +33,7 @@
    custom_start=$dns_custom_start
 else
    /bin/nvram set dns_custom_start=0
+   must_save=1
    custom_start="0"
 fi
 if [ "$custom_start" = "1" ]; then
@@ -48,3 +51,4 @@
 echo "$IP `cat /proc/sys/kernel/hostname`" >> $HOSTS
 echo $dnshosts|sed -e 's/~/\n/g'|sed -n -e '/^$/!p'|sed -e 's/^\(.*\),\(.*\)$/\1 \2/' >> $HOSTS
 
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
diff -urNa dev_tree/bs_extra/dropbear-0.50/start_script/ssh.sh dev_tree_new/bs_extra/dropbear-0.50/start_script/ssh.sh
--- dev_tree/bs_extra/dropbear-0.50/start_script/ssh.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/dropbear-0.50/start_script/ssh.sh	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,8 @@
 #
 #
 
+must_save=0
+
 case "$1" in
 	start)
 	        echo "Starting dropbear"
@@ -12,6 +14,7 @@
                   ssh_start="$autostart"
                 else
                   /bin/nvram set ssh_start\=1 >/dev/null
+                  must_save=1
                   ssh_start="1"
                 fi
                 port=`/bin/nvram get ssh_port`
@@ -19,6 +22,7 @@
                   ssh_port="$port"
                 else
                   /bin/nvram set ssh_port=22 >/dev/null
+                  must_save=1
                   ssh_port="22"
                 fi
                 /bin/nvram getfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
@@ -26,6 +30,7 @@
                   rm -f /var/dropbear_dss_host_key
                   /bin/dropbearkey -t dss -s 1024 -f /var/dropbear_dss_host_key >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_dss="/var/dropbear_dss_host_key"
                 /bin/nvram getfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
@@ -33,11 +38,13 @@
                   rm -f /var/dropbear_rsa_host_key
                   /bin/dropbearkey -t rsa -s 1024 -f /var/dropbear_rsa_host_key  >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_rsa="/var/dropbear_rsa_host_key"		
                 if [ "$ssh_start" = "1" ]; then
 		  /bin/dropbear -b /etc/issue.net -p $ssh_port -d $ssh_dss -r $ssh_rsa
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping dropbear"
diff -urNa dev_tree/bs_extra/dropbear-0.50/start_script/ssh.sh~ dev_tree_new/bs_extra/dropbear-0.50/start_script/ssh.sh~
--- dev_tree/bs_extra/dropbear-0.50/start_script/ssh.sh~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/dropbear-0.50/start_script/ssh.sh~	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,8 @@
 #
 #
 
+must_save=0
+
 case "$1" in
 	start)
 	        echo "Starting dropbear"
@@ -11,7 +13,8 @@
                 if [ "$autostart" != "Failed" ]; then
                   ssh_start="$autostart"
                 else
-                  `/bin/nvram set ssh_start\=1 >/dev/null`
+                  /bin/nvram set ssh_start\=1 >/dev/null
+                  must_save=1
                   ssh_start="1"
                 fi
                 port=`/bin/nvram get ssh_port`
@@ -19,6 +22,7 @@
                   ssh_port="$port"
                 else
                   /bin/nvram set ssh_port=22 >/dev/null
+                  must_save=1
                   ssh_port="22"
                 fi
                 /bin/nvram getfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
@@ -26,6 +30,7 @@
                   rm -f /var/dropbear_dss_host_key
                   /bin/dropbearkey -t dss -s 1024 -f /var/dropbear_dss_host_key >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_dss="/var/dropbear_dss_host_key"
                 /bin/nvram getfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
@@ -33,11 +38,13 @@
                   rm -f /var/dropbear_rsa_host_key
                   /bin/dropbearkey -t rsa -s 1024 -f /var/dropbear_rsa_host_key  >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_rsa="/var/dropbear_rsa_host_key"		
                 if [ "$ssh_start" = "1" ]; then
 		  /bin/dropbear -b /etc/issue.net -p $ssh_port -d $ssh_dss -r $ssh_rsa
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping dropbear"
diff -urNa dev_tree/bs_extra/ledtool/src/main.c~ dev_tree_new/bs_extra/ledtool/src/main.c~
--- dev_tree/bs_extra/ledtool/src/main.c~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/ledtool/src/main.c~	1970-01-01 01:00:00.000000000 +0100
@@ -1,173 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>      /* open */
-#include <unistd.h>     /* exit */
-#include <sys/ioctl.h>  /* ioctl */
-#include <memory.h>
-
-#include "bcmtypes.h"
-#include "board_api.h"
-
-int boardIoctl(int board_ioctl, BOARD_IOCTL_ACTION action, char *string, int strLen, int offset, char *buf)
-{
-    BOARD_IOCTL_PARMS IoctlParms;
-    int boardFd = 0;
-
-    boardFd = open("/dev/brcmboard", O_RDWR);
-    if ( boardFd != -1 ) {
-        IoctlParms.string = string;
-        IoctlParms.strLen = strLen;
-        IoctlParms.offset = offset;
-        IoctlParms.action = action;
-        IoctlParms.buf    = buf;
-        ioctl(boardFd, board_ioctl, &IoctlParms);
-        close(boardFd);
-        boardFd = IoctlParms.result;
-    } else
-        printf("Unable to open device /dev/brcmboard.\n");
-
-    return boardFd;
-}
-
-
-void print_help(char* name)
-{
- printf("ledtool by Michael Finsterbusch <Michael.Finsterbusch@hftl.de>\n\nusage: %s <LED> <State>\n",name);
- printf("LED: 0 Power green\n"
-        "     1 Power red\n"
-    	"     2 ADSL\n"
-    	"     3 Online\n"
-    	"     4 PSTN\n"
-    	"     5 Internet\n");
-    	
- printf("State: 0 Off\n"
-    	"       1 On\n"
-	"       2 Fail (red)\n"
-	"       3 BlinkOnce\n"
-	"       4 SlowBlinkContinues\n"
-	"       5 FastBlinkContinues\n"
-	"       State 2 to 5 is only available for LED 1, 2 and 3\n");
-}
-
-void sysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-{
-    boardIoctl(BOARD_IOCTL_LED_CTRL, 0, "", (int)ledName, (int)ledState, "");
-}
-
-void _sysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-{
-    boardIoctl(BOARD_IOCTL_SET_GPIO, 0, "", (int)ledName, (int)ledState, "");
-}
-
-int Led(int led,int state)
-{
-  switch(led)
-  {
-   case 0: _sysLedCtrl(0,!state); break;
-   case 1: sysLedCtrl(6,state); break;
-   case 2: sysLedCtrl(0,state); break;
-   case 3: sysLedCtrl(4,state); break;
-   case 4: _sysLedCtrl(28,!state); break;
-   case 5: _sysLedCtrl(32,!state); break;
-   default:
-  	printf("Unknown Error!\n");
-	return -2;
-	break;
-  }
-  return 0;
-}
-
-void X(int x)
-{
-  int i,d=0;
-
-  switch(x)
-  {
-   case 0: d+=100000;
-   case 1: d+=100000;
-   case 2: d+=100000;
-  	for(i=0; i<6; i++)
-  	{
-   	 Led(i,1);
-   	 usleep(d);
-  	}
-  	for(i--; i>=0; i--)
-  	{
-   	 usleep(d);
-   	 Led(i,0);
-  	}
-	break;
-   case 3: d+=100000;
-   case 4: d+=100000;
-   case 5: d+=100000;
-  	for(i=0; i<6; i++)
-  	{
-   	 Led(i,1);
-   	 usleep(d);
-  	}
-  	for(i=0; i<6; i++)
-  	{
-   	 usleep(d);
-   	 Led(i,0);
-  	}
-	break;
-   case 6: d+=100000;
-   case 7: d+=100000;
-   case 8: d+=100000;
-  	for(i=0; i<6; i++)
-  	{
-   	 Led(i,1);
-   	 usleep(d);
-	 Led(i,0);
-  	}
-	break;
-   case 9: d+=100000;
-   case 10: d+=100000;
-   case 11: d+=100000;
-  	for(i=5; i>=0; i--)
-  	{
-   	 Led(i,1);
-   	 usleep(d);
-	 Led(i,0);
-  	}
-	break;
-  default:
-	break;
-  }
-}
-
-int main(int ARGC,char *ARGV[])
-{
-  int led,state;
-
-  if(ARGC<3){
-    print_help(ARGV[0]);
-    return -1;
-  }
-
-  led=atoi(ARGV[1]);
-  state=atoi(ARGV[2]);
-  if(ARGV[1][0]=='X')
-  {
-   X(state);
-   return 0;
-  }
-
-  if(led<0 || led>5)
-  {
-   printf("Error: undefined LED!\n");
-   print_help(ARGV[0]);
-   return -1;
-  }
-  
-  if(state<0 || state>5)
-  {
-   printf("Error: undefined State!\n");
-   print_help(ARGV[0]);
-   return -1;
-  }	
-
-  return Led(led,state); 
-}
diff -urNa dev_tree/bs_extra/Makefile dev_tree_new/bs_extra/Makefile
--- dev_tree/bs_extra/Makefile	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/Makefile	2008-06-06 16:34:02.000000000 +0200
@@ -13,14 +13,15 @@
 	etherwake \
 	fakeonline \
 	dnsmasq-2.35 \
-	getmultipart
+	getmultipart \
+	vodsl_monitor
 
 clean: 
 	for dir in $(SUBDIRS_BS_EXTRA); do $(MAKE) -C $$dir clean; done
 
-.PHONY: all stproxy getmultipart webs_extra dropbear nvram ledtool wsession checkpw thttpd dnsmasq etherwake fakeonline start_scripts banner clean subdirs
+.PHONY: all stproxy getmultipart webs_extra dropbear nvram ledtool wsession checkpw thttpd dnsmasq etherwake fakeonline start_scripts banner clean subdirs vodsl_monitor
 
-all: create_dirs apps start_scripts webs_extra nvram thttpd checkpw wsession ledtool dnsmasq banner getmultipart
+all: create_dirs apps start_scripts webs_extra nvram thttpd checkpw wsession ledtool dnsmasq banner getmultipart vodsl_monitor
 
 apps: stproxy dropbear etherwake fakeonline 
 
@@ -82,6 +83,10 @@
 	$(MAKE) -C getmultipart all
 	$(MAKE) -C getmultipart install
 
+vodsl_monitor:
+	$(MAKE) -C vodsl_monitor all
+	$(MAKE) -C vodsl_monitor install
+
 banner:
 	cat banner.0 > banner
 	echo "| bitswitcher image - Version" `cat version` "- build:" `date  +%d.%m.%Y` "                                                                                   |"|sed -e 's/\(.\{78\}\).*/\1|/'>> banner
diff -urNa dev_tree/bs_extra/Makefile~ dev_tree_new/bs_extra/Makefile~
--- dev_tree/bs_extra/Makefile~	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/Makefile~	1970-01-01 01:00:00.000000000 +0100
@@ -1,66 +0,0 @@
-#global Makefile for Bit-Switcher added applications
-#called from main Makefile and therefore not for running alone
-#by Michael Finsterbusch and Patrick Schmidt
-
-SUBDIRS_BS_EXTRA = wsession \
-	thttpd-2.25b \
-	wsession \
-	stproxy \
-	webs_extra \
-	checkpw \
-	dropbear-0.50 \
-	nvram \
-	ledtool
-
-SUBDIRS = $(foreach dir, $(SUBDIRS_BS_EXTRA), $(shell if [ -d "$(dir)" ]; then echo $(dir); fi))
-
-.PHONY: all stproxy webs_extra dropbear nvram ledtool wsession checkpw thttpd dnsmasq etherwake fakeonline start_scripts
-
-all: apps start_scripts webs_extra nvram thttpd checkpw wsession ledtool
-
-apps: stproxy dropbear dnsmasq etherwake fakeonline 
-
-dropbear:
-	$(MAKE) -C dropbear-0.50 PROGRAMS="dropbear dropbearkey dbclient scp" MULTI=1 STATIC=1 SCPPROGRESS=1
-	$(MAKE) -C dropbear-0.50 install
-
-stproxy:
-	$(MAKE) -C stproxy all
-	$(MAKE) -C stproxy install
-
-webs_extra:
-	$(MAKE) -C webs_extra install
-
-thttpd:
-	$(MAKE) -C thttpd-2.25b install
-
-wsession:
-	$(MAKE) -C wsession all
-	$(MAKE) -C wsession install
-
-checkpw:
-	$(MAKE) -C checkpw all
-	$(MAKE) -C checkpw install
-
-nvram:
-	$(MAKE) -C nvram all
-	$(MAKE) -C nvram install
-
-ledtool:
-	$(MAKE) -C ledtool all
-	$(MAKE) -C ledtool install
-
-dnsmasq:
-	$(MAKE) -C dnsmasq-2.35 all
-	$(MAKE) -C dnsmasq-2.35 install
-
-etherwake:
-	$(MAKE) -C etherwake all
-	$(MAKE) -C etherwake install
-
-fakeonline:
-	$(MAKE) -C fakeonline all
-	$(MAKE) -C fakeonline install
-
-start_scripts:
-	$(MAKE) -C start_scripts install
\ Kein Zeilenumbruch am Dateiende.
diff -urNa dev_tree/bs_extra/nvram/Makefile dev_tree_new/bs_extra/nvram/Makefile
--- dev_tree/bs_extra/nvram/Makefile	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/Makefile	2008-06-06 16:34:02.000000000 +0200
@@ -15,7 +15,8 @@
 	main.c \
 	board_api.c \
 	nvram.c \
-	rc4.c
+	rc4.c \
+	shared_mem.c
 
 OBJECTS = $(SOURCES:%.c=$(OBJ)%.o)
 COMPILE = $(CC) $(CFLAGS)
diff -urNa dev_tree/bs_extra/nvram/src/main.c dev_tree_new/bs_extra/nvram/src/main.c
--- dev_tree/bs_extra/nvram/src/main.c	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/main.c	2008-06-06 16:34:02.000000000 +0200
@@ -30,6 +30,7 @@
 #include "board_api.h"
 #include "nvram.h"
 #include "rc4.h"
+#include "shared_mem.h"
 
 void print_usage(char *prog_name)
 {
@@ -69,7 +70,8 @@
 	 "                             --load the router-configuration from file\n"
 	 "                               <source_file> to NVRAM. <enc-key> ist the\n"
 	 "                               key to decrypt the <source_file>.\n"
-	 "\n",
+         " commit                      --commits changes to NVRAM\n"
+         "\n",
 	 prog_name);
  
   return;
@@ -371,6 +373,7 @@
 
 int print_setconfig(char *file_name)
 {
+  int err;
   char *buf=malloc(PSI_SIZE);
   FILE *f=fopen(file_name,"r");
   if(!f){
@@ -383,7 +386,20 @@
 #endif
   fclose(f);
   sysPersistentSet(buf,ret,0);
-  printf("OK\n");
+  err=shm_reload();
+  if(err)
+    printf("Failed\n");
+  else printf("OK\n");
+  return err;
+}
+
+int print_commit()
+{
+  int err;
+  err=nvram_commit();
+  if(err)
+    printf("Failed\n");
+  else printf("OK\n");
   return 0;
 }
 
@@ -690,6 +706,8 @@
   printf("Error: unknown mode '%d' specified\n",smode);
   return 1;
  }
+
+ ret=0;
  switch(smode)
  {
   case SAVE_MODE_PSI:
@@ -697,43 +715,64 @@
 	break;
   case SAVE_MODE_NVRAM:
 	sysPersistentSet(buf,buflen,PSI_SIZE-buflen);
+        ret=shm_reload();
 	break;
   case SAVE_MODE_ALL:
 	sysPersistentSet(buf,buflen,0);
-	break;
+        ret=shm_reload();
+        break;
   default:
 	printf("Error: unknown error\n");
 	return 1;
    	break;
  }
- printf("OK\n");
- return 0;
+ if(ret)
+   printf("Failed\n");
+ else printf("OK\n");
+ return ret;
 }
 
 
 int main(int argc,char *argv[])
 {
+  int err=0;
   if(argc<2){
     print_usage(argv[0]);
     return -1;
   }
-  if(strcmp(argv[1],"reset")==0) return print_reset();
-  else if(strcmp(argv[1],"show")==0) return print_info(0);
-  else if(strcmp(argv[1],"showkeys")==0) return print_info(1);
-  else if(strcmp(argv[1],"set")==0 && argc>2) return print_set(argv[2],0);
-  else if(strcmp(argv[1],"get")==0 && argc>2) return print_get(argv[2],0);
-  else if(strcmp(argv[1],"del")==0 && argc>2) return print_del(argv[2]);
-  else if(strcmp(argv[1],"setfile")==0 && argc>2) return print_set(argv[2],1);
-  else if(strcmp(argv[1],"getfile")==0 && argc>2) return print_get(argv[2],1);
-  else if(strcmp(argv[1],"dump")==0) return print_dump(0);
-  else if(strcmp(argv[1],"dumphex")==0) return print_dump(1);
-  else if(strcmp(argv[1],"getconfig")==0 && argc>1) return print_getconfig(argv[2]);
-  else if(strcmp(argv[1],"setconfig")==0 && argc>1) return print_setconfig(argv[2]);
-  else if(strcmp(argv[1],"saveconfig")==0 && argc>2) return save_config(argc-2,argv+2);
-  else if(strcmp(argv[1],"loadconfig")==0 && argc>2) return load_config(argc-2,argv+2);
+  if( shm_init() )
+  {
+    printf("error: shm_init()\n");
+    return -1;
+  }
+  if(strcmp(argv[1],"reset")==0) err=print_reset();
+  else if(strcmp(argv[1],"show")==0) err=print_info(0);
+  else if(strcmp(argv[1],"showkeys")==0) err=print_info(1);
+  else if(strcmp(argv[1],"set")==0 && argc>2) err=print_set(argv[2],0);
+  else if(strcmp(argv[1],"get")==0 && argc>2) err=print_get(argv[2],0);
+  else if(strcmp(argv[1],"del")==0 && argc>2) err=print_del(argv[2]);
+  else if(strcmp(argv[1],"setfile")==0 && argc>2) err=print_set(argv[2],1);
+  else if(strcmp(argv[1],"setfilecommit")==0 && argc>2)
+  {
+    err=print_set(argv[2],1);
+    err+=print_commit();
+  }
+  else if(strcmp(argv[1],"getfile")==0 && argc>2) err=print_get(argv[2],1);
+  else if(strcmp(argv[1],"dump")==0) err=print_dump(0);
+  else if(strcmp(argv[1],"dumphex")==0) err=print_dump(1);
+  else if(strcmp(argv[1],"getconfig")==0 && argc>1) err=print_getconfig(argv[2]);
+  else if(strcmp(argv[1],"setconfig")==0 && argc>1) err=print_setconfig(argv[2]);
+  else if(strcmp(argv[1],"saveconfig")==0 && argc>2) err=save_config(argc-2,argv+2);
+  else if(strcmp(argv[1],"loadconfig")==0 && argc>2) err=load_config(argc-2,argv+2);
+  else if(strcmp(argv[1],"commit")==0) err=print_commit();
+  else if(strcmp(argv[1],"reload")==0) err=shm_reload();
+#ifdef DEBUG
+  else if(strcmp(argv[1],"unlock")==0) shm_force_unlock();
+#endif
   else if(strcmp(argv[1],"reboot")==0) sysMipsSoftReset();
- 
-  print_usage(argv[0]);
+  else print_usage(argv[0]);
 
-  return -1;
+  shm_deinit();
+  return err;
 }
+
diff -urNa dev_tree/bs_extra/nvram/src/main.c~ dev_tree_new/bs_extra/nvram/src/main.c~
--- dev_tree/bs_extra/nvram/src/main.c~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/main.c~	1970-01-01 01:00:00.000000000 +0100
@@ -1,739 +0,0 @@
-/*
- * Copyright (C) 2008 Patrick Schmidt (coolman1982@users.sourceforge.net)
- * 		      Michael Finsterbusch (fibu@users.sourceforge.net)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>      /* open */
-#include <unistd.h>     /* exit */
-#include <sys/ioctl.h>  /* ioctl */
-#include <memory.h>
-
-
-#include "board_api.h"
-#include "nvram.h"
-#include "rc4.h"
-
-void print_usage(char *prog_name)
-{
- printf("nvram tool by Patrick Schmidt <coolman1982@users.sourceforge.net>\n"
-	 "              Michael Finsterbusch <fibu@users.sourceforge.net>\n\n"
-	 "Usage: %s <command> <command-options>\n\n"
-	 "Commands:\n"
-	 " show                        --prints table_size and all saved values\n"
-	 " showkeys                    --prints table_size and all available keys\n"
-	 " dump                        --prints complete NVRAM\n"
-	 " dumphex                     --prints complete hexdump of NVRAM\n"
-	 " reset                       --resets NVRAM-table\n"
-	 " get <key>                   --prints saved value for given <key>-name\n"
-	 " getfile <key>=<target_file> --prints saved value for given\n" 
-	 "                               <key>-name to <target_file>\n"
-	 " getconfig <target_file>     --gets built in config-xml-table and\n"
-	 "                               writes it to <target_file>\n"
-	 " set <key>=<value>           --saves new key-value-pair or sets <value>\n"
-	 "                               if <key> exists\n\n"
-	 " setfile <key>=<source_file> --sets value of given <key> to the content\n"
-	 "                               of given <source_file>\n\n"
-	 " setconfig <src_file>        --writes built in config-xml-table from\n"
-	 "                               <src_file>\n\n"
-	 " del <key>                   --deletes a <key>=<value>-pair for a given\n"
-	 "                               <key>\n\n"
-	 " saveconfig <mode>=<smode> <key>=<enc-key> <file>=<target_file>\n"
-	 "                             --save the router-configuration to\n" 
-	 "                               <target_file>\n"
-	 "                               Save-Mode(<smode>) means:\n"
-	 "                                    mode=1 : save the standard config\n"
-	 "                                    mode=2 : save the BS configuration\n"
-	 "                                    mode=3 : save the whole NVRAM\n"
-	 "                               <enc-key> is an encryption passphrase to\n"
-	 "                               protect your data.\n"
-	 "                               No key, no protection (key=)\n\n"
-	 " loadconfig <key>=<enc-key> <file>=<source_file>\n"
-	 "                             --load the router-configuration from file\n"
-	 "                               <source_file> to NVRAM. <enc-key> ist the\n"
-	 "                               key to decrypt the <source_file>.\n"
-	 "\n",
-	 prog_name);
- 
-  return;
-}
-
-int print_reset()
-{
-  printf("Resetting NVRAM-table...");
-  int ret=0;
-  ret=nvram_reset();
-  if(ret){
-    printf("Failed\n");
-    return ret;
-  }
-  else printf("OK\n");
-  return 0;
-}
-
-int print_info(char keys_only)
-{
-  char buf[MAX_TABLE_SIZE+512];
-  int buf_size=MAX_TABLE_SIZE+512;
-  printf("Printing NVRAM-Info...");
-  int ret=0;
-  ret=nvram_get_info(buf,&buf_size,keys_only);
-  if(ret)
-  {
-    printf("Failed\n",ret);
-    return ret;
-  }
-  printf("OK\n");
-  int i;
-  for(i=0;i<buf_size;i++)
-    printf("%c",buf[i]);
-  printf("\n");
-  return 0;
-}
-
-int print_set(char *argument,char from_file)
-{
-  char key[MAX_KEY_LENGTH+1];
-  char value[MAX_VALUE_SIZE+1];
-  char *pos;
-  pos=strchr(argument,'=');
-  if(!pos)
-  {
-    printf("Error: wrong argument\n");
-    print_usage("nvram");
-    return;
-  }
-  else
-  {
-    if(pos-argument>MAX_KEY_LENGTH)
-    {
-      printf("Failed...MAX_KEY_LENGTH=%d\n",(int) MAX_KEY_LENGTH);
-      return ERR_VALUE_TO_LONG;
-    }
-    snprintf(key,pos-argument+1,"%s\0",argument);
-#ifdef DEBUG
-    printf("key=%s\n",key);
-#endif
-    pos++;
-    int ret=0;
-    //Value is given from command line
-    if(!from_file)
-    {
-      strcpy(value,pos);
-      //printf("value=%s\n",value);
-      ret=nvram_set_value(key,value,strlen(value));
-      if(ret<0){
-        printf("Failed\n");
-        exit(-1);
-      }
-      else printf("OK\n");
-      return 0;
-    }
-    //Value should be read from file
-    else
-    {
-      FILE *f=fopen(pos,"r");
-      if(!f){
-        printf("failed...cant open file: %s\n",pos);
-        return ERR_UNDEFINED;
-      }
-      ret=fread(value,1,MAX_VALUE_SIZE,f);
-#ifdef DEBUG
-      printf("read %d bytes from file\n",ret);
-#endif
-      fclose(f);
-      //everything all right
-      if(ret>0 && ret<MAX_VALUE_SIZE)
-      {
-        value[ret]='\0';
-        ret=nvram_set_value(key,value,ret);
-        if(ret<0){
-          printf("Failed\n");
-          return ret;
-        }
-        else printf("OK\n");
-        return 0;
-      }
-      //buffer too small
-      else if(ret>0 && ret>=MAX_VALUE_SIZE)
-      {
-        printf("Failed...file contains more byte than max allowed value size (%d bytes)\n",(int) MAX_VALUE_SIZE);
-        return ERR_VALUE_TO_LONG;
-      }
-      //read failed
-      else
-      {
-        printf("Failed...while reading from file\n");
-        return ERR_UNDEFINED;
-      }
-    }
-  }
-}
-
-int print_get(char *arg,char to_file)
-{
-  char buf[MAX_VALUE_SIZE+1];
-  unsigned int value_size=MAX_VALUE_SIZE;
-  int ret=0;
-  if(to_file)
-  {
-    char key[MAX_KEY_LENGTH+1];
-    char *pos;
-    pos=strchr(arg,'=');
-    if(!pos)
-    {
-      printf("Error: wrong argument...missing '=' in statement\n");
-      print_usage("nvram");
-      return;
-    }
-    if(pos-arg>MAX_KEY_LENGTH)
-    {
-      printf("Failed...MAX_KEY_LENGTH=%d\n",(int) MAX_KEY_LENGTH);
-      return ERR_VALUE_TO_LONG;
-    }
-    snprintf(key,pos-arg+1,"%s\0",arg);
-#ifdef DEBUG
-    printf("key=%s\n",key);
-#endif
-    ret=nvram_get_value(key,buf,&value_size);
-    if(ret<0)
-    {
-      printf("Failed\n");
-      return ret;
-    }
-    pos++;
-#ifdef DEBUG
-    printf("file_name=%s\n",pos);
-#endif
-    FILE *f=fopen(pos,"w+");
-    if(!f){
-      printf("failed...cant open file: %s\n",pos);
-      return ERR_UNDEFINED;
-    }
-    ret=fwrite(buf,1,value_size,f);
-#ifdef DEBUG
-    printf("wrote %d bytes from file\n",ret);
-#endif
-    fclose(f);
-    if(ret<0)
-    {
-      printf("failed...cant write to file: %s\n",pos);
-      return ret;
-    }
-   if(ret<value_size)
-   {
-     printf("Error: not enough space\n");
-     return 1;
-   } 
-  }
-  else
-  {
-    ret=nvram_get_value(arg,buf,&value_size);
-    if(ret<0)
-    {
-      printf("Failed\n");
-      return ret;
-    }
-    //if binary value, not null terminated at right position
-    if(value_size!=strlen(buf))
-    {
-      int i;
-      for(i=0;i<value_size;i++)
-        printf("%c",buf[i]);
-      printf("\n");
-    }
-    else printf("%s\n",buf);
-  }
-  return 0;
-}
-
-int print_del(char *arg)
-{
-  int ret=nvram_del_value(arg);
-  if(ret)
-  {
-    printf("Failed\n");
-    return ret;
-  }
-  else printf("OK\n");
-  return 0;
-}
-
-int print_dump(char hexdump)
-{
-  int i,h=0,l=0,j=0;
-  char *buf=malloc(PSI_SIZE+1);
-  unsigned char string[16];
-  int ret=nvram_dump(buf,PSI_SIZE);
-  if(ret){
-    printf("Failed\n");
-    return ret;
-  }
-  if(!hexdump)
-  {
-    printf("Printing complete NVRAM:\n");
-
-    for(i=0; i<PSI_SIZE+1; i++)
-    {
-      if(&buf[i]==0)
-        continue;
-      i+=printf("%s\n",&buf[i]);
-    }
-    printf("\n");  
-  }
-  else
-  {
-    h=0;
-    printf("Printing complete hexdump of NVRAM:\n");
-    for(i=0; i<PSI_SIZE+1; i++)
-    {
-      if(!h)
-      {
-        h=1, printf("%08X:  ",i);
-        l=0;
-      }
-      printf("%02X ",(unsigned char)buf[i]);
-      string[l++]=buf[i];
-      if(((i+1)%8)==0)
-        printf(" ");
-      if(((i+1)%16)==0)
-      {
-        printf("   ");
-        for(j=0; j<l; j++)
-          printf("%c",(string[j]>31 && string[j]<128)?string[j]:'.');
-        h=0;
-        printf("\n");
-      }
-    }
-    if(h!=0)
-    {
-      printf("   ");
-      for(j=0; j<l; j++)
-        printf("%c",(string[j]>32 || string[j]<128)?string[j]:'.');
-    }
-  }
-  return 0;
-}
-
-int print_getconfig(char *file_name)
-{
-  char *buf=malloc(PSI_SIZE+1);
-  int ret=nvram_dump(buf,PSI_SIZE);
-  if(ret){
-    printf("Failed\n");
-    return ret;
-  }
-  buf[PSI_SIZE]='\0';
-  char *pos=strstr(buf,"</psitree>\n");
-  if(!pos)
-  {
-    printf("no config found in NVRAM\n");
-    return -1;
-  }
-#ifdef DEBUG
-  printf("file_name=%s\n",file_name);
-#endif
-  FILE *f=fopen(file_name,"w+");
-  if(!f){
-    printf("failed...cant open file: %s\n",file_name);
-    return ERR_UNDEFINED;
-  }
-  ret=fwrite(buf,1,(pos-buf)+11,f);
-#ifdef DEBUG
-  printf("wrote %d bytes from file\n",ret);
-#endif
-  fclose(f);
- if(ret<(pos-buf)+11)
- {
-  printf("Error: not enough space\n");
-  return 1;
- } 
-  printf("OK\n");
-  return 0;
-}
-
-int print_setconfig(char *file_name)
-{
-  char *buf=malloc(PSI_SIZE);
-  FILE *f=fopen(file_name,"r");
-  if(!f){
-    printf("failed...cant open file: %s\n",file_name);
-    return ERR_UNDEFINED;
-  }
-  int ret=fread(buf,1,PSI_SIZE,f);
-#ifdef DEBUG
-  printf("read %d bytes from file\n",ret);
-#endif
-  fclose(f);
-  sysPersistentSet(buf,ret,0);
-  printf("OK\n");
-  return 0;
-}
-
-
-
-#define GETOPT_OK         0
-#define GETOPT_NOVALUE    1
-#define GETOPT_NOEQUAL    2
-int getopts(int* argc,char* argv[],char** parameter,char** value)
-{
- char* str;
- char* pos;
-
- if(*argc<1)
-  return -1;
- if(!argv)
-  return -2;
-
- (*argc)--;
- str=argv[*argc];
-
- *parameter=NULL;
- *value=NULL;
-
- pos=strchr(str,'=');
- if(!pos)
- {
-  *parameter=str;
-  return GETOPT_NOEQUAL;
- }
- *pos='\0';
- *parameter=str;
- *value=pos+1;
- if(strlen(*value)>0)
-  return GETOPT_OK;
- return GETOPT_NOVALUE;
-}
-
-unsigned int elf_hash(char* buffer,int buflen)
-{
- unsigned int h=0;
- unsigned int g;
- char* end=buffer+buflen;
-
- while(buffer<end)
- {
-  h=(h<<4)+(int)*(buffer++);
-  g=h & 0xF0000000;
-  if(g!=0)
-   h=h^g>>24;
-  h=h & ~g ;
- }
-
- return h;
-}
-
-#define SAVE_MODE_PSI   1
-#define SAVE_MODE_NVRAM 2
-#define SAVE_MODE_ALL   3
-/*
-  save_config - Configuration file
-
-  C - Configuration (1 Byte)
-  M - Mode (1 Byte)
-  H - Hash over Configuration+Mode (1 Byte)
-  all data is possibly encrypted
-
-  config file structure = CCCCCCCC...CCCCCCCMHHHH
-*/
-int save_config(int argc,char* argv[])
-{
- char* para,*val;
- int ret;
- unsigned char smode=0;
- char* target_file=NULL;
- char* enc_key=NULL;
- char buffer[PSI_SIZE+5];
- int buflen;
- unsigned int hash;
- char encbuffer[PSI_SIZE+5];
- FILE* file;
- char* buf;
- 
-// Parameters
- while((ret=getopts(&argc,argv,&para,&val))>=GETOPT_OK)
- {
-  if(ret==GETOPT_NOEQUAL)
-   {
-    printf("Error: missing '=' in '%s' statement\n",para);
-    return 1;
-   }
-
-  if(strcmp(para,"mode")==0)
-  {
-   if(ret==GETOPT_NOVALUE)
-   {
-    printf("Error: no mode specified\n");
-    return 1;
-   }
-   int h=atoi(val);
-   if(h<0 || h>255)
-   {
-    printf("Error: unknown mode '%d' specified\n",h);
-    return 1;
-   }
-   smode=(unsigned char)h;
-  }
-  else if(strcmp(para,"file")==0)
-  {
-   if(ret==GETOPT_NOVALUE)
-   {
-    printf("Error: no file specified\n");
-    return 1;
-   }
-   target_file=strdup(val);
-  }
-  else if(strcmp(para,"key")==0)
-  {
-   if(ret==GETOPT_NOVALUE)
-    enc_key=NULL;
-   else
-    enc_key=strdup(val);
-  }
- }
-#ifdef DEBUG
- printf("Mode=%d\nFile=%s\nKey=%s\n",smode,target_file,enc_key);
-#endif
- 
-// Mode
- if(smode!=SAVE_MODE_PSI && smode!=SAVE_MODE_NVRAM && smode!=SAVE_MODE_ALL)
- {
-  printf("Error: unknown mode '%d' specified\n",smode);
-  return 1;
- }
- switch(smode)
- {
-  case SAVE_MODE_PSI:
-	nvram_dump(buffer,PSI_SIZE);
-  	buffer[PSI_SIZE]='\0';
-  	char *pos=strstr(buffer,"</psitree>\n");
-  	if(!pos)
-  	{
-    	 printf("Error: no config found in NVRAM\n");
-    	 return -1;
-  	}
-	buflen=(pos-buffer)+11;
-	buffer[buflen]='\0';
-	break;
-  case SAVE_MODE_NVRAM:
-	buflen=nvram_get_table_size();
-	if(buflen<0)
-	{
- 	 printf("Error: NVRAM is corrupt\n");
-	 return 1;
-	}
-	buflen+=4;
-        if(nvram_dump_table(buffer,buflen)!=0)
-	{
-	 printf("Error: reading NVRAM\n");
-  	 return 1;
-	}
-	break;
-  case SAVE_MODE_ALL:
-	nvram_dump(buffer,PSI_SIZE);
- 	buflen=PSI_SIZE;
-	break;
-  default:
-	printf("Error: unknown error\n");
-	return 1;
-   	break;
- }
- buffer[buflen]=smode;
- buflen+=1;
- 
-// Hash
- hash=elf_hash(buffer,buflen);
- memcpy(buffer+buflen,&hash,4);
- buflen+=4;
-
-// encryption
- buf=buffer;
- if(enc_key)
- {
-  rc4(enc_key,strlen(enc_key),buffer,buflen,encbuffer);
-  buf=encbuffer;
- }
-
-// write to file
- file=fopen(target_file,"w+");
- if(!file)
- {
-  printf("Error: can not open file: %s\n",target_file);
-  return 1;
- }
- ret=fwrite(buf,1,buflen,file);
-
-#ifdef DEBUG
-    printf("wrote %d bytes to file\n",ret);
-#endif
- fclose(file);
- if(ret<0)
- {
-  printf("Error: failed to write to %s\n",target_file);
-  return ret;
- }
- if(ret<buflen)
- {
-  printf("Error: not enough space\n");
-  return 1;
- } 
-
- printf("OK\n");
-
- return 0;
-}
-
-int load_config(int argc,char* argv[])
-{
- char* para,*val;
- int ret;
- unsigned char smode=0;
- char* source_file=NULL;
- char* enc_key=NULL;
- char buffer[PSI_SIZE+5];
- int buflen;
- unsigned int hash,file_hash;
- char encbuffer[PSI_SIZE+5];
- FILE* file;
- char* buf;
- 
-// Parameters
- while((ret=getopts(&argc,argv,&para,&val))>=GETOPT_OK)
- {
-  if(ret==GETOPT_NOEQUAL)
-   {
-    printf("Error: missing '=' in '%s' statement\n",para);
-    return 1;
-   }
-
-  if(strcmp(para,"file")==0)
-  {
-   if(ret==GETOPT_NOVALUE)
-   {
-    printf("Error: no file specified\n");
-    return 1;
-   }
-   source_file=strdup(val);
-  }
-  else if(strcmp(para,"key")==0)
-  {
-   if(ret==GETOPT_NOVALUE)
-    enc_key=NULL;
-   else
-    enc_key=strdup(val);
-  }
- }
-#ifdef DEBUG
- printf("File=%s\nKey=%s\n",source_file,enc_key);
-#endif
- 
- file=fopen(source_file,"r");
- if(!file)
- {
-   printf("Error: can not open file: %s\n",source_file);
-   return 1;
- }
- ret=fread(buffer,1,PSI_SIZE+5,file);
-#ifdef DEBUG
-      printf("read %d bytes from file\n",ret);
-#endif
- fclose(file);
- //everything right?
- if(ret<0 || ret>PSI_SIZE+5)
- {
-  printf("Error: faild to read file: %s\n",source_file);
-  return 1;
- }
- buflen=ret;
-
-// decryption
- buf=buffer;
- if(enc_key)
- {
-  rc4(enc_key,strlen(enc_key),buffer,buflen,encbuffer);
-  buf=encbuffer;
- }
-
-// Hash
- buflen-=4;
- hash=elf_hash(buf,buflen);
- 
- memcpy(&file_hash,buf+buflen,4);
- if(hash!=file_hash)
- {
-  printf("Error: file %s is corrupt\n",source_file);
-  return 1;
- }
-
-// Mode
- buflen-=1;
- memcpy(&smode,buf+buflen,1);
- if(smode!=SAVE_MODE_PSI && smode!=SAVE_MODE_NVRAM && smode!=SAVE_MODE_ALL)
- {
-  printf("Error: unknown mode '%d' specified\n",smode);
-  return 1;
- }
- switch(smode)
- {
-  case SAVE_MODE_PSI:
-	sysPersistentSet(buf,buflen,0);
-	break;
-  case SAVE_MODE_NVRAM:
-	sysPersistentSet(buf,buflen,PSI_SIZE-buflen);
-	break;
-  case SAVE_MODE_ALL:
-	sysPersistentSet(buf,buflen,0);
-	break;
-  default:
-	printf("Error: unknown error\n");
-	return 1;
-   	break;
- }
- printf("OK\n");
- return 0;
-}
-
-
-int main(int argc,char *argv[])
-{
-  if(argc<2){
-    print_usage(argv[0]);
-    return -1;
-  }
-  if(strcmp(argv[1],"reset")==0) return print_reset();
-  else if(strcmp(argv[1],"show")==0) return print_info(0);
-  else if(strcmp(argv[1],"showkeys")==0) return print_info(1);
-  else if(strcmp(argv[1],"set")==0 && argc>2) return print_set(argv[2],0);
-  else if(strcmp(argv[1],"get")==0 && argc>2) return print_get(argv[2],0);
-  else if(strcmp(argv[1],"del")==0 && argc>2) return print_del(argv[2]);
-  else if(strcmp(argv[1],"setfile")==0 && argc>2) return print_set(argv[2],1);
-  else if(strcmp(argv[1],"getfile")==0 && argc>2) return print_get(argv[2],1);
-  else if(strcmp(argv[1],"dump")==0) return print_dump(0);
-  else if(strcmp(argv[1],"dumphex")==0) return print_dump(1);
-  else if(strcmp(argv[1],"getconfig")==0 && argc>1) return print_getconfig(argv[2]);
-  else if(strcmp(argv[1],"setconfig")==0 && argc>1) return print_setconfig(argv[2]);
-  else if(strcmp(argv[1],"saveconfig")==0 && argc>2) return save_config(argc-2,argv+2);
-  else if(strcmp(argv[1],"loadconfig")==0 && argc>2) return load_config(argc-2,argv+2);
-  else if(strcmp(argv[1],"softreset")==0) sysMipsSoftReset();
- 
-  print_usage(argv[0]);
-
-  return -1;
-}
diff -urNa dev_tree/bs_extra/nvram/src/nvram.c dev_tree_new/bs_extra/nvram/src/nvram.c
--- dev_tree/bs_extra/nvram/src/nvram.c	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/nvram.c	2008-06-06 16:34:02.000000000 +0200
@@ -29,13 +29,22 @@
 
 #include "board_api.h"
 #include "nvram.h"
+#include "shared_mem.h"
 
 //returns size of nvram_table, size is a 4 byte value at the end of psi_mem
 int nvram_get_table_size()
 {
+#ifdef DEBUG
+  printf("nvram_get_table_size()\n");
+#endif
+  int err;
   //die letzten vier Byte geben die Größe der Table an
   int table_size=-1;
-  sysPersistentGet((char*)&table_size,4,PSI_SIZE-4);
+  //sysPersistentGet((char*)&table_size,4,PSI_SIZE-4);
+  err=shm_rw((char*)&table_size,4,SHARED_MEM_SIZE-4,SHM_READ);
+#ifdef DEBUG
+  printf("nvram_get_table_size() read size=%d\n",table_size);
+#endif
   if(table_size<0 || table_size>MAX_TABLE_SIZE) return ERR_INVALID_TABLE_SIZE;
   else return table_size;
 }
@@ -47,32 +56,37 @@
   printf("nvram_set_table_size=%d\n",table_size);
 #endif
   if(table_size<0 || table_size>MAX_TABLE_SIZE) return ERR_INVALID_TABLE_SIZE;
-  sysPersistentSet((char*)&table_size,4,PSI_SIZE-4);
-  return 0;
+  //sysPersistentSet((char*)&table_size,4,PSI_SIZE-4);
+  return shm_rw((char*)&table_size,4,SHARED_MEM_SIZE-4,SHM_WRITE);
 }
 
 //Resets the whole nvram_table including the table_size with 0
 int nvram_reset()
 {
   char *buf=NULL;
+  int err;
   buf=malloc(MAX_TABLE_SIZE+4);
   if(!buf) return ERR_MALLOC;
   memset(buf,255,MAX_TABLE_SIZE+4);
-  sysPersistentSet(buf,MAX_TABLE_SIZE+4,PSI_SIZE-(MAX_TABLE_SIZE+4));
+  //sysPersistentSet(buf,MAX_TABLE_SIZE+4,PSI_SIZE-(MAX_TABLE_SIZE+4));
+  err=shm_rw(buf,MAX_TABLE_SIZE+4,0,SHM_WRITE);
   free(buf);
   nvram_set_table_size(0);
-  return 0;
+  return err;
 }
 
 //prints the whole psi_mem into buf if buf_size is big enough
 int nvram_dump(char *buf,int buf_size)
 {
+  int err,table_size, offset;
 #ifdef DEBUG
   printf("nvram_dump...\n");
 #endif
-  if(!buf || buf_size<0) return ERR_UNDEFINED_PARAM;
+  if(!buf || buf_size<0 || buf_size<PSI_SIZE) return ERR_UNDEFINED_PARAM;
   sysPersistentGet(buf,buf_size,0);
-  return 0;
+  table_size=nvram_get_table_size();
+  err=shm_rw(buf+SHARED_MEM_SIZE,SHARED_MEM_SIZE,0,SHM_READ);
+  return err;
 }
 
 //prints the whole nvram_table into buf if buf_size is big enough
@@ -84,8 +98,9 @@
   if(!buf || buf_size<0) return ERR_UNDEFINED_PARAM;
   int table_size=nvram_get_table_size();
   if(table_size<0) return table_size;
-  sysPersistentGet(buf,buf_size,PSI_SIZE-4-table_size);
-  return 0;
+  //sysPersistentGet(buf,buf_size,PSI_SIZE-4-table_size);
+  if(buf_size<table_size) return 0;
+  return shm_rw(buf,buf_size,SHARED_MEM_SIZE-(table_size+4),SHM_READ);
 }
 
 //copies value to a given key_name to buf, return=table_offset which points to key_length
@@ -117,24 +132,24 @@
   while(pos<table_buf+table_size)
   {
 #ifdef DEBUG
-    printf("key_length=%hd\n",*pos);
+    printf("key_length=%d\n",*pos);
 #endif
     key_length=(unsigned char) *pos;
-    if(key_length<1 || key_length>MAX_KEY_LENGTH) return ERR_INCONSISTENT_TABLE;
+    if(key_length<1) return ERR_INCONSISTENT_TABLE;
     snprintf(key_buf,key_length+1,"%s\0",pos+1);
 #ifdef DEBUG
     printf("key_buf=%s\n",key_buf);
 #endif
     //value_length=(unsigned short int) *(pos+1+key_length);
     memcpy(&value_length,pos+1+key_length,sizeof(value_length));
-    if(value_length<0 || value_length>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
+    if(value_length>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
 #ifdef DEBUG
-    printf("value_length: %hd\n",value_length);
+    printf("value_length: %d\n",value_length);
 #endif
     //right key found
     if(strcmp(key_buf,key_name)==0)
     {
-      if(buf_size<value_length+1) return ERR_BUF_SIZE_TOO_SMALL;
+      if(*buf_size<value_length+1) return ERR_BUF_SIZE_TOO_SMALL;
       memcpy(buf,pos+1+key_length+2,value_length);
       buf[value_length]='\0';
       *buf_size=value_length;
@@ -163,6 +178,7 @@
   int table_size=nvram_get_table_size();
   if(table_size<0) return table_size;
 
+  int err;
   char temp[MAX_VALUE_SIZE+1];
   unsigned int old_value_size=MAX_VALUE_SIZE;
   int offset=nvram_get_value(key_name,temp,&old_value_size);
@@ -191,6 +207,13 @@
     else if(old_value_size<value_length)
     {
       new_table_size=table_size+(value_length-old_value_size);
+      if(new_table_size>MAX_TABLE_SIZE)
+      {
+#ifdef DEBUG
+        printf("nvram_set_value() error new_table_size=%d is too big\n",new_table_size);
+#endif
+        return -1;
+      }
 #ifdef DEBUG
       printf("nvram_set_value: enlarge value from length=%d to length=%d with new_table_size=%d\n",old_value_size,value_length,new_table_size);
 #endif
@@ -200,8 +223,10 @@
     {
       //sprintf(old_table+offset,"%s=%s;",key_name,buf);
       memcpy(old_table+offset+1+strlen(key_name)+2,value,value_length);
-      sysPersistentSet(old_table,table_size,PSI_SIZE-4-table_size);
+      //sysPersistentSet(old_table,table_size,PSI_SIZE-4-table_size);
+      err=shm_rw(old_table,table_size,SHARED_MEM_SIZE-(table_size+4),SHM_WRITE);
       free(old_table);
+      if(err) return err;
       return 0;
     }
     new_table=malloc(new_table_size);
@@ -238,17 +263,19 @@
       memcpy(new_table+offset+1+strlen(key_name)+2+value_length,old_table+offset+1+strlen(key_name)+2+old_value_size,rest_length);
     }
     //printf("new_table_start_char=%c, new_table_offset=%d\n",*new_table,PSI_SIZE-4-new_table_size);
-    sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    //sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    err=shm_rw(new_table,new_table_size,SHARED_MEM_SIZE-4-new_table_size,SHM_WRITE);
     nvram_set_table_size(new_table_size);
     free(old_table);
     free(new_table);
+    if(err) return err;
     return 0;
   }
   //really new value
   else if(offset==ERR_VALUE_NOT_FOUND)
   {
 #ifdef DEBUG
-     printf("nvram_set_value: creating new value...\n");
+    printf("nvram_set_value: creating new value with key_len=%d, value_len=%d\n",strlen(key_name),value_length);
 #endif
      char *target;
      int target_size=strlen(key_name)+value_length+3;
@@ -277,9 +304,21 @@
      target[target_size]='\0';
      printf("nvram_set_value: saving target:%s at byte-offset=%d with length=%d\n",target,PSI_SIZE-4-table_size-target_size,target_size);
 #endif
-     sysPersistentSet(target,target_size,PSI_SIZE-4-table_size-target_size);
+     //sysPersistentSet(target,target_size,PSI_SIZE-4-table_size-target_size);
+     if(table_size+target_size>MAX_TABLE_SIZE)
+     {
+#ifdef DEBUG
+       printf("nvram_set_value() error new_table_size=%d is too big\n",table_size+target_size);
+#endif
+       err=-1;
+       goto out;
+     }
+     err=shm_rw(target,target_size,SHARED_MEM_SIZE-4-table_size-target_size,SHM_WRITE);
      nvram_set_table_size(table_size+target_size);
+out:
      free(target);
+     if(err) return err;
+     return 0;
   }
   //error
   else return offset;
@@ -287,6 +326,7 @@
 
 int nvram_del_value(char *key_name)
 {
+  int err;
   if(!key_name) return ERR_UNDEFINED_PARAM;
   int table_size=nvram_get_table_size();
   if(table_size<0) return ERR_INVALID_TABLE_SIZE;
@@ -313,10 +353,12 @@
 #endif
       memcpy(new_table+offset,old_table+offset+strlen(key_name)+value_size+3,rest_length);
     }
-    sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    //sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    err=shm_rw(new_table,new_table_size,SHARED_MEM_SIZE-4-new_table_size,SHM_WRITE);
     nvram_set_table_size(new_table_size);
     free(old_table);
     free(new_table);
+    if(err) return err;
     return 0;
   }
   else if(offset==ERR_VALUE_NOT_FOUND)
@@ -366,7 +408,7 @@
       while(ptr<table+table_size)
       {
         key_length=(unsigned char) *ptr;
-        if(key_length<0 || key_length>MAX_KEY_LENGTH) return ERR_INCONSISTENT_TABLE;
+        if(key_length<1) return ERR_INCONSISTENT_TABLE;
         memcpy(pos,ptr+1,key_length);
         pos+=key_length;
 #ifdef DEBUG
@@ -377,7 +419,7 @@
 #ifdef DEBUG
         printf("nvram_get_info: %hhx %hhx value_size=%hd\n",ptr,ptr+1,value_size);
 #endif
-        if(value_size<0 || value_size>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
+        if(value_size>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
         if(!keys_only){
           memcpy(pos,ptr+1+key_length+sizeof(value_size),value_size);
           pos+=value_size;
@@ -391,3 +433,8 @@
     }
   }
 }
+
+int nvram_commit()
+{
+  return shm_commit();
+}
diff -urNa dev_tree/bs_extra/nvram/src/nvram.c~ dev_tree_new/bs_extra/nvram/src/nvram.c~
--- dev_tree/bs_extra/nvram/src/nvram.c~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/nvram.c~	2008-06-06 16:34:02.000000000 +0200
@@ -1,7 +1,20 @@
 /*
-written by Patrick schmidt (2007)
-
-*/
+ * Copyright (C) 2008 Patrick Schmidt (Patrick.Schmidt@hftl.de)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #include <stdio.h>
 #include <unistd.h>
@@ -16,13 +29,22 @@
 
 #include "board_api.h"
 #include "nvram.h"
+#include "shared_mem.h"
 
 //returns size of nvram_table, size is a 4 byte value at the end of psi_mem
 int nvram_get_table_size()
 {
+#ifdef DEBUG
+  printf("nvram_get_table_size()\n");
+#endif
+  int err;
   //die letzten vier Byte geben die Größe der Table an
   int table_size=-1;
-  sysPersistentGet((char*)&table_size,4,PSI_SIZE-4);
+  //sysPersistentGet((char*)&table_size,4,PSI_SIZE-4);
+  err=shm_rw((char*)&table_size,4,SHARED_MEM_SIZE-4,SHM_READ);
+#ifdef DEBUG
+  printf("nvram_get_table_size() read size=%d\n",table_size);
+#endif
   if(table_size<0 || table_size>MAX_TABLE_SIZE) return ERR_INVALID_TABLE_SIZE;
   else return table_size;
 }
@@ -34,32 +56,37 @@
   printf("nvram_set_table_size=%d\n",table_size);
 #endif
   if(table_size<0 || table_size>MAX_TABLE_SIZE) return ERR_INVALID_TABLE_SIZE;
-  sysPersistentSet((char*)&table_size,4,PSI_SIZE-4);
-  return 0;
+  //sysPersistentSet((char*)&table_size,4,PSI_SIZE-4);
+  return shm_rw((char*)&table_size,4,SHARED_MEM_SIZE-4,SHM_WRITE);
 }
 
 //Resets the whole nvram_table including the table_size with 0
 int nvram_reset()
 {
   char *buf=NULL;
+  int err;
   buf=malloc(MAX_TABLE_SIZE+4);
   if(!buf) return ERR_MALLOC;
   memset(buf,255,MAX_TABLE_SIZE+4);
-  sysPersistentSet(buf,MAX_TABLE_SIZE+4,PSI_SIZE-(MAX_TABLE_SIZE+4));
+  //sysPersistentSet(buf,MAX_TABLE_SIZE+4,PSI_SIZE-(MAX_TABLE_SIZE+4));
+  err=shm_rw(buf,MAX_TABLE_SIZE+4,0,SHM_WRITE);
   free(buf);
   nvram_set_table_size(0);
-  return 0;
+  return err;
 }
 
 //prints the whole psi_mem into buf if buf_size is big enough
 int nvram_dump(char *buf,int buf_size)
 {
+  int err,table_size, offset;
 #ifdef DEBUG
   printf("nvram_dump...\n");
 #endif
-  if(!buf || buf_size<0) return ERR_UNDEFINED_PARAM;
+  if(!buf || buf_size<0 || buf_size<PSI_SIZE) return ERR_UNDEFINED_PARAM;
   sysPersistentGet(buf,buf_size,0);
-  return 0;
+  table_size=nvram_get_table_size();
+  err=shm_rw(buf+SHARED_MEM_SIZE,SHARED_MEM_SIZE,0,SHM_READ);
+  return err;
 }
 
 //prints the whole nvram_table into buf if buf_size is big enough
@@ -71,8 +98,9 @@
   if(!buf || buf_size<0) return ERR_UNDEFINED_PARAM;
   int table_size=nvram_get_table_size();
   if(table_size<0) return table_size;
-  sysPersistentGet(buf,buf_size,PSI_SIZE-4-table_size);
-  return 0;
+  //sysPersistentGet(buf,buf_size,PSI_SIZE-4-table_size);
+  if(buf_size<table_size) return 0;
+  return shm_rw(buf,buf_size,SHARED_MEM_SIZE-(table_size+4),SHM_READ);
 }
 
 //copies value to a given key_name to buf, return=table_offset which points to key_length
@@ -104,24 +132,24 @@
   while(pos<table_buf+table_size)
   {
 #ifdef DEBUG
-    printf("key_length=%hd\n",*pos);
+    printf("key_length=%d\n",*pos);
 #endif
     key_length=(unsigned char) *pos;
-    if(key_length<1 || key_length>MAX_KEY_LENGTH) return ERR_INCONSISTENT_TABLE;
+    if(key_length<1) return ERR_INCONSISTENT_TABLE;
     snprintf(key_buf,key_length+1,"%s\0",pos+1);
 #ifdef DEBUG
     printf("key_buf=%s\n",key_buf);
 #endif
     //value_length=(unsigned short int) *(pos+1+key_length);
     memcpy(&value_length,pos+1+key_length,sizeof(value_length));
-    if(value_length<0 || value_length>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
+    if(value_length>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
 #ifdef DEBUG
-    printf("value_length: %hd\n",value_length);
+    printf("value_length: %d\n",value_length);
 #endif
     //right key found
     if(strcmp(key_buf,key_name)==0)
     {
-      if(buf_size<value_length+1) return ERR_BUF_SIZE_TOO_SMALL;
+      if(*buf_size<value_length+1) return ERR_BUF_SIZE_TOO_SMALL;
       memcpy(buf,pos+1+key_length+2,value_length);
       buf[value_length]='\0';
       *buf_size=value_length;
@@ -150,6 +178,7 @@
   int table_size=nvram_get_table_size();
   if(table_size<0) return table_size;
 
+  int err;
   char temp[MAX_VALUE_SIZE+1];
   unsigned int old_value_size=MAX_VALUE_SIZE;
   int offset=nvram_get_value(key_name,temp,&old_value_size);
@@ -170,6 +199,13 @@
     if(old_value_size>value_length)
     {
       new_table_size=table_size-(old_value_size-value_length);
+      if(new_table_size>MAX_TABLE_SIZE)
+      {
+#ifdef DEBUG
+        printf("nvram_set_value() error new_table_size=%d is too big\n",new_table_size);
+#endif
+        return -1;
+      }
 #ifdef DEBUG
       printf("nvram_set_value: shrinking value from length=%d to length=%d with new_table_size=%d\n",old_value_size,value_length,new_table_size);
 #endif
@@ -187,8 +223,10 @@
     {
       //sprintf(old_table+offset,"%s=%s;",key_name,buf);
       memcpy(old_table+offset+1+strlen(key_name)+2,value,value_length);
-      sysPersistentSet(old_table,table_size,PSI_SIZE-4-table_size);
+      //sysPersistentSet(old_table,table_size,PSI_SIZE-4-table_size);
+      err=shm_rw(old_table,table_size,SHARED_MEM_SIZE-(table_size+4),SHM_WRITE);
       free(old_table);
+      if(err) return err;
       return 0;
     }
     new_table=malloc(new_table_size);
@@ -225,17 +263,19 @@
       memcpy(new_table+offset+1+strlen(key_name)+2+value_length,old_table+offset+1+strlen(key_name)+2+old_value_size,rest_length);
     }
     //printf("new_table_start_char=%c, new_table_offset=%d\n",*new_table,PSI_SIZE-4-new_table_size);
-    sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    //sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    err=shm_rw(new_table,new_table_size,SHARED_MEM_SIZE-4-new_table_size,SHM_WRITE);
     nvram_set_table_size(new_table_size);
     free(old_table);
     free(new_table);
+    if(err) return err;
     return 0;
   }
   //really new value
   else if(offset==ERR_VALUE_NOT_FOUND)
   {
 #ifdef DEBUG
-     printf("nvram_set_value: creating new value...\n");
+    printf("nvram_set_value: creating new value with key_len=%d, value_len=%d\n",strlen(key_name),value_length);
 #endif
      char *target;
      int target_size=strlen(key_name)+value_length+3;
@@ -264,9 +304,21 @@
      target[target_size]='\0';
      printf("nvram_set_value: saving target:%s at byte-offset=%d with length=%d\n",target,PSI_SIZE-4-table_size-target_size,target_size);
 #endif
-     sysPersistentSet(target,target_size,PSI_SIZE-4-table_size-target_size);
+     //sysPersistentSet(target,target_size,PSI_SIZE-4-table_size-target_size);
+     if(table_size+target_size>MAX_TABLE_SIZE)
+     {
+#ifdef DEBUG
+       printf("nvram_set_value() error new_table_size=%d is too big\n",table_size+target_size);
+#endif
+       err=-1;
+       goto out;
+     }
+     err=shm_rw(target,target_size,SHARED_MEM_SIZE-4-table_size-target_size,SHM_WRITE);
      nvram_set_table_size(table_size+target_size);
+out:
      free(target);
+     if(err) return err;
+     return 0;
   }
   //error
   else return offset;
@@ -274,6 +326,7 @@
 
 int nvram_del_value(char *key_name)
 {
+  int err;
   if(!key_name) return ERR_UNDEFINED_PARAM;
   int table_size=nvram_get_table_size();
   if(table_size<0) return ERR_INVALID_TABLE_SIZE;
@@ -300,10 +353,12 @@
 #endif
       memcpy(new_table+offset,old_table+offset+strlen(key_name)+value_size+3,rest_length);
     }
-    sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    //sysPersistentSet(new_table,new_table_size,PSI_SIZE-4-new_table_size);
+    err=shm_rw(new_table,new_table_size,SHARED_MEM_SIZE-4-new_table_size,SHM_WRITE);
     nvram_set_table_size(new_table_size);
     free(old_table);
     free(new_table);
+    if(err) return err;
     return 0;
   }
   else if(offset==ERR_VALUE_NOT_FOUND)
@@ -335,6 +390,7 @@
     if(table_size==0)
     {
       sprintf(pos,"no values in table\n\n\0");
+      *buf_size=0;
       return 0;
     }
     else
@@ -352,7 +408,7 @@
       while(ptr<table+table_size)
       {
         key_length=(unsigned char) *ptr;
-        if(key_length<0 || key_length>MAX_KEY_LENGTH) return ERR_INCONSISTENT_TABLE;
+        if(key_length<1) return ERR_INCONSISTENT_TABLE;
         memcpy(pos,ptr+1,key_length);
         pos+=key_length;
 #ifdef DEBUG
@@ -363,7 +419,7 @@
 #ifdef DEBUG
         printf("nvram_get_info: %hhx %hhx value_size=%hd\n",ptr,ptr+1,value_size);
 #endif
-        if(value_size<0 || value_size>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
+        if(value_size>MAX_VALUE_SIZE) return ERR_INCONSISTENT_TABLE;
         if(!keys_only){
           memcpy(pos,ptr+1+key_length+sizeof(value_size),value_size);
           pos+=value_size;
@@ -377,3 +433,8 @@
     }
   }
 }
+
+int nvram_commit()
+{
+  return shm_commit();
+}
diff -urNa dev_tree/bs_extra/nvram/src/nvram.h dev_tree_new/bs_extra/nvram/src/nvram.h
--- dev_tree/bs_extra/nvram/src/nvram.h	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/nvram.h	2008-06-06 16:34:02.000000000 +0200
@@ -46,5 +46,6 @@
 int nvram_set_value(char *key_name,char *value,int value_length);
 int nvram_del_value(char *key_name);
 int nvram_get_info(char *buf,int *buf_size, char keys_only);
+int nvram_commit();
 
 #endif
diff -urNa dev_tree/bs_extra/nvram/src/nvram.h~ dev_tree_new/bs_extra/nvram/src/nvram.h~
--- dev_tree/bs_extra/nvram/src/nvram.h~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/nvram/src/nvram.h~	1970-01-01 01:00:00.000000000 +0100
@@ -1,37 +0,0 @@
-/*
-written by Patrick schmidt (2007)
-
-*/
-
-#if !defined(_NVRAM_H_)
-#define _NVRAM_H_
-
-#define PSI_SIZE 32767
-#define MAX_TABLE_SIZE 16383
-#define MAX_KEY_LENGTH 255
-#define MAX_VALUE_SIZE 16383
-
-#define ERR_INVALID_TABLE_SIZE -1
-#define ERR_MALLOC -2
-#define ERR_VALUE_NOT_FOUND -3
-#define ERR_UNDEFINED_PARAM -4
-#define ERR_INCONSISTENT_VALUE -5
-#define ERR_BUF_SIZE_TOO_SMALL -6
-#define ERR_VALUE_CONTAINS_SEPERATOR -7
-#define ERR_VALUE_TO_LONG -8
-#define ERR_INCONSISTENT_TABLE -9
-
-#define ERR_UNDEFINED -127
-
-
-int nvram_get_table_size();
-int nvram_set_table_size(int table_size);
-int nvram_reset();
-int nvram_dump(char *buf,int buf_size);
-int nvram_dump_table(char *buf,int buf_size);
-int nvram_get_value(char *key_name,char *buf,unsigned int *buf_size);
-int nvram_set_value(char *key_name,char *value,int value_length);
-int nvram_del_value(char *key_name);
-int nvram_get_info(char *buf,int *buf_size, char keys_only);
-
-#endif
diff -urNa dev_tree/bs_extra/nvram/src/shared_mem.c dev_tree_new/bs_extra/nvram/src/shared_mem.c
--- dev_tree/bs_extra/nvram/src/shared_mem.c	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/nvram/src/shared_mem.c	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2008 Patrick Schmidt (coolman1982@users.sourceforge.net)
+ * 		      Michael Finsterbusch (fibu@users.sourceforge.net)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/sem.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "shared_mem.h"
+#include "board_api.h"
+
+int shm_id=0;
+char *shm_buf=NULL;
+int lock=-1;
+
+//init global lock_semaphore
+static int sem_init()
+{
+#ifdef DEBUG
+  printf("sem_init()\n");
+#endif
+  int err,init=1;
+  err=semget(SEMAPHORE_KEY,1,IPC_CREAT|IPC_EXCL|SHM_R|SHM_W);
+  if(errno==EEXIST)
+  {
+#ifdef DEBUG
+    printf("sem_init() semaphore exists, getting id\n");
+#endif
+    err=semget(SEMAPHORE_KEY,1,SHM_R|SHM_W);
+    init=0;
+  }
+  if(err==-1)
+    goto err;
+  
+  lock=err;
+  if(init)
+    err=semctl(lock,0,SETVAL,(int) 1);
+  if(err<0)
+    goto err;
+  
+  return 0;
+err:
+    perror("sem_init()");
+    return err;
+}
+
+#ifdef DEBUG
+
+void shm_force_unlock()
+{
+  int err;
+  printf("shm_force_unlock()\n");
+  if(lock==-1)
+  {
+    err=sem_init();
+    if(err) printf("shm_force_unlock() failed\n");
+    goto err;
+  }
+  semctl(lock,0,SETVAL,(int) 1);
+err:
+  return;
+}
+#endif
+
+//lock semaphore
+static int sem_lock()
+{
+  if(lock==-1) return -1;
+  struct sembuf op_lock[1] ={ 0, -1, SEM_UNDO };
+  return semop(lock, &op_lock[0], 1);
+}
+
+//unlock semaphore
+static int sem_unlock()
+{
+  if(lock==-1) return -1;
+  struct sembuf op_unlock[1] ={ 0, 1, SEM_UNDO };
+  return semop(lock, &op_unlock[0], 1);
+}
+
+//init shared_mem
+int shm_init()
+{
+  int err,init;
+  init=1;
+#ifdef DEBUG
+  printf("shm_init()\n");
+#endif
+  err=shmget(SHARED_MEM_KEY,SHARED_MEM_SIZE,IPC_CREAT|IPC_EXCL);
+  //check if already exists
+  if(errno==EEXIST)
+  {
+#ifdef DEBUG
+    printf("shm_init() shared_mem exists, trying to get id\n");
+#endif
+    err=shmget(SHARED_MEM_KEY,SHARED_MEM_SIZE,0);
+    init=0;
+  }
+  if(err==-1)
+  {
+#ifdef DEBUG
+    printf("shm_init() shmget() failed\n");
+#endif
+    goto err;
+  }
+  
+  shm_id=err;
+  struct shmid_ds shm_info;
+  err=shmctl(shm_id,SHM_LOCK,&shm_info);
+  if(err<0)
+  {
+#ifdef DEBUG
+    printf("shm_init() shmctl() failed\n");
+#endif
+    goto err;
+  }
+  
+  shm_buf=(char*)shmat(shm_id,NULL,0);
+  if(!shm_buf)
+  {
+#ifdef DEBUG
+    printf("shm_init() shmat() failed\n");
+#endif
+    goto err;
+  }
+  
+  //now initialize if necessary and copy nvram-table to shared mem
+  if(init)
+    sysPersistentGet(shm_buf,MAX_TABLE_SIZE+4,PSI_SIZE-4-MAX_TABLE_SIZE);
+  return 0;
+err:
+  perror("shm_init()");
+  return err;
+}
+
+void shm_deinit()
+{
+  if(shm_id && shm_buf)
+    shmdt(shm_buf);
+}
+
+int shm_rw(char *buf, int len, int offset, char mode)
+{
+  int err;
+#ifdef DEBUG
+  printf("shm_rw() len=%d, offset=%d,mode=%d, shared_mem_size=%d\n",len,offset,mode,SHARED_MEM_SIZE);
+#endif
+  if(shm_id==-1 || !shm_buf)
+  {
+#ifdef DEBUG
+    printf("shm_rw() error shared_mem not initialized, shm_id=%d, shm_buf=%x\n",shm_id,shm_buf);
+#endif
+    return -1;
+  }
+   if(offset>SHARED_MEM_SIZE)
+   {
+#ifdef DEBUG
+     printf("shm_rw() error: invalid offset\n");
+#endif
+     return -1;
+   }
+  if(len+offset>SHARED_MEM_SIZE)
+    len=SHARED_MEM_SIZE-offset;
+#ifdef DEBUG
+  printf("shm_rw() len=%d, offset=%d,mode=%d\n",len,offset,mode);
+#endif
+  if(lock==-1)
+  {
+    err=sem_init();
+    if(err) return err;
+  }
+  err=sem_lock();
+  if(err) return err;
+  if(mode==SHM_WRITE)
+    memcpy(shm_buf+offset,buf,len);
+  else memcpy(buf,shm_buf+offset,len);
+  err=sem_unlock();
+  if(err)
+  {
+    perror("shm_rw()");
+    return err;
+  }
+  return 0;
+}
+
+int shm_commit()
+{
+#ifdef DEBUG
+  printf("shm_commit()\n");
+#endif
+  int tablesize,err;
+  if(shm_id==-1 || !shm_buf)
+  {
+#ifdef DEBUG
+    printf("shm_commit() error shared_mem not initialized\n");
+#endif
+    return -1;
+  }
+  if(lock==-1)
+  {
+    err=sem_init();
+    if(err) return err;
+  }
+  memcpy(&tablesize,shm_buf+(SHARED_MEM_SIZE-4),4);
+  err=sem_lock();
+  if(err) return err;
+  sysPersistentSet(shm_buf+(SHARED_MEM_SIZE-4-tablesize),tablesize+4,PSI_SIZE-4-tablesize);
+  err=sem_unlock();
+  if(err)
+  {
+    perror("shm_commit()");
+    return err;
+  }
+  
+  return 0;
+}
+
+int shm_reload()
+{
+#ifdef DEBUG
+  printf("shm_reload()\n");
+#endif
+  int err;
+  if(!shm_id || !shm_buf)
+  {
+#ifdef DEBUG
+    printf("shm_reload() error shared_mem not initialized\n");
+#endif
+    return -1;
+  }
+  if(!lock)
+  {
+    err=sem_init();
+    if(err) return err;
+  }
+  err=sem_lock();
+  if(err) return err;
+  sysPersistentGet(shm_buf,MAX_TABLE_SIZE+4,PSI_SIZE-4-MAX_TABLE_SIZE);
+  err=sem_unlock();
+  if(err)
+  {
+    perror("shm_reload()");
+    return err;
+  }
+
+  return 0;
+}
+
+
diff -urNa dev_tree/bs_extra/nvram/src/shared_mem.h dev_tree_new/bs_extra/nvram/src/shared_mem.h
--- dev_tree/bs_extra/nvram/src/shared_mem.h	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/nvram/src/shared_mem.h	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2008 Patrick Schmidt (coolman1982@users.sourceforge.net)
+ * 		      Michael Finsterbusch (fibu@users.sourceforge.net)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+#if !defined(_SHARED_MEM_H_)
+#define _SHARED_MEM_H_ 
+
+#include "nvram.h"
+
+#define SHARED_MEM_KEY 979797
+#define SEMAPHORE_KEY 797979
+
+#define SHARED_MEM_SIZE MAX_TABLE_SIZE+4
+#define SHM_READ 0
+#define SHM_WRITE 1
+
+//init shared_mem
+int shm_init();
+//deinit shared mem
+void shm_deinit();
+//read from or write to shared_mem, mode could be SHM_READ or SHM_WRITE
+int shm_rw(char *buf, int len, int offset, char mode);
+//sync shared_mem with PSI
+int shm_commit();
+//reloads shared_mem from nvram, should be used when someone directly wrotes to nvram
+int shm_reload();
+#ifdef DEBUG
+//forces unlock of rw-semaphore
+#endif
+void shm_force_unlock();
+#endif //_SHARED_MEM_H_
+
diff -urNa dev_tree/bs_extra/profile dev_tree_new/bs_extra/profile
--- dev_tree/bs_extra/profile	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/profile	2008-06-06 16:34:02.000000000 +0200
@@ -20,7 +20,7 @@
  insmod /lib/modules/$KERNELVER/extra/bcm_usb.ko
  test -e /lib/modules/$KERNELVER/extra/wl.ko && insmod /lib/modules/$KERNELVER/extra/wl.ko
  test -e /lib/modules/$KERNELVER/extra/endpointdd.ko && insmod /lib/modules/$KERNELVER/extra/endpointdd.ko
- cfm
+ cfm >/dev/null 2>/dev/null </dev/pty/9 &
  echo "Done"
 fi
 
diff -urNa dev_tree/bs_extra/profile~ dev_tree_new/bs_extra/profile~
--- dev_tree/bs_extra/profile~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/profile~	1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-
-PATH=/bin:/sbin:/usr/bin
-KERNELVER=2.6.8.1
-export PATH
-echo
-firsttime=`echo /var/udhcpd/udhcpd.lease*`
-if [ "$firsttime" = "/var/udhcpd/udhcpd.lease*" ]; then
- echo "Loading drivers and kernel modules... "
- echo
- # no-op
- # create directory in /var mounted for TMPFS
- mkdir -p /var/log /var/run /var/state/dhcp /var/ppp /var/udhcpd /var/zebra /var/siproxd
- echo > /var/udhcpd/udhcpd.leases
- ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255 up
- # /etc/modules_install /lib/modules/$KERNELVER/extra
- insmod /lib/modules/$KERNELVER/extra/atmapi.ko
- insmod /lib/modules/$KERNELVER/extra/blaadd.ko
- insmod /lib/modules/$KERNELVER/extra/adsldd.ko
- insmod /lib/modules/$KERNELVER/extra/bcmprocfs.ko
- insmod /lib/modules/$KERNELVER/extra/bcm_enet.ko
- insmod /lib/modules/$KERNELVER/extra/bcm_usb.ko
- test -e /lib/modules/$KERNELVER/extra/wl.ko && insmod /lib/modules/$KERNELVER/extra/wl.ko
- test -e /lib/modules/$KERNELVER/extra/endpointdd.ko && insmod /lib/modules/$KERNELVER/extra/endpointdd.ko
- cfm
- echo "Done"
-fi
-
-export PATH='/sbin:/bin:/usr/bin:/usr/sbin'
-export PS1='\[\033[00;32m\]\u\[\033[00m\]@\[\033[01;31m\]\h\[\033[00m\]:\[\033[01;34m\]\w #\[\033[00m\]'
diff -urNa dev_tree/bs_extra/start_scripts/call_mon.sh dev_tree_new/bs_extra/start_scripts/call_mon.sh
--- dev_tree/bs_extra/start_scripts/call_mon.sh	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/start_scripts/call_mon.sh	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,58 @@
+#!/bin/sh
+#
+# Start/stops vodsl call monitor
+#
+#
+PATH=/bin/:$PATH
+
+case "$1" in
+	start)
+	        echo "Starting vodsl call monitor"
+		autostart=`nvram get vodsl_monitor`
+                if [ "$autostart" != "Failed" ]; then
+                  start=$autostart
+                else
+                  nvram set vodsl_monitor=1 >/dev/null
+                  start="1"
+                fi
+		if [ "$start" = "1" ]; then
+		  server_start=`nvram get call_mon_start`
+		  server_port=`nvram get call_mon_port`
+		  server=""
+		  if [ "$server_port" != "Failed" ]; then
+ 		    server_port="-p $server_port"
+		  else
+		    server_port=""
+		  fi
+		  if [ "$server_start" = "1" ]; then
+		    server=$server_port
+		  else
+		    server="-n"
+		  fi
+
+		  vodsl_monitor -s /usr/bin/call_mon_event.sh $server -D
+		fi
+		;;
+	stop)
+	        echo "Stopping vodsl call monitor"
+		killall vodsl_monitor >/dev/null 2>/dev/null
+		i=0
+		while [ "`pidof vodsl_monitor`" -ne 0 ]
+		do
+		  [ $i -ge 10 ] && killall -9 vodsl_monitor
+		  let i=$i+1
+		  usleep 100000
+		done
+		;;
+	restart)
+		$0 stop
+		sleep 1
+		$0 start
+		;;
+	*)
+		echo "Usage: /etc/start_scripts/call_mon.sh {start|stop|restart}"
+		exit 1
+		;;
+esac
+
+exit 0
diff -urNa dev_tree/bs_extra/start_scripts/custom.sh dev_tree_new/bs_extra/start_scripts/custom.sh
--- dev_tree/bs_extra/start_scripts/custom.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/custom.sh	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -12,7 +13,8 @@
                 if [ "$autostart" != "Failed" ]; then
                   custom_start=$autostart
                 else
-                  `/bin/nvram set custom_start=0`
+                  /bin/nvram set custom_start=0 >/dev/null
+                  must_save=1
                   custom_start="0"
                 fi
 		if [ "$custom_start" = "1" ]; then
@@ -20,6 +22,7 @@
 		  /bin/sh /var/custom_script.sh
 		  #rm -f /var/custom.sh
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Custom script cant be stopped"
diff -urNa dev_tree/bs_extra/start_scripts/disconnect.sh dev_tree_new/bs_extra/start_scripts/disconnect.sh
--- dev_tree/bs_extra/start_scripts/disconnect.sh	2008-04-11 15:18:34.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/disconnect.sh	2008-06-06 16:34:02.000000000 +0200
@@ -9,6 +9,8 @@
 standard_delay=10
 CRONDIR="/var/spool/cron/crontabs/"
 
+must_save=0
+
 case "$1" in
 	start)
 	        echo "Setting disconnect"
@@ -17,36 +19,48 @@
                   disconnect_start=$autostart
                 else
                   /bin/nvram set disconnect_start=$standard_start >/dev/null
+                  must_save=1
                   disconnect_start="$standard_start"
                 fi
+                autostart=`/bin/nvram get disconnect_reboot`
+                if [ "$autostart" != "Failed" ]; then
+                  disconnect_reboot=$autostart
+                fi
 		if [ "$disconnect_start" = "1" ]; then
 		  hour=`/bin/nvram get disconnect_hour`
 		  if [ $hour -lt 0 ] || [ $hour -gt 23 ] || [ "$hour" = "Failed" ]; then
 		    echo "invalid value for disconnect_hour...setting standard value=$standard_hour\n"
 		    /bin/nvram set disconnect_hour=$standard_hour >/dev/null
+		    must_save=1
 		    hour=$standard_hour
 		  fi
                   minute=`/bin/nvram get disconnect_minute`
 		  if [ $minute -lt 0 ] || [ $minute -gt 59 ] || [ "$minute" = "Failed" ]; then
 		    echo "invalid value for disconnect_minute...setting standard value=$standard_minute\n"
 		    /bin/nvram set disconnect_minute=$standard_minute >/dev/null
+		    must_save=1
 		    minute=$standard_minute
 		  fi
                   delay=`/bin/nvram get disconnect_delay`
 		  if [ $delay -lt 1 ] || [ $delay -gt 3600 ] || [ "$delay" = "Failed" ]; then
 		    echo "invalid value for disconnect_delay...setting standard value=$standard_delay\n"
 		    /bin/nvram set disconnect_delay=$standard_delay >/dev/null
+		    must_save=1
 		    delay=$standard_delay
 		  fi
-
                   IP="ifconfig br0|grep \"inet addr\"|sed -n -e 's/^.*addr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*Bcast.*/\1/p'"
                   WGET="wget -O /dev/null http://\`$IP\`/cgi-bin"
                   mkdir -p $CRONDIR
                   #cronjob einfügen
-                  echo "$minute $hour * * * $WGET/disconnect.exe; sleep $delay; $WGET/connect.exe;" > $CRONDIR/root
+                  if [ "$disconnect_reboot" = "1" ]; then
+                    echo "$minute $hour * * * /bin/nvram reboot" > $CRONDIR/root
+                  else
+                    echo "$minute $hour * * * $WGET/disconnect.exe; sleep $delay; $WGET/connect.exe;" > $CRONDIR/root
+                  fi
                   #crond starten
                   crond
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping disconnect"
diff -urNa dev_tree/bs_extra/start_scripts/firewall.sh dev_tree_new/bs_extra/start_scripts/firewall.sh
--- dev_tree/bs_extra/start_scripts/firewall.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/firewall.sh	2008-06-06 16:34:02.000000000 +0200
@@ -1,12 +1,14 @@
 #!/bin/sh
 #
 # Start/stops firewall rules for telnetd, sshd and stproxy
+must_save=0
 
 rule=`/bin/nvram get telnet_fw_open`
 if [ "$rule" != "Failed" ]; then
   telnet_open="$rule"
 else
   `/bin/nvram set telnet_fw_open=0 >/dev/null`
+  must_save=1
   telnet_open="0"
 fi
 rule=`/bin/nvram get ssh_fw_open`
@@ -14,6 +16,7 @@
   ssh_open="$rule"
 else
   `/bin/nvram set ssh_fw_open=1 >/dev/null`
+  must_save=1
   ssh_open="1"
 fi
 ssh_port=`/bin/nvram get ssh_port`
@@ -25,6 +28,7 @@
   stproxy_open="$rule"
 else
   `/bin/nvram set stproxy_fw_open=0 >/dev/null`
+  must_save=1
   stproxy_open="0"
 fi
 rule=`/bin/nvram get stproxyadmin_fw_open`
@@ -32,8 +36,13 @@
   stproxyadmin_open="$rule"
 else
   `/bin/nvram set stproxyadmin_fw_open=0 >/dev/null`
+  must_save=1
   stproxyadmin_open="0"
 fi
+
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] /bin/nvram commit >/dev/null
+
+
 stproxy_port=8080
 stproxy_admin_port=6767
 test -r /var/stproxy.conf
diff -urNa dev_tree/bs_extra/start_scripts/lan.sh dev_tree_new/bs_extra/start_scripts/lan.sh
--- dev_tree/bs_extra/start_scripts/lan.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/lan.sh	2008-06-06 16:34:02.000000000 +0200
@@ -26,7 +26,7 @@
 		$0 start
 		;;
 	*)
-		echo "Usage: /etc/start_scripts/lan {start|stop|restart}"
+		echo "Usage: /etc/start_scripts/lan.sh {start|stop|restart}"
 		exit 1
 		;;
 esac
diff -urNa dev_tree/bs_extra/start_scripts/startscript.sh dev_tree_new/bs_extra/start_scripts/startscript.sh
--- dev_tree/bs_extra/start_scripts/startscript.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/startscript.sh	2008-06-06 16:34:02.000000000 +0200
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ledtool 1 4
-
+export STARTUP=1
 /etc/start_scripts/telnet.sh start
 sleep 5
 /etc/start_scripts/ssh.sh start
@@ -26,9 +26,12 @@
 /etc/start_scripts/voip.sh start
 /etc/start_scripts/ata.sh start
 /etc/start_scripts/disconnect.sh start
+/etc/start_scripts/call_mon.sh start
 ledtool 3 0
 sleep 30
 /etc/start_scripts/firewall.sh start
 /etc/start_scripts/custom.sh start
 /bin/thttpd -nos -p 81 -d /webs -c '**.cgi' -l /dev/null -i /var/run/thttpd.pid
 ledtool 1 0
+/bin/nvram commit >/dev/null
+export STARTUP=0
diff -urNa dev_tree/bs_extra/start_scripts/telnet.sh dev_tree_new/bs_extra/start_scripts/telnet.sh
--- dev_tree/bs_extra/start_scripts/telnet.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/start_scripts/telnet.sh	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -13,11 +14,13 @@
                   telnet_start=$autostart
                 else
                   `/bin/nvram set telnet_start=1`
+                  must_save=1
                   telnet_start="1"
                 fi
 		if [ "$telnet_start" = "1" ]; then
 		  /usr/sbin/telnetd
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping telnetd"
diff -urNa dev_tree/bs_extra/stproxy/src/auth.c~ dev_tree_new/bs_extra/stproxy/src/auth.c~
--- dev_tree/bs_extra/stproxy/src/auth.c~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/src/auth.c~	1970-01-01 01:00:00.000000000 +0100
@@ -1,609 +0,0 @@
-/*
- * Copyright (C) 2007 Adam Hurkala (ahurkala@gmail.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "common.h"
-#include "debug.h"
-#include "auth.h"
-#include "md5.h"
-#include "strutils.h"
-//#include <unistd.h>
-
-
-const char my_passwd_file[512+1];
-char *cmd;
-char **cmd_argv;
-
-static struct user *userlist, *lastuser;
-
-static int b64decode(char *str)
-{
-   char *cur, *start;
-   int d, dlast, phase;
-   unsigned char c;
-   static int table[256] = {
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
-     52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
-     -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
-     15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
-     -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
-     41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
-     -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
-   };
-
-   d = dlast = phase = 0;
-   start = str;
-   for (cur = str; *cur != '\0'; ++cur )
-   {
-      if (*cur == '\n' || *cur == '\r')
-      {
-        phase = dlast = 0;
-        continue;
-      }
-      d = table[(int)*cur];
-      if(d != -1)
-      {
-         switch(phase)
-         {
-            case 0:
-                ++phase;
-                break;
-            case 1:
-                c = ((dlast << 2) | ((d & 0x30) >> 4));
-                *str++ = c;
-                ++phase;
-                break;
-            case 2:
-                c = (((dlast & 0xf) << 4) | ((d & 0x3c) >> 2));
-                *str++ = c;
-                ++phase;
-                break;
-            case 3:
-                c = (((dlast & 0x03 ) << 6) | d);
-                *str++ = c;
-                phase = 0;
-                break;
-         }
-         dlast = d;
-      }
-   }
-   *str = '\0';
-   return str - start;
-}
-
-static char *encrypt_password(char *password)
-{
-   char salt[9];
-
-   srandom((unsigned int)time(NULL));
-   to64(salt, random(), 8);
-   salt[8] = '\0';
-   return crypt_md5(password, salt);
-}
-
-static int compare_ip(char *ip, char **ipmask)
-{
-   int i, j;
-
-   i = 0;
-   while (ipmask[i])
-   {
-      //printf("ip=%s, ip_mask=%s\n",ip,ipmask[i]);
-      if(strcmp(ipmask[i],"0.0.0.0")==0) return 1;
-      for (j = 0; ipmask[i][j] && ipmask[i][j] == ip[j]; j++);
-      if (ipmask[i][j] == '*' || (!ipmask[i][j] && !ip[j])) return 1;
-      i++;
-   }
-   return 0;
-}
-
-static int find_ip(struct user *user, char *ip)
-{
-   int i;
-
-   i = 0;
-   while (user->ipmask[i])
-   {
-      if ( (strcmp(user->ipmask[i], ip) == 0) || (strcmp(user->ipmask[i],"0.0.0.0")==0) ) return 0;
-      i++;
-   }
-   return EIPNOTFOUND;
-}
-
-static struct user *find_user(char *username)
-{
-   struct user *user;
-
-   user = userlist;
-   while (user)
-   {
-      if (strcmp(user->username, username) == 0) return user;
-      user = user->next;
-   }
-   return NULL;
-}
-
-static int valid_username(char *username)
-{
-   if (strchr(username, ':')) return 0;
-   return 1;
-}
-
-static int valid_mask(char *ip)
-{
-   int i, octets, digits;
-
-   octets = 0;
-   digits = 0;
-   for (i = 0; ip[i]; i++)
-   {
-      if (isdigit(ip[i]))
-      {
-         if (++digits == 4 || (digits == 1 && ip[i] == '0' && ip[i+1] && ip[i+1] != '.')) return 0;
-      }
-      else if (ip[i] == '*')
-      {
-         if (digits != 0 || ip[i+1]) return 0;
-         return 1;
-      }
-      else if (ip[i] == '.')
-      {
-         if (++octets == 4 || digits == 0 || (digits == 3 && 100*ip[i-3]+10*ip[i-2]+ip[i-1]-5328 > 255)) return 0;
-         digits = 0;
-      }
-      else return 0;
-   }
-   if (++octets != 4 || digits == 0 || (digits == 3 && 100*ip[i-3]+10*ip[i-2]+ip[i-1]-5328 > 255)) return 0;
-   return 1;
-}
-
-int load_db(char *passwd_file)
-{
-   FILE *f;
-   char buf[MAX_LINE_LENGTH+1];
-
-   print("Loading user db");
-   strcpy(my_passwd_file,PASSWD_FILE);
-   if(passwd_file==NULL) f = fopen(PASSWD_FILE, "r");
-   else
-   {
-     if(strlen(passwd_file)>512) return ECORRUPTDB;
-     strcpy(my_passwd_file,passwd_file);
-     f = fopen(passwd_file, "r");
-   }
-   if (!f)
-   {
-      int i, res;
-      char *ip[] = {ADMIN_MASK};
-
-      if (errno != ENOENT) return EOPENDB;
-      res = add_user(ADMIN_USER, ADMIN_PASS, SUPER_USER, 1);
-      if (res != 0) return EADDTODB;
-      i = 0;
-      while (ip[i])
-      {
-         res = add_ip(ADMIN_USER, ip[i]);
-         if (res != 0)
-         {
-            delete_user(ADMIN_USER);
-            return EADDTODB;
-         }
-         i++;
-      }
-      return update_db(1);
-   }
-   while (fgets(buf, MAX_LINE_LENGTH + 1, f))
-   {
-      int i, count, res, len;
-      char *user, *pass, *authority, *ipmask[MAX_IP_COUNT+1];
-      char *s;
-
-      user = NULL;
-      pass = NULL;
-      authority = NULL;
-      for (i = 0; i < MAX_IP_COUNT + 1; i++) ipmask[i] = NULL;
-      len = strlen(buf);
-      init_tokenizer(buf, NULL, len);
-      if (!parse_line())
-      {
-         if (feof(f))
-         {
-            init_tokenizer(buf, NULL, len + 1); 
-            parse_string();
-         }
-         else
-         {
-            fclose(f);
-            return ECORRUPTDB;
-         }
-      }
-      i = 0;
-      count = 0;
-      while ((s = get_token()))
-      {
-         if (i == 0)
-         {
-            if (strlen(s) == 0) break;
-            user = s;
-         }
-         else if (i == 1) authority = s;
-         else if (i == 2) pass = s;
-         else if (count < MAX_IP_COUNT) ipmask[count++] = s;
-         i++;
-      }
-      if (user && authority && pass)
-      {
-         res = add_user(user, pass, atoi(authority), 0);
-         if (res != 0)
-         {
-            fclose(f);
-            return EADDTODB;
-         }
-         for (i = 0; i < count; i++)
-         {
-            res = add_ip(user, ipmask[i]);
-            if (res != 0)
-            {
-               fclose(f);
-               return EADDTODB;
-            } 
-         }
-      }
-      else if (user)
-      {
-         fclose(f);
-         return ECORRUPTDB;
-      }
-   }
-   if (!feof(f))
-   {
-      fclose(f);
-      return EREADDB;
-   } 
-   fclose(f);
-   return 0;
-}
-
-int update_db(int rebuild)
-{
-   struct user *user;
-   int i;
-   FILE *f;
-
-   print("Updating user db");
-   if (rebuild) f = fopen(my_passwd_file, "w");
-   else f = fopen(my_passwd_file, "a");
-   if (!f)
-   {
-      printerror("Cannot update user db");
-      return EUPDATEDB;
-   }
-   if (rebuild) user = userlist;
-   else user = lastuser;
-   while (user)
-   {
-      i = 0;
-      fprintf(f, "%s %d %s", user->username, user->authority, user->password);
-      while (user->ipmask[i]) fprintf(f, " %s", user->ipmask[i++]); 
-      fprintf(f, "\n");
-      user = user->next;
-   }
-   fclose(f);
-   if(cmd!=NULL) exec_update_cmd();
-   return 0;
-}
-
-void free_db(void)
-{
-   struct user *tmp;
-   int i;
-
-   while (userlist)
-   {
-      i = 0; 
-      tmp = userlist->next;
-      while (userlist->ipmask[i]) free(userlist->ipmask[i++]);
-      free(userlist->username);
-      free(userlist->password);
-      free(userlist->ipmask);
-      free(userlist);
-      userlist = tmp;
-   }
-   lastuser = NULL;
-}
-
-int add_ip(char *username, char *ip)
-{
-   int i, len;
-   struct user *user;
-
-   print("Adding IP \"%s\" to user \"%s\"", ip, username);
-   len = strlen(username);
-   if (len < 1 || len > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   len = strlen(ip);
-   if (len < 1 || len > MAX_IP_LENGTH) return EIPLENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   if (!valid_mask(ip)) return EIPMASK;
-   user = find_user(username);
-   if (!user) return EUSERNOTFOUND;
-   //if (find_ip(user, ip) != EIPNOTFOUND) return EIPEXISTS;
-   i = 0;
-   while (user->ipmask[i]) i++;
-   if (i < MAX_IP_COUNT)
-   {
-      user->ipmask[i] = (char *)malloc((len + 1) * sizeof(char));
-      if (!user->ipmask[i]) return ENOMEMORY;
-      strcpy(user->ipmask[i], ip);
-      return 0;
-   }
-   return EIPCOUNT;
-}
-
-int delete_ip(char *username, char *ip)
-{
-   struct user *user;
-   int i, found;
-
-   print("Removing IP \"%s\" from user \"%s\"", ip, username);
-   i = strlen(username);
-   if (i < 1 || i > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   i = strlen(ip);
-   if (i < 1 || i > MAX_IP_LENGTH) return EIPLENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   if (!valid_mask(ip)) return EIPMASK;
-   user = find_user(username);
-   if (!user) return EUSERNOTFOUND;
-   found = 0;
-   i = 0;
-   while (user->ipmask[i])
-   {
-      if (!found && strcmp(user->ipmask[i], ip) == 0)
-      {
-         free(user->ipmask[i]);
-         user->ipmask[i] = NULL;
-         found = 1;
-      }
-      else if (found)
-      {
-         user->ipmask[i-1] = user->ipmask[i];
-         user->ipmask[i] = NULL;
-      }
-      i++;
-   }
-   if (found) return 0;
-   return EIPNOTFOUND;
-}
-
-int get_user(char *username, struct user **user)
-{
-   int len;
-   struct user *tmp;
- 
-   print("Getting information about user \"%s\"", username);
-   len = strlen(username);
-   if (len == 0 || len > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   tmp = userlist;
-   while (tmp)
-   {
-      if (strcmp(username, tmp->username) == 0)
-      {
-         *user = tmp;
-         return 0;
-      }
-      tmp = tmp->next;
-   }
-   return EUSERNOTFOUND;
-}
-
-int add_user(char *username, char *password, int authority, int encrypt)
-{
-   struct user *user;
-   int i, ulen, plen;
-   
-   print("Adding user \"%s\" - %s", username, authority == 0 ? "ADMIN" : "NORMAL USER");
-   ulen = strlen(username);
-   if (ulen == 0 || ulen > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   plen = strlen(password);
-   if (plen == 0 || (encrypt && plen > MAX_PASSWORD_LENGTH) || (!encrypt && plen > MAX_ENCRYPTED_PASSWORD_LENGTH)) return EPASSWORDLENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   if (find_user(username)) return EUSEREXISTS;
-   user = (struct user *)malloc(sizeof(struct user));
-   if (!user) return ENOMEMORY;
-   user->username = (char *)malloc((ulen + 1) * sizeof(char));
-   if (!user->username)
-   {
-      free(user);
-      return ENOMEMORY;
-   }
-   strcpy(user->username, username);
-   if (encrypt)
-   {
-      password = encrypt_password(password);
-      plen = strlen(password);
-   }
-   user->password = (char *)malloc((plen + 1) * sizeof(char));
-   if (!user->password)
-   {
-      free(user->username);
-      free(user);
-      return ENOMEMORY;
-   }
-   strcpy(user->password, password); 
-   user->ipmask = (char **)malloc((MAX_IP_COUNT + 1) * sizeof(char *));
-   if (!user->ipmask)
-   {
-      free(user->username);
-      free(user->password);
-      free(user);
-      return ENOMEMORY;
-   }
-   for (i = 0; i < MAX_IP_COUNT + 1; i++) user->ipmask[i] = NULL;
-   user->authority = authority;
-   user->next = NULL;
-   user->prev = lastuser;
-   if (lastuser) lastuser->next = user;
-   else userlist = user;
-   lastuser = user;
-   return 0;
-}
-
-int delete_user(char *username)
-{
-   struct user *user;
-   int i;
-
-   print("Removing user \"%s\"", username);
-   i = strlen(username);
-   if (i < 1 || i > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   user = find_user(username);
-   if (!user) return EUSERNOTFOUND;
-   if (user->prev) user->prev->next = user->next;
-   else userlist = user->next;
-   if (user->next) user->next->prev = user->prev;
-   else lastuser = user->prev;
-   i = 0;
-   while (user->ipmask[i]) free(user->ipmask[i++]);
-   free(user->username);
-   free(user->password);
-   free(user->ipmask);
-   free(user);
-   return 0;
-}
-
-int change_password(char *username, char *password)
-{
-   struct user *user;
-   char *tmp;
-   int i;
-
-   print("Changing password for user \"%s\"", username);
-   i = strlen(username);
-   if (i < 1 || i > MAX_USERNAME_LENGTH) return EUSERNAMELENGTH;
-   i = strlen(password);
-   if (i < 1 || i > MAX_PASSWORD_LENGTH) return EPASSWORDLENGTH;
-   if (!valid_username(username)) return EBADUSERNAME;
-   user = find_user(username);
-   if (!user) return EUSERNOTFOUND;
-   password = encrypt_password(password);
-   tmp = (char *)malloc((strlen(password) + 1) * sizeof(char));
-   if (!tmp) return ENOMEMORY;
-   strcpy(tmp, password);
-   free(user->password);
-   user->password = tmp;
-   return 0;
-}
-
-int authorized_connection(char *ip)
-{
-   struct user *user = userlist;
-
-   print("Checking if IP %s is allowed to connect", ip);
-   while (user)
-   {
-      if (compare_ip(ip, user->ipmask)) return 1;
-      user = user->next;
-   }
-   return 0;
-}
-
-int authorized_user(char *authstr, char *ip, int authority)
-{
-   char *username, *password, *tmp;
-   struct user *user;
- 
-   print("Authorizing connection from IP %s", ip);
-   b64decode(authstr);
-   tmp = strchr(authstr, ':');
-   if (!tmp) return 0;
-   tmp[0] = '\0';
-   username = authstr;
-   password = tmp + 1;
-   user = find_user(username);
-   //printf("user=%s, user_auth=%d, auth=%d,cmp_ip=%d, cmp_md5=%d\n",user,user->authority,authority,compare_ip(ip, user->ipmask),strcmp(crypt_md5(password, user->password), user->password));
-   if (user && user->authority <= authority && compare_ip(ip, user->ipmask) && strcmp(crypt_md5(password, user->password), user->password) == 0) return 1;
-   return 0;
-}
-
-int register_update_cmd(char *cmd_string)
-{
-  print("cmd_string=%s",cmd_string);
-  cmd=NULL;
-  cmd_argv=NULL;
-  if(cmd_string==NULL) return 0;
-  
-  cmd_argv=malloc((MAX_CMD_PARAMS+1)*sizeof(char*));
-  if(!cmd_argv) return -1;
-  char *pos=cmd_string;
-  if(strchr(cmd_string,' ')==NULL)
-  {
-    cmd=malloc(strlen(pos)+1);
-    if(!cmd) return -1;
-    sprintf(cmd,"%s\0",pos);
-    cmd_argv[0]=malloc(strlen(pos)+1);
-    if(!cmd_argv[0]) return -1;
-    sprintf(cmd_argv[0],"%s\0",pos);
-    return 0;
-  }
-  
-  int i=0;
-  pos=strtok(cmd_string," ");
-  while(pos!=NULL && i<MAX_CMD_PARAMS)
-  {
-    if(i==0)
-    {
-      cmd=malloc(strlen(pos)+1);
-      if(!cmd) return -1;
-      sprintf(cmd,"%s\0",pos);
-    }
-    //any cmd parameter
-    cmd_argv[i]=malloc(strlen(pos)+1);
-    if(!cmd_argv[i]) return -1;
-    sprintf(cmd_argv[i],"%s\0",pos);
-    i++;
-    pos=strtok(NULL," ");
-  }
-  cmd_argv[++i]=NULL;
-#ifdef DEBUG
-  i=0;
-  while(cmd_argv[i])
-  {
-    print("argv[%d]=%s",i,cmd_argv[i]);
-    i++;
-  }
-#endif
-  print("Register successful");
-  return 0;
-}
-
-void exec_update_cmd()
-{
-  print("Executing Update cmd");
-  if(cmd==NULL) return;
-  int ret=execv(cmd,cmd_argv);
-  print("ret_update_cmd=%d",ret);
-}
\ Kein Zeilenumbruch am Dateiende.
diff -urNa dev_tree/bs_extra/stproxy/src/auth.h~ dev_tree_new/bs_extra/stproxy/src/auth.h~
--- dev_tree/bs_extra/stproxy/src/auth.h~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/src/auth.h~	1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-#ifndef __AUTH_H
-#define __AUTH_H
-#define SUPER_USER 0
-#define NORMAL_USER 1
-#define ENOMEMORY -1
-#define EUSERNAMELENGTH -2
-#define EPASSWORDLENGTH -3
-#define EIPLENGTH -4
-#define EIPCOUNT -5
-#define EUSEREXISTS -6
-#define EIPEXISTS -7
-#define EIPMASK -8
-#define EUSERNOTFOUND -9
-#define EIPNOTFOUND -10
-#define EBADUSERNAME -11
-#define EOPENDB -12
-#define EADDTODB -13
-#define ECORRUPTDB -14
-#define EREADDB -15
-#define EUPDATEDB -16
-#define MAX_CMD_PARAMS 10
-
-struct user
-{
-   char *username;
-   char *password;
-   char **ipmask;
-   int authority;
-   struct user *next;
-   struct user *prev;
-};
-int register_update_cmd(char *cmd_string);
-int load_db(char *passwd_file);
-int update_db(int rebuild);
-void free_db(void);
-int add_ip(char *username, char *ip);
-int delete_ip(char *username, char *ip);
-int get_user(char *username, struct user **user);
-int add_user(char *username, char *password, int authority, int encrypt);
-int delete_user(char *username);
-int change_password(char *username, char *password);
-int authorized_connection(char *ip);
-int authorized_user(char *authstr, char *ip, int authority);
-
-#endif
-
diff -urNa dev_tree/bs_extra/stproxy/src/common.h~ dev_tree_new/bs_extra/stproxy/src/common.h~
--- dev_tree/bs_extra/stproxy/src/common.h~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/src/common.h~	1970-01-01 01:00:00.000000000 +0100
@@ -1,163 +0,0 @@
-#ifndef __COMMON_H
-#define __COMMON_H
-
-/* bind settings */
-#define PROXY_PORT 1337
-#define ADMIN_PORT 5000
-#define BIND_ADDRESS "0.0.0.0"
-
-/* performance settings */
-#define MAX_CLIENTS 500
-#define FD_SETSIZE 1024
-#define BUF_LENGTH 8192
-
-/* admin settings */
-#define ADMIN_USER "stproxy"
-#define ADMIN_PASS "stproxy"
-#define ADMIN_MASK "127.0.0.1", NULL
-
-/* user settings */
-#define MAX_USERNAME_LENGTH 15
-#define MAX_PASSWORD_LENGTH 15
-#define MAX_IP_LENGTH 15
-#define MAX_IP_COUNT 10
-
-/* timeout settings */ 
-#define CONNECT_TIMEOUT 30
-#define REQUEST_TIMEOUT 10
-#define IDLE_TIMEOUT 120
-#define SELECT_TIMEOUT 2
-
-/* dns settings */
-#define DNS_SERVER "127.0.0.1"
-#define DNS_PORT 53
-#define CACHE_SIZE 4999
-#define MAX_QUERIES 100
-#define MAX_TRIES 3
-#define QUERY_TIMEOUT 10
-
-/* other settings */
-#define PROXY_VERSION "stproxy/0.9"
-#define MAX_LINE_LENGTH 1024
-#define MAX_AUTH_LENGTH 64
-#define MAX_ENCRYPTED_PASSWORD_LENGTH 120
-#define CONFIG_FILE "/etc/stproxy/stproxy.conf"
-#define PASSWD_FILE "/etc/stproxy/stproxy_passwd"
-
-#define UNKNOWN_STATE 0
-#define CLIENT_STATE 1
-#define SERVER_CONNECTED_STATE 2
-#define SERVER_CONNECTING_STATE 3
-#define PROXY_SERVER_STATE 4
-#define WEB_SERVER_STATE 5
-#define UNKNOWN_METHOD 0
-#define GET_METHOD 1
-#define POST_METHOD 2
-#define CONNECT_METHOD 3
-
-#define string(s) str_func(s)
-#define str_func(s) #s
-
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-#endif
-
-#ifdef DEBUG
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#endif
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifdef HAVE_VFORK_H
-#include <vfork.h>
-#endif
-
-#ifndef HAVE_WORKING_VFORK
-#define vfork fork
-#endif
-
-#ifndef INADDR_NONE
-#define INADDR_NONE ((unsigned long) -1)
-#endif
-
-#endif
diff -urNa dev_tree/bs_extra/stproxy/src/main.c~ dev_tree_new/bs_extra/stproxy/src/main.c~
--- dev_tree/bs_extra/stproxy/src/main.c~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/src/main.c~	1970-01-01 01:00:00.000000000 +0100
@@ -1,441 +0,0 @@
-/*
- * Copyright (C) 2007 Adam Hurkala (ahurkala@gmail.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "common.h"
-#include "debug.h"
-#include "auth.h"
-#include "sock.h"
-#include "libdns.h"
-#include "reqerror.h"
-#include "strutils.h"
-#include "webserver.h"
-#include "proxy.h"
-#include <signal.h>
-//#include <sys/types.h>
-#include <sys/wait.h>
-//#include <errno.h>
-
-extern struct SOCK *socketlist, *lastsocket;
-extern int clientcount;
-
-static void server_loop(void)
-{
-   int maxfd, res;
-   fd_set read_set, write_set;
-   struct SOCK *sock, *tmp;
-   struct timeval select_timeout;
-   time_t timer;
-
-   for (;;)
-   {
-      FD_ZERO(&read_set);
-      FD_ZERO(&write_set);
-      maxfd = libdns_fds(&read_set, &write_set);
-      sock = socketlist;
-      while (sock)
-      {
-         if (sock->readhandler) FD_SET(sock->fd, &read_set);
-         if (sock->writehandler) FD_SET(sock->fd, &write_set);
-         if (sock->fd + 1 > maxfd) maxfd = sock->fd + 1;
-         sock = sock->next;
-      }
-      select_timeout.tv_sec = SELECT_TIMEOUT;
-      select_timeout.tv_usec = 100000;
-      time(&timer);
-      res = select(maxfd, &read_set, &write_set, NULL, &select_timeout);
-      if (res < 0) printerror("select failed");
-      else if (res == 0) print("select timeout");
-      else
-      {
-         sock = socketlist;
-         while (sock)
-         {
-            if (sock->readhandler && FD_ISSET(sock->fd, &read_set) && sock->readhandler(sock) != 0)
-            {
-               if (sock->forward) free_socket(sock->forward);
-               tmp = sock->next;
-               free_socket(sock);
-               sock = tmp;
-               continue;
-            }
-            if (sock->writehandler && FD_ISSET(sock->fd, &write_set) && sock->writehandler(sock) != 0)
-            {
-               if (sock->forward) free_socket(sock->forward);
-               tmp = sock->next;
-               free_socket(sock);
-               sock = tmp;
-               continue;
-            }
-            sock = sock->next;
-         }
-      }
-      sock = socketlist;
-      while (sock)
-      {
-         if (difftime(time(NULL), sock->idle) >= sock->timeout)
-         {
-            if (sock->state == SERVER_CONNECTING_STATE)
-            {
-               errno = ETIMEDOUT;
-               printerror("Connection failed, fd %d", sock->fd);
-               sock->writehandler = NULL;
-               request_error(sock->forward, CONNECT_ERROR, NULL);
-            }
-            else if (sock->state != PROXY_SERVER_STATE && sock->state != WEB_SERVER_STATE)
-            {
-               print("Idle timeout on fd %d", sock->fd);
-               if (sock->forward) free_socket(sock->forward);
-               tmp = sock->next;
-               free_socket(sock);
-               sock = tmp;
-               continue;
-            }
-         }
-         sock = sock->next;
-      }
-      libdns_process(&read_set, &write_set);
-   }
-}
-
-static int accept_client(struct SOCK *server)
-{
-   int fd;
-   struct sockaddr_in sa;
-   socklen_t len = sizeof(sa);
-   struct SOCK *client;
-
-   print("Accepting new connection on fd %d", server->fd);
-   fd = accept(server->fd, (struct sockaddr *)&sa, &len);
-   if (fd > 0)
-   {
-      if (authorized_connection(inet_ntoa(sa.sin_addr)))
-      {
-         print("Accepted connection from %s:%d, new fd %d", inet_ntoa(sa.sin_addr), ntohs(sa.sin_port), fd);
-         client = new_socket(fd);
-         if (client)
-         {
-            client->sockaddr = sa;
-            client->state = CLIENT_STATE;
-            client->timeout = REQUEST_TIMEOUT;
-            time(&client->idle);
-            clientcount++;
-            if (clientcount > MAX_CLIENTS)
-            {
-               print("Cannot handle new client, fd %d (too many clients)", fd);
-               request_error(client, MAXCLIENTS_ERROR, NULL);
-            }
-            else
-            {
-               if (server->state == PROXY_SERVER_STATE) client->readhandler = proxy_handle_client;
-               else client->readhandler = webserver_handle_client;
-            }
-         }
-         else
-         {
-            print("Cannot handle new client, fd %d", fd);
-            close(fd);
-         }
-      }
-      else
-      {
-         print("Illicit connection from %s:%d on fd %d", inet_ntoa(sa.sin_addr), ntohs(sa.sin_port), fd);
-         close(fd);
-      }
-   }
-   else printerror("Cannot accept new connection on fd %d", server->fd);
-   return 0;
-}
-
-static int setup(char *ip, int proxyport, int adminport)
-{
-   struct SOCK *proxyserver;
-   struct SOCK *webserver;
-
-   proxyserver = new_socket(ALLOCATE_SOCKET);
-   if (!proxyserver)
-   {
-      fprintf(stderr, "Cannot allocate new socket - %s\n", strerror(errno));
-      return 1;
-   }
-   webserver = new_socket(ALLOCATE_SOCKET);
-   if (!webserver)
-   {
-      fprintf(stderr, "Cannot allocate new socket - %s\n", strerror(errno));
-      return 1;
-   }
-   if (bind_socket(proxyserver->fd, ip, proxyport) != 0)
-   {
-      fprintf(stderr, "Cannot bind socket to %s:%d - %s\n", ip, proxyport, strerror(errno));
-      return 1;
-   }
-   if (bind_socket(webserver->fd, ip, adminport) != 0)
-   {
-      fprintf(stderr, "Cannot bind socket to %s:%d - %s\n", ip, adminport, strerror(errno));
-      return 1;
-   }
-   if (listen(proxyserver->fd, SOMAXCONN) != 0)
-   {
-      fprintf(stderr, "Cannot listen on %s:%d - %s\n", ip, proxyport, strerror(errno));
-      return 1;
-   }
-   if (listen(webserver->fd, SOMAXCONN) != 0)
-   {
-      fprintf(stderr, "Cannot listen on %s:%d - %s\n", ip, adminport, strerror(errno));
-      return 1;
-   }
-   print("Listening on %s:%d (PROXY)", ip, proxyport);
-   print("Listening on %s:%d (WEB INTERFACE)", ip, adminport);
-   proxyserver->state = PROXY_SERVER_STATE;
-   proxyserver->readhandler = accept_client;
-   webserver->state = WEB_SERVER_STATE;
-   webserver->readhandler = accept_client;
-   return 0;
-}
-
-static int init(char *config_file, char *passwd_file, char *update_cmd)
-{
-   FILE *f;
-   char buffer[MAX_LINE_LENGTH+1], ip[MAX_IP_LENGTH+1], *s;
-   int proxyport, adminport, dns, len, res;
-   struct sockaddr_in ns;
-
-   proxyport = PROXY_PORT;
-   adminport = ADMIN_PORT;
-   strcpy(ip, BIND_ADDRESS);
-   dns = 0;
-   if(config_file==NULL) f = fopen(CONFIG_FILE, "r");
-   else f = fopen(config_file, "r");
-   if (!f)
-   {
-      if (errno != ENOENT)
-      {
-         fprintf(stderr, "Unable to open %s file - %s\n", CONFIG_FILE, strerror(errno));
-         return 1;
-      }
-   }
-   else
-   {
-      while (fgets(buffer, MAX_LINE_LENGTH + 1, f))
-      {
-         len = strlen(buffer);
-         init_tokenizer(buffer, NULL, len);
-         if (!parse_line())
-         {
-            if (feof(f))
-            {
-               init_tokenizer(buffer, NULL, len + 1);
-               parse_string();
-            }
-            else
-            {
-               fprintf(stderr, "Error: %s is corrupt\n", CONFIG_FILE);
-               fclose(f);
-               return 1;
-            }
-         }
-         s = get_token();
-         if (!s || s[0] == '#') continue;
-         if (strcmp(s, "BIND_ADDRESS") == 0)
-         {
-            if (!(s = get_token()) || strlen(s) > MAX_IP_LENGTH || inet_addr(s) == INADDR_NONE)
-            {
-               fprintf(stderr, "Error: %s - BIND_ADDRESS is not a valid ip address\n", CONFIG_FILE);
-               fclose(f);
-               return 1;
-            }
-            strcpy(ip, s);
-         }
-         else if (strcmp(s, "PROXY_PORT") == 0)
-         {
-            s = get_token();
-            if (s) proxyport = atoi(s);
-            if (!s || proxyport < 1 || proxyport > 65535)
-            {
-               fprintf(stderr, "Error: %s - PROXY_PORT is not a valid port number\n", CONFIG_FILE);
-               fclose(f);
-               return 1;
-            }
-         }
-         else if (strcmp(s, "ADMIN_PORT") == 0)
-         {
-            s = get_token();
-            if (s) adminport = atoi(s);
-            if (!s || adminport < 1 || adminport > 65535)
-            {
-               fprintf(stderr, "Error: %s - ADMIN_PORT is not a valid port number\n", CONFIG_FILE);
-               fclose(f);
-               return 1;
-            }
-         }
-         else if (strcmp(s, "DNS_SERVER") == 0)
-         {
-            in_addr_t tmp;
-
-            if (!(s = get_token()) || (tmp = inet_addr(s)) == INADDR_NONE)
-            {
-               fprintf(stderr, "Error: %s - DNS_SERVER is not a valid ip address\n", CONFIG_FILE);
-               fclose(f);
-               return 1;
-            }
-            dns = 1;
-            memset(&ns, 0, sizeof(struct sockaddr_in));
-            ns.sin_addr.s_addr = tmp;
-            ns.sin_family = AF_INET;
-            ns.sin_port = htons(DNS_PORT);
-         }
-         else
-         {
-            fprintf(stderr, "Error: %s - unknown option \"%s\"\n", CONFIG_FILE, s);
-            fclose(f);
-            return 1;
-         }
-      }
-      if (!feof(f))
-      {
-         fprintf(stderr, "Error reading %s - %s\n", CONFIG_FILE, strerror(errno));
-         fclose(f);
-         return 1;
-      }
-      fclose(f);
-   }
-   res = register_update_cmd(update_cmd);
-   res = load_db(passwd_file);
-   if (res != 0)
-   {
-      if (res == EOPENDB) fprintf(stderr, "Unable to open %s file - %s\n", PASSWD_FILE, strerror(errno));
-      else if (res == EADDTODB) fprintf(stderr, "Unable to add user, %s file might be corrupt\n", PASSWD_FILE);
-      else if (res == ECORRUPTDB) fprintf(stderr, "%s file is corrupt\n", PASSWD_FILE);
-      else if (res == EREADDB) fprintf(stderr, "Error reading %s file - %s\n", PASSWD_FILE, strerror(errno));
-      else if (res == EUPDATEDB) fprintf(stderr, "Unable to update %s file - %s\n", PASSWD_FILE, strerror(errno));
-      return res;
-   }
-   res = libdns_init(dns == 0 ? NULL : &ns);
-   if (res != 0)
-   {
-      if (res == ENOMEMORY) fprintf(stderr, "Unable to allocate memory - %s\n", strerror(errno));
-      else if (res == ESOCKET || res == ENONBLOCK) fprintf(stderr, "Cannot allocate new socket - %s\n", strerror(errno));
-      return res;
-   }
-   webserver_init();
-   return setup(ip, proxyport, adminport);
-}
-
-void print_usage(char *prog)
-{
-  printf("Usage: %s [-c <config_file>] [-p <passwd_file>] [-u \"update_cmd_string\"] [--updatecmd \"update_cmd_string\"] [-h] [--help]\n",prog);
-  return;
-}
-
-static void no_zombie (int signr) {
-  pid_t pid;
-  int ret;
-
-  while ((pid = waitpid (-1, &ret, WNOHANG)) > 0)
-    print("child process with pid=%d terminated\n",pid);
-  return;
-}
-
-int main(int argc, char **argv)
-{
-   umask(077);
-   int j;
-   char *config_file=NULL;
-   char *passwd_file=NULL;
-   char *update_cmd=NULL;
-   for(j=0;j<argc;j++)
-   {
-     if(strcmp("-h",argv[j])==0 || strcmp("--help",argv[j])==0)
-     {
-       print_usage(argv[0]);
-       exit(0);
-     }
-     if(strcmp("-c",argv[j])==0 && j+1<argc)
-     {
-       config_file=malloc(strlen(argv[j+1])+1);
-       if(!config_file)
-       {
-         fprintf(stderr,"invalid config_file_name\n");
-         exit(-1);
-       }
-       sprintf(config_file,"%s\0",argv[j+1]);
-     }
-     if(strcmp("-p",argv[j])==0 && j+1<argc)
-     {
-       passwd_file=malloc(strlen(argv[j+1])+1);
-       if(!passwd_file)
-       {
-         fprintf(stderr,"invalid passwd_file_name\n");
-         exit(-1);
-       }
-       sprintf(passwd_file,"%s\0",argv[j+1]);
-     }
-     if( (strcmp("--updatecmd",argv[j])==0 || strcmp("-u",argv[j])==0) && j+1<argc)
-     {
-       update_cmd=malloc(strlen(argv[j+1])+1);
-       if(!update_cmd)
-       {
-         fprintf(stderr, "invalid update_cmd_string\n");
-         exit(-1);
-       }
-       sprintf(update_cmd,"%s\0",argv[j+1]);
-     }
-   }
-   if (init(config_file,passwd_file,update_cmd) == 0)
-   {
-        //registering SIGNAL-handler child processes
-        struct sigaction neu_sig, alt_sig;
-        neu_sig.sa_handler = no_zombie;
-        sigemptyset (&neu_sig.sa_mask);
-        neu_sig.sa_flags = SA_RESTART;
-        sigaction (SIGCHLD, &neu_sig, &alt_sig);
-        
-        
-      #ifdef DEBUG
-        server_loop();
-      #else
-        int i;
-
-        switch(fork())
-        {
-           case -1:
-             fprintf(stderr, "fork error - %s\n", strerror(errno));
-             break;
-           case 0:
-             printf("Going into background, pid %d\n", getpid());
-             setsid();
-             signal(SIGPIPE, SIG_IGN);
-             signal(SIGHUP, SIG_IGN);
-             signal(SIGUSR1, SIG_IGN);
-             signal(SIGUSR2, SIG_IGN);
-             signal(SIGTERM, SIG_IGN);
-             signal(SIGTSTP, SIG_IGN);
-             signal(SIGTTOU, SIG_IGN);
-             signal(SIGTTIN, SIG_IGN);
-             close(0);
-             close(1);
-             close(2);
-             i = open("/dev/null", O_RDWR);
-             dup(i);
-             dup(i);
-             server_loop();
-             break;
-        }
-      #endif
-   }
-   return 0;
-}
diff -urNa dev_tree/bs_extra/stproxy/start_script/stproxy.sh dev_tree_new/bs_extra/stproxy/start_script/stproxy.sh
--- dev_tree/bs_extra/stproxy/start_script/stproxy.sh	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/start_script/stproxy.sh	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -13,6 +14,7 @@
                   stproxy_start=$autostart
                 else
                   `/bin/nvram set stproxy_start=0 >/dev/null`
+                  must_save=1
                   stproxy_start=0
                 fi
                 stproxy_config="/var/stproxy.conf"
@@ -21,12 +23,14 @@
 		  test -r $stproxy_config
                   if [ $? -eq 0 ]; then
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   else
                     echo "BIND_ADDRESS 0.0.0.0" >$stproxy_config
                     echo "PROXY_PORT 8080" >>$stproxy_config
                     echo "ADMIN_PORT 6767" >>$stproxy_config
                     echo "DNS_SERVER 127.0.0.1" >>$stproxy_config
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   fi
                 fi
                 stproxy_passwd="/var/stproxy_passwd"
@@ -35,14 +39,17 @@
 		  test -r $stproxy_passwd
                   if [ $? -eq 0 ]; then
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   else
                     echo "stproxy 0 \$1\$DE6e3/..\$7a68ski03Hxc/OjFhPEDk. 0.0.0.0" >$stproxy_passwd
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   fi
                 fi
 		if [ "$stproxy_start" = "1" ]; then
-		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfile stproxy_passwd=/var/stproxy_passwd"
+		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfilecommit stproxy_passwd=/var/stproxy_passwd"
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 		echo "Stopping stproxy"
@@ -50,7 +57,9 @@
 	        test -r /var/stproxy.conf
 	        if [ $? -eq 0 ]; then
 	          /bin/nvram setfile stproxy_config=/var/stproxy.conf >/dev/null
+	          must_save=1
 	        fi
+	        [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	restart)
 		$0 stop
diff -urNa dev_tree/bs_extra/stproxy/start_script/stproxy.sh~ dev_tree_new/bs_extra/stproxy/start_script/stproxy.sh~
--- dev_tree/bs_extra/stproxy/start_script/stproxy.sh~	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/bs_extra/stproxy/start_script/stproxy.sh~	2008-06-06 16:34:02.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -13,6 +14,7 @@
                   stproxy_start=$autostart
                 else
                   `/bin/nvram set stproxy_start=0 >/dev/null`
+                  must_save=1
                   stproxy_start=0
                 fi
                 stproxy_config="/var/stproxy.conf"
@@ -21,12 +23,14 @@
 		  test -r $stproxy_config
                   if [ $? -eq 0 ]; then
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   else
                     echo "BIND_ADDRESS 0.0.0.0" >$stproxy_config
                     echo "PROXY_PORT 8080" >>$stproxy_config
                     echo "ADMIN_PORT 6767" >>$stproxy_config
                     echo "DNS_SERVER 127.0.0.1" >>$stproxy_config
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   fi
                 fi
                 stproxy_passwd="/var/stproxy_passwd"
@@ -35,14 +39,17 @@
 		  test -r $stproxy_passwd
                   if [ $? -eq 0 ]; then
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   else
                     echo "stproxy 0 \$1\$DE6e3/..\$7a68ski03Hxc/OjFhPEDk. 0.0.0.0" >$stproxy_passwd
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   fi
                 fi
 		if [ "$stproxy_start" = "1" ]; then
-		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfile stproxy_passwd=/var/stproxy_passwd"
+		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfile stproxy_passwd=/var/stproxy_passwd && nvram commit"
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 		echo "Stopping stproxy"
@@ -50,7 +57,9 @@
 	        test -r /var/stproxy.conf
 	        if [ $? -eq 0 ]; then
 	          /bin/nvram setfile stproxy_config=/var/stproxy.conf >/dev/null
+	          must_save=1
 	        fi
+	        [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	restart)
 		$0 stop
@@ -58,7 +67,7 @@
 		$0 start
 		;;
 	*)
-		echo "Usage: /etc/start_scripts/stproxy {start|stop|restart}"
+		echo "Usage: /etc/start_scripts/stproxy.sh {start|stop|restart}"
 		exit 1
 		;;
 esac
diff -urNa dev_tree/bs_extra/version dev_tree_new/bs_extra/version
--- dev_tree/bs_extra/version	2008-04-11 14:03:13.000000000 +0200
+++ dev_tree_new/bs_extra/version	2008-06-06 16:34:02.000000000 +0200
@@ -1 +1 @@
-0.2.0
+0.2.1
diff -urNa dev_tree/bs_extra/vodsl_monitor/bin/call_mon_event.sh dev_tree_new/bs_extra/vodsl_monitor/bin/call_mon_event.sh
--- dev_tree/bs_extra/vodsl_monitor/bin/call_mon_event.sh	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/bin/call_mon_event.sh	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,131 @@
+#!/bin/sh
+
+[ "$#" -lt "5" ] && exit 1
+
+export PATH=/bin:/etc/start_scripts:$PATH
+CUSTOM="/var/custom_call_event.sh"
+
+load_custom_script ()
+{
+ if [ ! -e $CUSTOM ]
+ then
+   RET=`nvram getfile custom_call_event=$CUSTOM`
+   [ "$RET" == "Failed" ] && exit 0
+ fi
+ chmod +x $CUSTOM
+ #$CUSTOM $@
+ /bin/sh $CUSTOM $@
+}
+
+echo "Call event..."
+ledtool 1 3
+
+if [ "$EVENT" == "CALL" ]
+then
+ case "$CALLER" in
+  "77*0*")
+  	echo "SSH start"
+	start=`nvram get ssh_start`
+        [ "$start" != "1" ] || nvram set ssh_start=1 >/dev/null 2>/dev/null
+        ssh.sh restart
+	;;
+  "77*1*")
+  	echo "SSH stop"
+	ssh.sh stop
+	;;
+  "77*2*"*)
+  	echo "set IP to br0"
+  	IP=`echo "$CALLER"|sed -e 's/^77\*2\*//'|sed -e 's/[*]/./g'`
+	IP=`/webs/cgi-bin/isip.sh $IP`
+	echo $IP
+	[ "$IP" != "ERROR" ] && ifconfig br0 $IP up
+	;;
+  "77*3*12345")
+  	echo "flush firewall"
+	iptables -F
+	iptables -P INPUT ACCEPT
+	iptables -P OUTPUT ACCEPT
+	iptables -P FORWARD ACCEPT
+        #iptables -t nat -F
+        #iptables -t mangle -F
+	;;
+  "77*4*12345")
+  	echo "flush ebtables"
+	ebtables -F
+	ebtables -P INPUT ACCEPT
+	ebtables -P OUTPUT ACCEPT
+	ebtables -P FORWARD ACCEPT
+	ebtables -t nat -F
+        #ebtables -t broute -F
+	;;
+  "77*5*")
+  	echo "flash LEDs"
+	ledtool X 7 
+	ledtool X 10
+	sleep 1
+	ledtool 0 1
+	;;
+  "96*0*")
+  	echo "WLAN start"
+	wlctl up
+  	;;
+  "96*1*")
+  	echo "WLAN stop"
+	wlctl down
+	;;
+  "96*4*")
+  	echo "Call monitor server start"
+	nvram set call_mon_start=1
+	call_mon.sh restart
+	;;
+  "96*5*")
+        echo "Call monitor server stop"
+	nvram set call_mon_start=0
+        call_mon.sh restart
+        ;;
+  "96*7*")
+  	echo "telnet start"
+  	start=`nvram get telnet_start`
+	[ "$start" != "1" ] && nvram set telnet_start=1 >/dev/null 2>/dev/null
+	telnet.sh restart
+	;;
+  "96*8*")
+  	echo "telnet stop"
+	telnet.sh stop
+	;;
+  "990*15901590*")
+  	echo "reboot"
+	nvram reboot
+	;;
+  "991*15901590*")
+  	echo "nvram reset and reboot"
+	nvram reset
+	nvram reboot
+	;;
+  *)
+     load_custom_script $@
+     ;;
+ esac
+
+ exit 0
+fi
+
+if [ "$EVENT" == "RING" ]
+then
+ case "$CALLER" in
+   *)
+      load_custom_script $@
+      ;;
+ esac
+ exit 0
+fi
+
+if [ "$EVENT" == "DISCONNECT" ]
+then
+ case "$CALLER" in
+   *)
+      load_custom_script $@
+      ;;
+ esac
+ exit 0
+fi
diff -urNa dev_tree/bs_extra/vodsl_monitor/Makefile dev_tree_new/bs_extra/vodsl_monitor/Makefile
--- dev_tree/bs_extra/vodsl_monitor/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/Makefile	2008-06-06 16:58:41.000000000 +0200
@@ -0,0 +1,52 @@
+VO_MON_FLAGS= -DSEMAPHORE \
+	      -DKLOG_POLL_AND_CLEAR \
+	      -DKLOG_POLL_CLEAR_AFTER_EVENT
+
+CFLAGS+= -Os -fomit-frame-pointer -Wall -std=c99 -D_SVID_SOURCE $(VO_MON_FLAGS)
+
+LDFLAGS= -Wall -Wl,-allow-shlib-undefined -pthread
+
+#CFLAGS += -DDEBUG
+
+BIN = $(INSTALL_DIR)/bin/
+BIN_SCRIPT= $(INSTALL_DIR)/usr/bin/
+BINNAME = vodsl_monitor
+PROGRAM = bin/$(BINNAME)
+SCRIPT = bin/call_mon_event.sh
+
+SRC = src/
+OBJ = obj/
+
+SOURCES = \
+	main.c \
+	monitor.c \
+	sock_list.c
+
+OBJECTS = $(SOURCES:%.c=$(OBJ)%.o)
+COMPILE = $(CC) $(CFLAGS)
+
+.PHONY: clean all install uninstall
+
+all: $(PROGRAM)
+
+$(PROGRAM): $(OBJECTS)
+	$(COMPILE) $(LDFLAGS) $(OBJECTS) -o $@
+
+$(OBJ)%.o: $(SRC)%.c $(OBJ)
+	$(COMPILE) -c $< -o $@
+
+$(OBJ):
+	mkdir -p $(OBJ)
+
+clean:
+	rm -f $(OBJECTS) $(PROGRAM)
+
+uninstall:
+	rm $(BIN)$(BINNAME)
+
+install:
+	install -m 755 $(PROGRAM) $(BIN)
+	install -m 755 $(SCRIPT) $(BIN_SCRIPT)
+	$(STRIP) $(INSTALL_DIR)/$(PROGRAM)
+
+	
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/main.c dev_tree_new/bs_extra/vodsl_monitor/src/main.c
--- dev_tree/bs_extra/vodsl_monitor/src/main.c	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/main.c	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <getopt.h>
+#include <sys/types.h>
+
+#include "vodsl_monitor.h"
+#include "monitor.h"
+
+
+void print_help(char* name)
+{
+ printf("VoDSL Monitor by Michael Finsterbusch <fibu@users.sourceforge.net>\n\n"
+ 	"Usage: %s [-p <port>] [-s <script>] [-n] [-d] [-D]\n" //[-P <pid-file>]\n"
+ 	"       %s [-h]\n\n"
+	"Options:\n"
+	" -p <port>      Set server port (default: 1012)\n"
+	" -s <script>    Set a script or program to run on event\n"
+	" -n             Don't start the server\n"
+	" -d             Debug\n"
+	" -D             Daemon mode\n",
+//	" -P <pid-file>  Set a pid-file\n",
+	name,name);
+}
+
+
+int main(int argc, char *argv[])
+{
+ char** argvh=argv;
+ struct monitor_conf conf;
+ int opt,daemon;
+// char* pidfile=NULL;
+ pid_t pid;
+
+ daemon=0;
+ global_debug=0;
+ conf.usec=300000; // 0.3 sec - poll about 3 time per second
+ conf.port=DEFAULT_PORT;
+ conf.start_server=1;
+ conf.program=NULL;
+
+ while((opt=getopt(argc,argvh,"hp:ns:dD"))!=EOF)
+ {
+  switch(opt)
+  {
+   case 'p': // Port
+	conf.port=atoi(optarg);
+	if(conf.port<1||conf.port>65535)
+	{
+	 printf("invalid port %d\n",conf.port);
+	 return 0;
+	}
+	break;
+   case 's': // Script
+   	conf.program=optarg;
+	break;
+   case 'n': // no Server
+	conf.start_server=0;
+	break;
+   case 'd': // Debug
+   	global_debug=1;
+	break;
+   case 'D': // Daemon mode
+   	daemon=1;
+	break;
+/*	
+   case 'P': // PID file
+   	pidfile=optarg;
+	break;
+*/
+   case 'h': // Help
+   default:
+   	print_help(argv[0]);
+	return 0;
+	break;
+  }
+ }
+
+ if(daemon)
+ {
+  pid=fork();
+  if(pid<0) // Error
+  {
+   ERROR("fork() %s\n",strerror(errno));
+   return 1;
+  }
+
+  if(pid>0) // parent
+   return 0;
+
+  // child go on
+ }
+
+ main_thread((void*)&conf);
+ DEBUG("all threads terminated proper\n");
+ DEBUG("exit\n");
+ 
+ return 0;
+}
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/monitor.c dev_tree_new/bs_extra/vodsl_monitor/src/monitor.c
--- dev_tree/bs_extra/vodsl_monitor/src/monitor.c	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/monitor.c	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,738 @@
+#define _XOPEN_SOURCE 
+#define _XOPEN_SOURCE_EXTENDED
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/klog.h>
+#include <stdlib.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <arpa/inet.h>
+#include <syslog.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <sys/select.h>
+#include <ctype.h>
+
+#include "vodsl_monitor.h"
+#include "monitor.h"
+#include "sock_list.h"
+
+// timediff between event and 'now' in seconds
+#define TIMEDIFF 2
+// maximum Delay between 2 events in usec
+#define EVENT_DELAY 1500000
+// mark in log-file to prevent calling an event many times (KLOG_POLL)
+#define KLOG_MARK "VODSL_MONITOR_MARK"
+
+// delay between two Ring-signals - after the fist Ring 
+// if available the CLIP-signal is send
+#define CLIP_DELAY 800000
+
+// Space for log file data
+// one record is 88 byte large
+// 20 records per file
+// space for 4 files
+#define FILES 4
+#define RECORD_SIZE 88
+#define RECORDS 20
+
+#define FILE_BUF_LEN (RECORD_SIZE*RECORDS)
+// 4 kByte KLOG_Buffer
+#define KLOG_BUF_LEN 1<<12
+
+// allocate Buffers on Heap
+char FileBuffer[FILE_BUF_LEN];
+char Klog_Buffer[KLOG_BUF_LEN];
+
+#define MONITOR_OFFSET 64
+struct part_monitor{
+	time_t time_begin;    // starting time of call
+        time_t time_end;      // end of call
+	time_t call_duration; // duration of call
+	int via;              // call comes via SIP, ISDN, etc
+	int line;             // line port on router (1/2)
+	int unknown;          // i don't know
+};
+
+#define _IN_  		0
+#define _OUT_ 		1
+#define _DISCONNECT_ 	2
+
+volatile int global_shutdown=0;
+#define THREAD_EXIT if(global_shutdown) pthread_exit(NULL);
+pthread_t klog_th,file_th,server_th;
+
+void shutdown_sighandler(int sig)
+{
+  signal(sig,SIG_IGN);
+  DEBUG("received signal %d - shutting down...\n",sig);
+
+  global_shutdown=1;
+  pthread_cancel(server_th);
+  pthread_cancel(file_th);
+  pthread_cancel(klog_th);
+}
+
+char* get_date(time_t time)
+{
+ struct tm date;
+ char* string;
+
+ if(!gmtime_r(&time,&date))
+  return NULL;
+
+ // "20.10.07 11:47:36"
+ string=(char*)malloc(18);
+ if(!string)
+  return NULL;
+
+ snprintf(string,18,"%02d.%02d.%02d %02d:%02d:%02d",
+ 	  date.tm_mday,date.tm_mon+1,date.tm_year-100,
+	  date.tm_hour,date.tm_min,date.tm_sec);
+ 
+ return string;
+}
+
+void send_event(char* message,struct monitor_conf conf)
+{
+ struct sock_list* list,*iter=NULL,*client;
+ int ret,msg_len,flags;
+ const int buf_len=10;
+ char buf[buf_len];
+
+ if(!message)
+  return;
+ 
+ if(!conf.private)
+  return;
+
+ DEBUG("send %s",message);
+
+ list=(struct sock_list*)conf.private;
+ msg_len=strlen(message);
+ flags=MSG_DONTWAIT; 
+
+ while((client=iter,iter=sock_list_iter(list,iter))!=NULL)
+ {
+  // check if connection is still alive
+  ret=recv(iter->sock,buf,buf_len,flags);
+  if(ret==0)
+   {
+      close(iter->sock);
+      sock_list_del(list,iter->sock);
+      iter=client;
+      continue;
+   }
+  
+  ret=send(iter->sock,message,msg_len,flags);
+  if(ret!=-1)
+   continue;
+  
+  ret=errno;
+  switch(ret)
+  {
+	case EBADF:        // invalid descriptor
+	case ECONNRESET:   // connection reset by peer
+	case EINVAL:       // Invalid argument passed
+	case ENOTCONN:     // socket is not connected, and no target has been given
+	case ENOTSOCK:     // argument is not a socket
+	case EPIPE:        // local end has been shut down
+ 	        close(iter->sock);
+		sock_list_del(list,iter->sock);
+		iter=client;
+		continue;
+		break;
+
+	case EINTR:        // A signal occurred before any data was transmitted
+		iter=client; //try again
+		continue;
+		break;
+	default:
+		ERROR(" sending message: %s",strerror(ret));
+		break;
+  }
+ }
+}
+
+void call_event_script(char** param,char** envp,struct monitor_conf conf)
+{
+ pid_t pid;
+ int i;
+ if(!conf.program)
+   return;
+
+ if(global_debug)
+ {
+  printf("DEBUG: %s(%d): call %s ",__FILE__,__LINE__,conf.program);
+  if(param)
+    for(i=0; param[i]; i++)
+      printf("%s ",param[i]);
+   printf("\n");
+ }
+
+ pid=fork();
+ if(pid<0)
+ {
+  ERROR("fork() can not call event script\n");
+  return;
+ }
+
+ if(pid>0) // parent
+   return;
+
+ // child
+ execve(conf.program,param,envp);
+ ERROR("execve() %s\n",strerror(errno));
+}
+
+char* get_via(int via)
+{
+ switch(via)
+ {
+  case 0: return VIA_PSTN; break;
+  case 1: return VIA_SIP; break;
+ }
+
+ return VIA_DEFAULT;
+}
+
+
+void handle_event(int inout,struct monitor record,struct monitor_conf conf)
+{
+ int duration;
+ const int sendbuflen=256;
+ char sendbuffer[sendbuflen];
+ char event[3][15]={"RING","CALL","DISCONNECT"};
+ char caller[33];
+ char called[33];
+ const int param_len=15;
+ const int envp_len=30;
+ char param[6][param_len];
+ char envp[6][envp_len];
+ char* paramh[7],*envph[6];
+
+ if(inout<0||inout>2)
+  return;
+
+ duration=record.time_end-record.time_begin;
+ if(duration<0)
+   duration=0;
+
+ memset(caller,0,sizeof(caller));
+ memset(called,0,sizeof(called));
+ memcpy(caller,record.caller,sizeof(caller));
+ memcpy(called,record.called,sizeof(called));
+
+ if(inout==_IN_)
+ {
+   // 20.10.07 11:47:37;RING;2;06158879136;916142;ISDN;
+   snprintf(sendbuffer,sendbuflen,"%s;RING;%d;%s;%s;%s;\n",get_date(record.time_begin),
+   	    record.line,caller,called,get_via(record.via));
+   send_event(sendbuffer,conf);
+ }
+
+ if(inout==_OUT_)
+ {
+  // don't send an event to network
+ }
+
+ if(inout==_DISCONNECT_)
+ {
+  // 20.10.07 14:13:16;DISCONNECT;0;19;
+  snprintf(sendbuffer,sendbuflen,"%s;DISCONNECT;%d;%d;\n",get_date(record.time_begin),
+           record.line,duration);
+  send_event(sendbuffer,conf);
+ }
+
+ // call script with parameters: "EVENT caller-number line date time duration"
+ //             EVENT: RING, CALL, DISCONNECT
+
+#define SET_PARAMETER(index,format,value,name) \
+	snprintf(param[index],param_len,format,value); \
+	snprintf(envp[index],envp_len,name"="format,value);
+
+ SET_PARAMETER(0,"%s",event[inout],SCRIPT_ENV_EVENT);
+ SET_PARAMETER(1,"%s",caller,SCRIPT_ENV_CALLER);
+ SET_PARAMETER(2,"%d",record.line,SCRIPT_ENV_LINE);
+ SET_PARAMETER(3,"%s",get_date(record.time_begin),SCRIPT_ENV_DATE);
+ SET_PARAMETER(4,"%d",duration,SCRIPT_ENV_DURATION);
+
+#undef SET_PARAMETER
+
+#define SET_PARAMETER(index) \
+	paramh[index+1]=param[index]; \
+	envph[index]=envp[index];
+
+ paramh[0]=conf.program;
+ SET_PARAMETER(0);
+ SET_PARAMETER(1);
+ SET_PARAMETER(2);
+ SET_PARAMETER(3);
+ SET_PARAMETER(4);
+ paramh[6]=NULL;
+ envph[5]=NULL;
+
+#undef SET_PARAMETER
+
+ call_event_script(paramh,envph,conf);
+}
+
+void files_thread_cleanup(void* arg)
+{
+ FILE** fd=(FILE**)arg;
+ int fcount;
+ DEBUG("files thread shutting down...\n");
+ for(fcount=0; fcount<FILES; fcount++)
+   if(fd[fcount])
+        fclose(fd[fcount]);
+ DEBUG("files thread shutting down - done\n");
+}
+   
+void* poll_files(void* config)
+{
+ struct monitor_conf* conf=(struct monitor_conf*)config;
+ struct monitor record;
+ struct part_monitor* rec;
+ FILE *fd[FILES];     
+ char files[FILES][strlen(MONITOR_FILE_OUT1)+10]={MONITOR_FILE_IN0,
+					          MONITOR_FILE_IN1,
+						  MONITOR_FILE_OUT0,
+						  MONITOR_FILE_OUT1};
+ int filetype[]={_DISCONNECT_,_DISCONNECT_,_OUT_,_OUT_}; 
+ int fcount;
+ FILE* f;
+ int ret,h,i;
+ time_t now;
+ void* start;
+ struct stat filestat;
+ time_t mtime[FILES];
+
+ memset(&fd,0,FILES*sizeof(int));
+ memset(&mtime,0,FILES*sizeof(time_t));
+
+ pthread_cleanup_push(files_thread_cleanup,(void*)fd);
+
+ while(1)
+ {
+  THREAD_EXIT
+  usleep(conf->usec);
+  for(fcount=0; fcount<FILES; fcount++)
+  {
+   f=fd[fcount];
+   if(f==NULL)  // file not open
+   {
+    f=fopen(files[fcount],"r");
+    if(f)
+      fd[fcount]=f;
+    else
+      continue;
+   }
+
+   if(stat(files[fcount],&filestat)==-1)
+    continue;
+   if(filestat.st_mtime==mtime[fcount])
+    continue;
+   mtime[fcount]=filestat.st_mtime;
+   DEBUG("logfile modified %s\n",get_date(filestat.st_mtime));
+
+   fseek(f,0,SEEK_SET);
+   clearerr(f);
+   h=FILE_BUF_LEN;
+   while(h>0)
+   {
+    ret=fread(&FileBuffer[RECORD_SIZE*RECORDS-h],1,h,f);
+
+    h-=ret;
+    if(h && (feof(f) || ferror(f)))
+      break;
+   }
+   if(h)  // error reading file
+     continue;
+
+   now=time(NULL);
+   for(i=0; i<RECORDS; i++)
+   {
+    start=FileBuffer+(i*RECORD_SIZE);
+    rec=(struct part_monitor*)(((void*)start)+MONITOR_OFFSET);
+    // new event ?
+    
+    if( (now-rec->time_end)<=TIMEDIFF)
+    {
+     // copy data from buffer to record
+     memcpy((void*)&record.caller,(void*)start,MONITOR_OFFSET/2);
+     memcpy((void*)&record.called,(void*)(start+MONITOR_OFFSET/2),MONITOR_OFFSET/2);
+     memcpy((void*)&record.time_begin,(void*)rec,sizeof(struct part_monitor));
+
+     // call event handler
+     handle_event(filetype[fcount],record,*conf);
+     // wait some time - won't see many messages for one event
+     usleep(EVENT_DELAY);
+     break;
+    }
+   }
+  }
+ }
+
+ pthread_cleanup_pop(0);
+ pthread_exit(NULL);
+}
+
+void klog_thread_cleanup(void* arg)
+{
+ DEBUG("klog thread shutting down...\n");
+ /* "Close the log. Currently a NOP." */
+ klogctl(0, NULL, 0);
+ DEBUG("klog thread shutting down - done\n");
+}
+
+// If KLOG_POLL is not set, we use klogctl(2,...) to read from log.
+// This works only well if no other process (e.g. klogd) use 
+// klogctl(2,...) or the file /proc/kmsg. If a kernel module 
+// produce an "Oops" then the loging to klogctl(2,...) will stopped.
+// A workaround is to read periodically up to the last 4k of log 
+// (klogctl(3,...)) and search for new events. A mark (KLOG_MARK) 
+// is set to find the last event. To do so set KLOG_POLL an hope 
+// the mark is really put to log.
+// A 3th method is to read the buffer an then clear the log. In this
+// way we need no mark (see above). I call it KLOG_POLL_AND_CLEAR.
+// With KLOG_POLL_CLEAR_AFTER_EVENT set it clears the buffer not after 
+// every read - just after an event.
+void* poll_klog(void* config)
+{
+ struct monitor_conf* conf=(struct monitor_conf*)config;
+ int ret,len;
+ char* from,*to,*buf;
+ struct monitor record;
+#ifdef KLOG_POLL
+ int mark_len;
+ mark_len=strlen(KLOG_MARK);
+ openlog("vodsl_monitor",0,LOG_KERN);
+#endif
+ int via;
+
+ /* "Open the log. Currently a NOP." */
+ klogctl(1, NULL, 0);
+
+#ifdef KLOG_POLL_AND_CLEAR
+ // clear the buffer
+ klogctl(5,Klog_Buffer,KLOG_BUF_LEN);
+#endif
+
+ pthread_cleanup_push(klog_thread_cleanup,NULL);
+
+ while(1)
+ {
+#if defined(KLOG_POLL) || defined(KLOG_POLL_AND_CLEAR)
+  THREAD_EXIT
+  usleep(conf->usec);
+#endif
+
+#if defined(KLOG_POLL) || defined(KLOG_POLL_CLEAR_AFTER_EVENT)
+  ret=klogctl(3,Klog_Buffer,KLOG_BUF_LEN);
+#elif KLOG_POLL_AND_CLEAR
+  ret=klogctl(4,Klog_Buffer,KLOG_BUF_LEN);
+#else
+  ret=klogctl(2,Klog_Buffer,KLOG_BUF_LEN);
+#endif
+  if(ret<0)
+  {
+   ERROR("klogctl() %s\n",strerror(errno));
+   continue;
+  }
+
+  Klog_Buffer[ret>=KLOG_BUF_LEN?KLOG_BUF_LEN:ret]=0;
+  buf=from=Klog_Buffer;
+#ifdef KLOG_POLL
+  while(from=strstr(buf,KLOG_MARK))
+    buf=from+mark_len;
+#endif    
+  from=strstr(buf,"pPhone: ");
+  if(!from)
+   continue;
+  from+=8;
+  to=strstr(from," clidInfo->number");
+  if(!to)
+   continue;
+
+  len=to-from;
+  if(len<0)
+    continue;
+  if(len>32)
+    len=32;
+  
+  // new Event
+   via=1;
+
+  if(len==0) // no calling number - PSTN ?
+   if(strstr(to+17,"pName: O clidInfo->name O"))
+   {
+    via=0;
+    to=from;
+    // wait for transmit CLIP signal 
+    usleep(CLIP_DELAY);
+#if defined(KLOG_POLL) || defined(KLOG_POLL_CLEAR_AFTER_EVENT)
+    ret=klogctl(3,Klog_Buffer,KLOG_BUF_LEN);
+#elif KLOG_POLL_AND_CLEAR
+    ret=klogctl(4,Klog_Buffer,KLOG_BUF_LEN);
+#else
+    ret=klogctl(2,Klog_Buffer,KLOG_BUF_LEN);
+#endif
+    Klog_Buffer[ret>=KLOG_BUF_LEN?KLOG_BUF_LEN:ret]=0;
+    buf=from=Klog_Buffer;
+#ifdef KLOG_POLL
+    while(from=strstr(buf,KLOG_MARK))
+      buf=from+mark_len;
+#endif
+
+    from=strstr(buf,"Number Field (up to 20 digits): ");
+    if(from)
+    {
+      from+=32;
+      to=from;
+      while(isalnum(*to)&& to-from<20)to++;
+      len=to-from;
+      if(len>32)
+        len=32;
+    }
+    else
+     from=to;
+   }
+
+#ifdef KLOG_POLL
+  // set mark to log
+  syslog(LOG_ERR,KLOG_MARK);
+#endif
+
+#ifdef KLOG_POLL_AND_CLEAR
+  // clear the buffer
+  klogctl(5,Klog_Buffer,KLOG_BUF_LEN);
+#endif
+  // get event data and call event handler
+  memset((void*)&record,0,sizeof(struct monitor));
+  memcpy((void*)&record.caller,(void*)from,len);
+  record.time_begin=time(NULL);
+  record.via=via;
+  record.line=1;
+  record.unknown=1;
+
+  handle_event(_IN_,record,*conf);
+ }
+
+ pthread_cleanup_pop(0);
+ pthread_exit(NULL);
+}
+
+
+// open a server socket and bind it to any addresses and port
+int open_and_bind_socket(int port,struct sockaddr_in *addr)
+{
+  int sock;
+  int opt = 1; 
+
+#ifndef IPv6
+  sock=socket(PF_INET,SOCK_STREAM,0);
+#else
+  sock=socket(PF_INET6,SOCK_STREAM,0);
+#endif
+
+  if(sock==-1)
+  {
+   return -1;
+  }
+
+  //local port reuse in TIME_WAIT
+  setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
+
+#ifndef IPv6
+  addr->sin_family = PF_INET;
+#else
+  addr->sin_family = PF_INET6;
+#endif
+  addr->sin_port = htons(port);
+  addr->sin_addr.s_addr = INADDR_ANY;
+
+  if(bind(sock,(const struct sockaddr *)addr,sizeof(struct sockaddr_in))!=0)
+  {
+   close(sock);
+   return -3;
+  }
+
+  if(listen(sock,5)!=0)
+  {
+   close(sock);
+   return -2;
+  }
+
+  return sock;
+}
+
+
+struct server_thread_cleanup_arg
+{
+	struct sock_list** list;
+	int sock;
+};
+
+void server_thread_cleanup(void* args)
+{
+ struct server_thread_cleanup_arg arg=*(struct server_thread_cleanup_arg*)args;
+ struct sock_list* iter;
+
+
+ DEBUG("server thread shutting down...\n");
+ close(arg.sock);
+
+ iter=NULL;
+ while((iter=sock_list_iter(*arg.list,iter))!=NULL)
+ {
+   close(iter->sock);
+   iter->sock=-1;
+ }
+ sock_list_free(arg.list);
+
+ DEBUG("server thread shutting down - done\n");
+}
+
+
+void* server_thread(void* config)
+{
+ struct monitor_conf* conf=(struct monitor_conf*)config;
+ int sock,ret,flags,retc;
+ struct sockaddr_in addr;
+ socklen_t addr_len=sizeof(addr);
+ struct sock_list* list=NULL,*iter,*client;
+#ifdef SOCK_SELECT
+ fd_set fdset;
+ struct timeval timeout;
+#endif
+ const int buf_len=10;
+ char buf[buf_len];
+ struct server_thread_cleanup_arg args; 
+
+ while((list=sock_list_init())==NULL)
+ {
+  THREAD_EXIT
+  ERROR("sock_list_init() - next try in on second\n");
+  sleep(1); // next try in one second
+ }
+ conf->private=(void*)list;
+
+ // open server socked an bind to address and port
+ while((sock=open_and_bind_socket(conf->port,&addr))<0)
+ {
+  THREAD_EXIT
+  ERROR("Error (%d/%d): open_and_bind_socket(%d) - %s - next try in on second\n",
+  	sock,errno,conf->port,strerror(errno));
+  sleep(1); // next try in one second
+ }
+ 
+ // set thread cleanup function
+ args.list=&list;
+ args.sock=sock;
+ pthread_cleanup_push(server_thread_cleanup,(void*)&args);
+
+#ifdef SOCK_SELECT
+ timeout.tv_sec=1;
+ timeout.tv_usec=conf->usec;
+#endif
+ flags=MSG_DONTWAIT;
+ while(1)
+ {
+  THREAD_EXIT
+#ifdef SOCK_SELECT
+  FD_ZERO(&fdset);
+  FD_SET(sock,&fdset);
+  select(sock+1,&fdset,NULL,NULL,&timeout);
+  if(!FD_ISSET(sock,&fdset))
+    continue;
+#endif
+  ret=accept(sock,(struct sockaddr *)&addr,&addr_len);
+  if(ret<0)
+    continue;
+
+  // delete closed connection
+  iter=NULL;
+  while((client=iter,iter=sock_list_iter(list,iter))!=NULL)
+   {
+    retc=recv(iter->sock,buf,buf_len,flags);
+    if(retc==0)
+    {
+      close(iter->sock);
+      sock_list_del(list,iter->sock);
+      iter=client;
+    }
+   }  
+
+  DEBUG("connection from %s:%d\n",inet_ntoa(addr.sin_addr),addr.sin_port);
+  fcntl(ret, F_SETFL, O_NONBLOCK);
+  if(sock_list_add(list,ret)!=0)
+    close(ret);
+ }
+
+ pthread_cleanup_pop(0);
+}
+
+void main_thread(void* config)
+{
+ volatile struct monitor_conf conf=*(struct monitor_conf*)config;
+ int err;
+
+ conf.private=NULL;
+ if(conf.port<0 || conf.port>65535)
+  conf.port=DEFAULT_PORT;
+
+ if(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL))
+   ERROR("pthread_setcancelstate() %s\n",strerror(errno));
+
+ // start poll_klog in an extra thread
+ DEBUG("start klog thread...\n");
+ while((err=pthread_create(&klog_th,NULL,poll_klog,(void*)&conf))!=0)
+ {
+   ERROR("pthread_create() %s - next try in on second\n",strerror(errno));
+   sleep(1); // next try in one second
+ }
+
+ // start poll_files in an extra thread
+ DEBUG("start files thread...\n");
+ while((err=pthread_create(&file_th,NULL,poll_files,(void*)&conf))!=0)
+ {
+   ERROR("pthread_create() %s - next try in on second\n",strerror(errno));
+   sleep(1); // next try in one second
+ }
+
+ if(conf.start_server)
+ {
+  DEBUG("start server thread...\n");
+  while((err=pthread_create(&server_th,NULL,server_thread,(void*)&conf))!=0)
+  {
+    ERROR("pthread_create() %s - next try in on second\n",strerror(errno));
+    sleep(1); // next try in one second
+  }
+ }
+
+ // register signal handlers
+ signal(SIGHUP,SIG_IGN);
+ signal(SIGINT,shutdown_sighandler);
+ signal(SIGQUIT,shutdown_sighandler);
+ signal(SIGABRT,shutdown_sighandler);
+ signal(SIGTERM,shutdown_sighandler);
+ signal(SIGUSR1,SIG_IGN);
+ signal(SIGUSR2,SIG_IGN);
+ signal(SIGCHLD,SIG_IGN);
+ signal(SIGTRAP,SIG_IGN);
+ signal(SIGALRM,SIG_IGN);
+ signal(SIGURG,SIG_IGN);
+ signal(SIGPIPE,SIG_IGN);
+ signal(SIGVTALRM,SIG_IGN);
+
+ pthread_join(file_th,NULL);
+ pthread_join(klog_th,NULL);
+ pthread_join(server_th,NULL);
+}
+
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/monitor.h dev_tree_new/bs_extra/vodsl_monitor/src/monitor.h
--- dev_tree/bs_extra/vodsl_monitor/src/monitor.h	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/monitor.h	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,47 @@
+#ifndef __MONITOR_H
+#define __MONITOR_H
+
+#include <time.h>
+
+#define MONITOR_FILE_IN0 "/var/tcm_incomingep0.log"
+#define MONITOR_FILE_IN1 "/var/tcm_incomingep1.log"
+#define MONITOR_FILE_OUT0 "/var/tcm_outgoingep0.log"
+#define MONITOR_FILE_OUT1 "/var/tcm_outgoingep1.log"
+
+#define DEFAULT_PORT 1012
+
+// names of environment variables for event script
+#define SCRIPT_ENV_EVENT    "EVENT"
+#define SCRIPT_ENV_CALLER   "CALLER"
+#define SCRIPT_ENV_LINE     "LINE"
+#define SCRIPT_ENV_DATE     "EVENT_DATE"
+#define SCRIPT_ENV_DURATION "DURATION"
+
+// names for VIA field
+#define VIA_PSTN   "PSTN"
+#define VIA_SIP    "SIP"
+#define VIA_DEFAULT "SIP"
+
+struct monitor{
+	char caller[32];      // caller phone number 
+	char called[32];      // called party number
+	time_t time_begin;    // starting time of call
+	time_t time_end;      // end of call
+	time_t call_duration; // duration of call
+	int via;              // call comes via SIP, ISDN, etc
+	int line;             // line port on router (1/2)
+	int unknown;          // i don't know
+};
+
+struct monitor_conf{
+	int port;             // Server port
+	unsigned long usec;   // Delay for polling monitor-files
+	char* program;        // Program to start on event
+	int start_server;     // Start server
+	void* private;	      // Private data
+};
+
+void main_thread(void*);
+
+
+#endif //__MONITOR_H
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/sock_list.c dev_tree_new/bs_extra/vodsl_monitor/src/sock_list.c
--- dev_tree/bs_extra/vodsl_monitor/src/sock_list.c	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/sock_list.c	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,215 @@
+#include <stdlib.h>
+
+#ifdef SEMAPHORE
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <errno.h>
+#include <string.h>
+#endif
+
+#include "vodsl_monitor.h"
+#include "sock_list.h"
+
+
+// spezial value for head of list
+#define HEAD_SOCK (-255)
+
+#ifdef SEMAPHORE
+// semaphore variables
+#define LOCK       -1
+#define UNLOCK      1
+#define PERM 0666   
+#define KEY 12131415 
+
+
+int init_semaphore(void) 
+{
+  int semid;
+
+  // extist semaphore?
+  semid = semget (KEY, 0, IPC_PRIVATE);
+  if(semid<0) 
+  {
+   // create semaphore
+   umask(0);
+   semid = semget(KEY,1,IPC_CREAT|IPC_EXCL|PERM);
+   if(semid<0) 
+   {
+     ERROR("create semaphore\n");
+     return -1;
+   }
+
+   // init semaphore
+   if(semctl(semid,0,SETVAL,(int)1)==-1)
+     return -1;
+  }
+  DEBUG("semget() %d\n",semid);
+  return semid;
+}
+
+void set_semaphore(int semid,int op) 
+{
+  struct sembuf semaphore;
+
+  if(semid<0)
+   return;
+  semaphore.sem_num =0;
+  semaphore.sem_op = op;
+  semaphore.sem_flg = SEM_UNDO;
+  if(semop(semid,&semaphore,1)==-1) 
+   ERROR("semop() %d %s\n",semid,strerror(errno));
+  
+  DEBUG("set semaphore %s\n",op==LOCK?"LOCK":"UNLOCK");
+}
+#endif
+
+struct sock_list* sock_list_init(void)
+{
+ struct sock_list* list;
+
+ // get memory for head of list
+ list=(struct sock_list*)malloc(sizeof(struct sock_list));
+ if(!list)
+   return NULL;
+
+ // init head of list
+ list->next=NULL;
+ list->sock=HEAD_SOCK;
+#ifdef SEMAPHORE 
+ list->sem=init_semaphore();
+#endif
+
+ return list;
+}
+
+int sock_list_add(struct sock_list* list,int sock)
+{
+ struct sock_list* h,*i;
+ int count;
+
+ if(!list)
+  return 1;
+
+ // get memory for new element
+ h=(struct sock_list*)malloc(sizeof(struct sock_list));
+ if(!h)
+  return 2;
+
+ // init element
+ h->sock=sock;
+ h->next=NULL;
+#ifdef SEMAPHORE
+ h->sem=-1;
+
+ set_semaphore(list->sem,LOCK);
+#endif
+ // goto end of list
+ count=0;
+ for(i=list; i->next; i=i->next)
+  count++;
+ if(count>MAX_SOCK_LIST_LEN)
+ {
+#ifdef SEMAPHORE
+  set_semaphore(list->sem,UNLOCK);
+#endif
+  free(h);
+  return 3;
+ }
+ // appand element
+ i->next=h;
+
+#ifdef SEMAPHORE
+ set_semaphore(list->sem,UNLOCK);
+#endif
+
+ return 0;
+}
+
+
+void sock_list_del(struct sock_list* list,int sock)
+{
+ struct sock_list* h,*i;
+
+ if(!list)
+   return;
+
+#ifdef SEMAPHORE
+ set_semaphore(list->sem,LOCK);
+#endif
+ // search element
+ for(h=i=list; i; h=i,i=i->next)
+ {
+  if(i->sock==sock)
+  {
+   // delete element
+   h->next=i->next;
+   free(i);
+   break;
+  }
+ }
+#ifdef SEMAPHORE
+ set_semaphore(list->sem,UNLOCK);
+#endif
+}
+
+// set "iter" to NULL at begin of iteration
+struct sock_list* sock_list_iter(struct sock_list* list,struct sock_list* iter)
+{
+ struct sock_list* i;
+
+ if(!list)
+  return NULL;
+
+ if(iter==NULL)
+ {
+  return list->next;
+ }
+
+#ifdef SEMAPHORE
+ set_semaphore(list->sem,LOCK);
+#endif
+ // search element
+ for(i=list->next; i; i=i->next)
+ {
+  if(i==iter)
+  {
+#ifdef SEMAPHORE
+    set_semaphore(list->sem,UNLOCK);
+#endif    
+    return i->next;
+  }
+ }
+#ifdef SEMAPHORE
+ set_semaphore(list->sem,UNLOCK);
+#endif
+ return NULL;
+}
+
+void sock_list_free(struct sock_list** list)
+{
+ struct sock_list* h;
+#ifdef SEMAPHORE
+ int sem=(*list)->sem;
+#endif
+
+ if(!list)
+  return;
+
+#ifdef SEMAPHORE
+ set_semaphore(sem,LOCK);
+#endif
+ while(*list)
+ {
+  h=(*list)->next;
+  free(*list);
+  *list=h;
+ }
+#ifdef SEMAPHORE
+ set_semaphore(sem,UNLOCK);
+ // free semaphore
+ semctl(sem,0,IPC_RMID,0); 
+#endif
+}
+
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/sock_list.h dev_tree_new/bs_extra/vodsl_monitor/src/sock_list.h
--- dev_tree/bs_extra/vodsl_monitor/src/sock_list.h	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/sock_list.h	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,33 @@
+#ifndef __SOCK_LIST_H
+#define __SOCK_LIST_H
+
+#define MAX_SOCK_LIST_LEN 50
+
+
+struct sock_list{
+	struct sock_list* next;
+	int sock;
+#ifdef SEMAPHORE	
+	int sem;
+#endif	
+};
+
+// init a list
+struct sock_list* sock_list_init(void);
+
+// add an element to list
+int sock_list_add(struct sock_list* list,int sock);
+
+// delete an element
+void sock_list_del(struct sock_list* list,int sock);
+
+// go through the list an get elements
+// set "iter" to NULL at begin of iteration
+// NULL is returned if end of list is reached, otherwise a list element
+struct sock_list* sock_list_iter(struct sock_list* list,struct sock_list* iter);
+
+// release the whole list
+void sock_list_free(struct sock_list** list);
+
+#endif //__SOCK_LIST_H
+
diff -urNa dev_tree/bs_extra/vodsl_monitor/src/vodsl_monitor.h dev_tree_new/bs_extra/vodsl_monitor/src/vodsl_monitor.h
--- dev_tree/bs_extra/vodsl_monitor/src/vodsl_monitor.h	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/vodsl_monitor/src/vodsl_monitor.h	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,16 @@
+#ifndef __VODSL_MONITOR_H
+#define __VODSL_MONITOR_H
+
+
+// debug 0=OFF 1=ON
+volatile int global_debug;
+
+#define DEBUG(...) if(global_debug) \
+		    { printf("DEBUG: %s(%d): ",__FILE__,__LINE__);     \
+                      printf(__VA_ARGS__); }
+
+#define ERROR(...) { printf("ERROR: %s(%d): ",__FILE__,__LINE__);     \
+		     printf(__VA_ARGS__); }
+
+
+#endif //__VODSL_MONITOR_H
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/atm.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/atm.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/atm.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/atm.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -37,7 +37,7 @@
     [ -z "$h" ] || ( [ $h -ne 2 ] && [ $h -ne 5 ] )   && errmsg="$errmsg invalid value for AAL=$h [2,5]"'\n' && err=1
     [ $err -eq 0 ] && sed -i /var/config.xml -e "s/aalType=\"AAL$aal\"/aalType=\"AAL$h\"/" && aal=$h && change=1
   fi
-  [ $change -eq 1 ] && [ $err -eq 0 ] && nvram setconfig /var/config.xml >/dev/null
+  [ $change -eq 1 ] && [ $err -eq 0 ] && nvram setconfig /var/config.xml >/dev/null && nvram commit >/dev/null
   if [ $err -ne 0 ]; then
     /bin/nvram getconfig /var/config.xml >/dev/null
     vpi=`cat /var/config.xml|grep vpi|awk {'match($0,/vpi=\"([0-9]*)\"/);print substr($0,RSTART,RLENGTH)'}|sed -e 's/[a-z\"=]//g'`
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/call_mon.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/call_mon.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/call_mon.cgi	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/call_mon.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+from=call_mon.cgi
+action=0
+R1=''
+. ./login.cgi
+
+HOME="index2.cgi"
+
+f_pfad="Additional functions / Call monitor"
+f_name="Call monitor"
+f_text="The feature  &quot;$f_name&quot; is not included!"
+f_bin="/bin/vodsl_monitor"
+. ./feature.cgi
+
+[ "$port" = "" ] && port=1012
+
+err=0
+write=0
+############################## Save & Run ##################################
+if [ "$action" -eq 3 ]; then
+  [ "$R1" = "V1" ] && call_mon_start="0"
+  [ "$R1" = "V2" ] && call_mon_start="1"
+
+ ( [ "$port" -lt "0" ] || [ "$port" -gt "65535" ] )  && errmsg="$errmsg  Invalid Port: '$port'!"'\n'  && port="" && err=1
+
+ if [ "$err" -eq 0 ]; then
+  [ "$call_mon_start" != "`nvram get call_mon_start`" ] && write=1 && res=`nvram set call_mon_start=$call_mon_start` && [ "$res" != "OK" ] && err=1
+  
+  [ "$port" != "`nvram get call_mon_port`" ] && write=1 && res=`nvram set call_mon_port=$port` && [ "$res" != "OK" ] && err=1
+
+  [ "$err" -ne 0 ] && errmsg="$errmsg Write to NVRam failed!"'\n'
+  [ "$write" -eq 1 ] && nvram commit >/dev/null
+  /etc/start_scripts/call_mon.sh restart >/dev/null 2>/dev/null
+  fi
+fi
+
+call_mon_start=`nvram get call_mon_start`
+[ "$call_mon_start" = "Failed" ] && call_mon_start="0"
+
+[ "$call_mon_start" -eq 1 ] && call_mon_on='checked="checked"' && call_mon_off=''
+[ "$call_mon_start" -ne 1 ] && call_mon_on='' && call_mon_off='checked="checked"'
+
+port=`nvram get call_mon_port`
+( [ "$port" = "Failed" ] || [ "$port" = "" ] ) && port=1012
+
+echo '<SCRIPT language="JavaScript" src="../js_fade.txt" type="text/JavaScript"></SCRIPT>' \
+    '<SCRIPT language="JavaScript" src="../js_menu.txt" type="text/JavaScript"></SCRIPT>' \
+    '<SCRIPT type="text/JavaScript">' \
+'function load() {' \
+'document.getElementById("c_verzoeg1").style.visibility="visible";' \
+'document.getElementById("c_verzoeg2").style.visibility="visible";' \
+'document.getElementById("t_but1").style.visibility="hidden";' \
+'document.getElementById("t_but4").style.visibility="hidden";' \
+'}' \
+    'function subm(x) {' \
+    'load();' \
+    'document.getElementById("action").value = x;' \
+    'document.getElementById("xform").submit();' \
+    '}' \
+'function showErr() {' \
+"var err=\"$errmsg\";" \
+'if(err!=""){alert(err);} }' \
+    '</SCRIPT>' \
+    '<LINK rel="stylesheet" href="../style.css" type="text/css">' \
+    '</HEAD>' \
+    '<BODY onload="showErr();">' \
+    '<DIV id=c_Frame>' \
+    '<DIV id=c_border>' \
+    "<DIV id=c_pfad>$f_pfad</DIV>" \
+    "<DIV id=c_titel>$f_name</DIV>" \
+    '<DIV id=c_std>' \
+    '<form id="xform" name="xform" method="post">' \
+    '<table border="0" cellpadding="0" cellspacing="2">' \
+    '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0)>' \
+    '<td width="150">Call monitor server</td>' \
+    "<td width=\"20\"><input type=\"radio\" name=\"R1\" value=\"V1\" $call_mon_off></td>" \
+    '<td width="80">Off</td>' \
+    "<td width=\"20\"><input type=\"radio\" name=\"R1\" value=\"V2\" $call_mon_on></td>" \
+    '<td>On</td>' \
+    '</tr></table>' \
+    '</DIV>' \
+    '<DIV id=c_last>' \
+    '<table border="0" cellpadding="0" cellspacing="2">' \
+    '<tr onmouseover=i_showElem(2) onmouseout=i_showElem(0)>' \
+    '<td width="150">Port</td>' \
+    "<td width=\"100\"><input type=\"text\" name=\"port\" size=\"5\" maxlength=\"5\" value=\"$port\"></td>" \
+    '<td width="20"></td>' \
+    '<input id="action" type="hidden" name="action" value="0">' \
+    "<input type=\"hidden\" name=\"session_id\" value=\"$session_id\">" \
+    '</tr></table></form>' \
+    '</DIV>' \
+    '<DIV id=c_leer></DIV>' \
+    '<DIV id=c_foot></DIV>' \
+    '</DIV>' \
+    '<DIV id=c_verzoeg1></DIV>' \
+    '<DIV id=c_verzoeg2></DIV>' \
+    '</DIV>' \
+    '<DIV id=t_Frame>' \
+    "<DIV id=t_but1 onclick='window.location.href=\"$HOME?session_id=$session_id\";' onmouseover=rahmen(1,1) onmouseout=rahmen(0,1)>Zur&uuml;ck &lt;&lt;</DIV>" \
+    '<DIV id=t_but4 onclick="subm(3);" onmouseover="rahmen(1,4);i_showElem(7)" onmouseout="rahmen(0,4);i_showElem(0)">Save &amp; Run</DIV>' \
+    '</DIV>' \
+    '<DIV id=i_Frame>' \
+    '<DIV id=i_content>' \
+    "<h2>$f_name</h2>" \
+    "<p>Configure settings for $f_name.</p>" \
+    '<p>If you want to get notified in real-time about incoming calls, you may want to use the Call monitor server.</p>' \
+    '<p><img src="../pic_i_hinweis.gif" border="0"><br />To receive call notifications a client program is required.</p>' \
+    '</DIV>' \
+    '<DIV id=i_content1>' \
+    "<h2>$f_name</h2>" \
+    '<p>Turn the Call monitor server <b>on</b> or <b>off</b>.</p>' \
+    '</DIV>' \
+    '<DIV id=i_content2>' \
+    "<h2>$f_name</h2>" \
+    '<p><b>Port</b><br>Set on which TCP-Port Call monitor server should listen.</p>' \
+    '<p><img src="../pic_i_hinweis.gif" border="0"><br /> Enter Valid Port-Number from 1-65534 (default=1012)</p>' \
+    '</DIV>' \
+    '</DIV></BODY></HTML>'
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/dhcp.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/dhcp.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/dhcp.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/dhcp.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -99,17 +99,18 @@
 
   if [ "$err" -eq 0 ]; then
   err=0
-  [ "$dhcp_start" != "`nvram get dhcp_start`" ] && res=`nvram set dhcp_start=$dhcp_start` && [ "$res" != "OK" ] && err=1
-  [ "$dhcp_lease_t" != "`nvram get dhcp_lease_t`" ] && res=`nvram set dhcp_lease_t=$dhcp_lease_t` && [ "$res" != "OK" ] && err=1
-  [ "$dhcp_lease" != "`nvram get dhcp_lease`" ] && res=`nvram set dhcp_lease=$dhcp_lease` && [ "$res" != "OK" ] && err=1
-  [ "$fromip" != "`nvram get dhcp_fromip`" ] && res=`nvram set dhcp_fromip=$fromip` && [ "$res" != "OK" ] && err=1
-  [ "$toip" != "`nvram get dhcp_toip`" ] && res=`nvram set dhcp_toip=$toip` && [ "$res" != "OK" ] && err=1
-  [ "$gateway" != "`nvram get dhcp_gateway`" ] && res=`nvram set  dhcp_gateway=$gateway` && [ "$res" != "OK" ] && err=1
-  [ "$dns1" != "`nvram get dhcp_dns1`" ] && res=`nvram set dhcp_dns1=$dns1` && [ "$res" != "OK" ] && err=1
-  [ "$dns2" != "`nvram get dhcp_dns2`" ] && res=`nvram set dhcp_dns2=$dns2` && [ "$res" != "OK" ] && err=1
-  [ "$dns3" != "`nvram get dhcp_dns3`" ] && res=`nvram set dhcp_dns3=$dns3` && [ "$res" != "OK" ] && err=1
-  [ "$dns4" != "`nvram get dhcp_dns4`" ] && res=`nvram set dhcp_dns4=$dns4` && [ "$res" != "OK" ] && err=1
-
+  mustsave=0
+  [ "$dhcp_start" != "`nvram get dhcp_start`" ] && res=`nvram set dhcp_start=$dhcp_start` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$dhcp_lease_t" != "`nvram get dhcp_lease_t`" ] && res=`nvram set dhcp_lease_t=$dhcp_lease_t` && mustsave=1  && [ "$res" != "OK" ] && err=1
+  [ "$dhcp_lease" != "`nvram get dhcp_lease`" ] && res=`nvram set dhcp_lease=$dhcp_lease` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$fromip" != "`nvram get dhcp_fromip`" ] && res=`nvram set dhcp_fromip=$fromip` && mustsave=1  && [ "$res" != "OK" ] && err=1
+  [ "$toip" != "`nvram get dhcp_toip`" ] && res=`nvram set dhcp_toip=$toip` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$gateway" != "`nvram get dhcp_gateway`" ] && res=`nvram set  dhcp_gateway=$gateway` && mustsave=1  && [ "$res" != "OK" ] && err=1
+  [ "$dns1" != "`nvram get dhcp_dns1`" ] && res=`nvram set dhcp_dns1=$dns1` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$dns2" != "`nvram get dhcp_dns2`" ] && res=`nvram set dhcp_dns2=$dns2` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$dns3" != "`nvram get dhcp_dns3`" ] && res=`nvram set dhcp_dns3=$dns3` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$dns4" != "`nvram get dhcp_dns4`" ] && res=`nvram set dhcp_dns4=$dns4` && mustsave=1 && [ "$res" != "OK" ] && err=1
+  [ "$mustsave" -eq 1 ] && nvram commit >/dev/null 
   [ "$err" -ne 0 ] && errmsg="$errmsg Write to NVRam failed!"'\n'
 
   /etc/start_scripts/dhcp_dns.sh restart >/dev/null 2>/dev/null
@@ -229,7 +230,7 @@
 '<DIV id=c_border>' \
 '<DIV id=c_pfad>Network settings / DHCP</DIV>' \
 '<DIV id=c_titel>DHCP-Server</DIV>' \
-'<form id="xform" name="xform" methode="post">' \
+'<form id="xform" name="xform" method="post">' \
 '<DIV id=c_leer>' \
 '<table border="0" cellpadding="0" cellspacing="2">' \
 '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0) >' \
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/disconnect.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/disconnect.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/disconnect.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/disconnect.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -7,11 +7,14 @@
 
 [ "$R1" = "V1" ] && disconnect_start_submit="0"
 [ "$R1" = "V2" ] && disconnect_start_submit="1"
+[ "$R2" = "V1" ] && disconnect_reboot_submit="0"
+[ "$R2" = "V2" ] && disconnect_reboot_submit="1"
 
 disconnect_start=`/bin/nvram get disconnect_start`
 disconnect_hour=`/bin/nvram get disconnect_hour`
 disconnect_minute=`/bin/nvram get disconnect_minute`
 disconnect_delay=`/bin/nvram get disconnect_delay`
+disconnect_reboot=`/bin/nvram get disconnect_reboot`
 
 #### Formular-Auswertung #######################################################
 #SAVE
@@ -22,6 +25,11 @@
     disconnect_start=$disconnect_start_submit
     run="1"
   fi
+  if [ "$disconnect_reboot" !=  "$disconnect_reboot_submit" ]; then
+    res=`/bin/nvram set disconnect_reboot=$disconnect_reboot_submit`
+    disconnect_reboot=$disconnect_reboot_submit
+    run="1"
+  fi
   err=0
   errmsg=""
   h=""
@@ -44,6 +52,7 @@
   fi
  fi
 #RUN
+ [ "$run" = "1" ] && /bin/nvram commit >/dev/null
  [ "$action" = "3" ] && [ "$run" = "1" ] && /etc/start_scripts/disconnect.sh restart >/dev/null 2>/dev/null
 ################################################################################
 
@@ -57,6 +66,13 @@
   disconnect_start="0"
 fi
 
+dis_reboot_on=''
+dis_reboot_off='checked="checked"'
+if [ "$disconnect_reboot" = "1" ]; then
+  dis_reboot_on='checked="checked"'
+  dis_reboot_off=''
+fi
+
 [ -z "$disconnect_hour" ] || [ $disconnect_hour = "Failed" ] || [ $disconnect_hour -lt 0 ] || [ $disconnect_hour -gt 24 ] && disconnect_hour="4" >/dev/null 2>/dev/null
 [ -z "$disconnect_minute" ] || [ $disconnect_minute = "Failed" ] || [ $disconnect_minute -lt 0 ] || [ $disconnect_minute -gt 59 ] && disconnect_minute="0" >/dev/null 2>/dev/null
 [ -z "$disconnect_delay" ] || [ "$disconnect_delay" = "Failed" ] || [ $disconnect_delay -lt 0 ] || [ $disconnect_delay -gt 59 ] && disconnect_delay="1" >/dev/null 2>/dev/null
@@ -91,21 +107,31 @@
     '<BODY onload="showErr();"' \
     '<DIV id=c_Frame>' \
     '<DIV id=c_border>' \
-    '<DIV id=c_pfad>Additional functions / Auto disconnect</DIV>' \
-    '<DIV id=c_titel>Auto disconnect</DIV>' \
+    '<DIV id=c_pfad>Additional functions / Auto disconnect/reboot</DIV>' \
+    '<DIV id=c_titel>Auto disconnect/reboot</DIV>' \
     '<DIV id=c_std>' \
     '<form id="xform" name="xform" method="post">' \
     '<table border="0" cellpadding="0" cellspacing="2">' \
     '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0)>' \
-    '<td width=\"90\">Disconnect</td>' \
+    '<td width=\"90\">Setting</td>' \
     "<td width=\"20\"><input type=\"radio\" name=\"R1\" value=\"V1\" $disconnect_off></td>" \
-    '<td width="40">Off</td>' \
+    '<td width="70">Off</td>' \
     "<td width=\"20\"><input type=\"radio\" name=\"R1\" value=\"V2\" $disconnect_on></td>" \
     '<td>On</td>' \
     '</tr></table>' \
     '</DIV>' \
     '<DIV id=c_std>' \
     '<table border="0" cellpadding="0" cellspacing="2">' \
+    '<tr onmouseover=i_showElem(4) onmouseout=i_showElem(0)>' \
+    '<td width=\"90\">Action</td>' \
+    "<td width=\"20\"><input type=\"radio\" name=\"R2\" value=\"V1\" $dis_reboot_off></td>" \
+    '<td width="70">Disconnect</td>' \
+    "<td width=\"20\"><input type=\"radio\" name=\"R2\" value=\"V2\" $dis_reboot_on></td>" \
+    '<td>Reboot</td>' \
+    '</tr></table>' \
+    '</DIV>' \
+    '<DIV id=c_std>' \
+    '<table border="0" cellpadding="0" cellspacing="2">' \
     '<tr onmouseover=i_showElem(2) onmouseout=i_showElem(0)>' \
     '<td width=\"90\">Time</td>' \
     "<td width=\"20\"><input type=\"text\" id =\"hour\" name=\"T1\" size=\"2\" maxlength=\"2\" value=\"$disconnect_hour\"></td>" \
@@ -138,30 +164,34 @@
     '<DIV id=i_Frame>' \
     '<DIV id=i_content>' \
     '<h2>Auto disconnect</h2>' \
-    '<p>Control scheduled disconnect of WAN-connection</p>' \
+    '<p>Control scheduled disconnect of WAN-connection or reboot</p>' \
     '</DIV>' \
     '<DIV id=i_content1>' \
-    '<h2>Auto disconnect</h2>' \
-    '<p><b>On/Off</b><br>Do auto disconnect yes/no</p>' \
+    '<h2>Auto disconnect/reboot</h2>' \
+    '<p><b>On/Off</b><br>Do auto disconnect or reboot yes/no</p>' \
     '<p><img src="../pic_i_hinweis.gif" border="0"><br /> Setting is checked on next Reboot</p>' \
     '</DIV>' \
     '<DIV id=i_content2>' \
-    '<h2>Auto disconnect</h2>' \
+    '<h2>Auto disconnect/reboot</h2>' \
     '<p><b>Time setting</b><br>Set time for auto-disconnect</p>' \
     '<p><img src="../pic_i_hinweis.gif" border="0"><br /> values have to be in valid hour/minute range</p>' \
     '</DIV>' \
     '<DIV id=i_content3>' \
-    '<h2>Auto disconnect</h2>' \
+    '<h2>Auto disconnect/reboot</h2>' \
     '<p><b>Delay setting</b><br>Set delay between disconnect and reconnect</p>' \
     '<p><img src="../pic_i_hinweis.gif" border="0"><br /> value has to be between [1-3600]</p>' \
     '</DIV>' \
+    '<DIV id=i_content4>' \
+    '<h2>Auto disconnect/reboot</h2>' \
+    '<p><b>Action setting</b><br>Choose between Disconnect or Reboot</p>' \
+    '</DIV>' \
     '<DIV id=i_content6>' \
-    '<h2>Auto disconnect</h2>' \
+    '<h2>Auto disconnect/reboot</h2>' \
     '<p><b>Save</b><br>Saves changed settings to NVRAM</p>' \
     '<p><img src="../pic_i_hinweis.gif" border="0"><br /> Changes only occur when restarting disconnect</p>' \
     '</DIV>' \
     '<DIV id=i_content7>' \
-    '<h2>Auto disconnect</h2>' \
+    '<h2>Auto disconnect/reboot</h2>' \
     '<p><b>Save&amp;Run</b><br>Save changed settings to NVRAM and set new values for disconnect with new settings</p>' \
     '<p><img src="../pic_i_hinweis.gif" border="0"><br /> Changes are safed permanently</p>' \
     '</DIV>' \
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/dns.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/dns.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/dns.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/dns.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -12,6 +12,7 @@
 [ "$DNSHOSTS" = "Failed" ] && DNSHOSTS=""
 
 err=0
+mustsave=0
 ########################### Add #####################################
 if [ "$action" -eq 10 ]; then
   
@@ -27,6 +28,7 @@
  if [ "$err" -eq 0 ]; then
  DNSHOSTS=$DNSHOSTS"$hostip,$hostname~"
  res=`nvram set dnshosts=$DNSHOSTS`
+ mustsave=1 
  [ "$res" != "OK" ] && errmsg="$errmsg Write to NVRam failed!"'\n'
 
  hostip=""
@@ -54,9 +56,9 @@
 
  if [ "$err" -eq 0 ]; then
   err=0
-  [ "$dns_start" != "`nvram get dns_start`" ] && res=`nvram set dns_start=$dns_start` && [ "$res" != "OK" ] && err=1
+  [ "$dns_start" != "`nvram get dns_start`" ] && mustsave=1 && res=`nvram set dns_start=$dns_start` && [ "$res" != "OK" ] && err=1
   
-  [ "$domain" != "`nvram get dns_domain`" ] && res=`nvram set dns_domain=$domain` && [ "$res" != "OK" ] && err=1
+  [ "$domain" != "`nvram get dns_domain`" ] && mustsave=1 && res=`nvram set dns_domain=$domain` && [ "$res" != "OK" ] && err=1
 
   [ "$err" -ne 0 ] && errmsg="$errmsg Write to NVRam failed!"'\n'
 
@@ -65,6 +67,7 @@
 
 fi
 
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
 
 dns_start=`nvram get dns_start`
 dns_on=''
@@ -123,7 +126,7 @@
 '<DIV id=c_border>' \
 '<DIV id=c_pfad>Network settings / DNS</DIV>' \
 '<DIV id=c_titel>DNS-Server</DIV>' \
-'<form id="xform" name="xform" methode="post">' \
+'<form id="xform" name="xform" method="post">' \
 '<DIV id=c_last>' \
 '<table border="0" cellpadding="0" cellspacing="2">' \
 '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0) >' \
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/index2.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/index2.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/index2.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/index2.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -12,6 +12,13 @@
 [ "$discon_start" -eq "1" ] && discon_on='On'
 
 
+call_mon_start=`/bin/nvram get call_mon_start`
+call_mon_on='Off'
+if [ "$call_mon_start" = "Failed" ]; then
+  call_mon_start="0"
+fi
+[ "$call_mon_start" -eq "1" ] && call_mon_on='On'
+
 echo '<SCRIPT language="JavaScript" src="../js_fade.txt" type="text/JavaScript"></SCRIPT>' \
     '<SCRIPT language="JavaScript" src="../js_menu.txt" type="text/JavaScript"></SCRIPT>' \
     '<LINK rel="stylesheet" href="../style.css" type="text/css">' \
@@ -27,11 +34,17 @@
     "	<td width=\"200\"><a href=\"wol.cgi?session_id=$session_id\" onmouseover=i_showElem(1) onmouseout=i_showElem(0) target=\"hcti\"><b>&gt;&gt; </b>Wake-on-LAN</a></td></tr>" \
     '</table>' \
     '</DIV>' \
-    '<DIV id=c_linklast>' \
+    '<DIV id=c_link>' \
     '<table border="0" cellpadding="4" cellspacing="0">' \
-    "<tr> <td width=\"200\"><a href=\"disconnect.cgi?session_id=$session_id\" onmouseover=i_showElem(2) onmouseout=i_showElem(0) target=\"hcti\"><b>&gt;&gt; </b>Auto-Disconnect</a></td>" \
+    "<tr> <td width=\"200\"><a href=\"disconnect.cgi?session_id=$session_id\" onmouseover=i_showElem(2) onmouseout=i_showElem(0) target=\"hcti\"><b>&gt;&gt; </b>Auto-Disconnect/Reboot</a></td>" \
     "<td>$discon_on</td>" \
-    '</tr>  </table>' \
+    '</tr></table>' \
+    '</DIV>' \
+    '<DIV id=c_linklast>' \
+    '<table border="0" cellpadding="4" cellspacing="0">' \
+    "<tr> <td width=\"200\"><a href=\"call_mon.cgi?session_id=$session_id\" onmouseover=i_showElem(6) onmouseout=i_showElem(0) target=\"hcti\"><b>&gt;&gt; </b>Call monitor</a></td>" \
+    "<td>$call_mon_on</td>" \
+    '</tr></table>' \
     '</DIV>' \
     '<DIV id="c_leer"></DIV>' \
     '<div id="c_titel">Save &amp; Load</div>' \
@@ -68,8 +81,8 @@
     '</DIV>' \
     '<DIV id=i_content2>' \
     '<h2>Additional functions</h2>' \
-    '<p><b>Auto-Disconnect</b><br>' \
-    'Time-driven DSL Auto-Disconnect and Reconnect</p>' \
+    '<p><b>Auto-Disconnect/Reboot</b><br>' \
+    'Time-driven DSL Auto-Disconnect and Reconnect or Reboot</p>' \
     '</DIV>' \
     '<DIV id=i_content3>' \
     '<h2>Save &amp; Load</h2>' \
@@ -86,4 +99,9 @@
     '<p><b>Reset BS-Settings</b><br>' \
     'Reset the BitSwitcher-part of the NVRAM.</p>' \
     '</DIV>' \
+    '<DIV id=i_content6>' \
+    '<h2>Additional functions</h2>' \
+    '<p><b>Call monitor</b><br>' \
+    'If you want to get notified in real-time about incoming calls, you may want to try this.</p>' \
+    '</DIV>' \
     '</DIV></BODY></HTML>'
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/lan.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/lan.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/lan.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/lan.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -11,21 +11,30 @@
 IP=`ifconfig br0|grep "inet addr"|sed -n -e 's/^.*addr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*Bcast.*/\1/p'`
 MASK=`ifconfig br0|grep "inet addr"|sed -n -e 's/^.*Mask:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p'`
 
+mustsave=0
+
 if [ "$action" -ne 0 ]; then
  if [ "$gateway" != "" ]; then
   gateway=`isip.sh $gateway`
-  [ "$gateway" = "ERROR" ] && errmsg="$errmsg Invalid IP address!"'\n' && err=1
-  fi
+  [ "$gateway" = "ERROR" ] && errmsg="$errmsg Invalid Gateway IP-address!"'\n' && err=1
+ fi
+ if [ "$dns_submit" != "" ]; then
+  dns_submit=`isip.sh $dns_submit`
+  [ "$dns_submit" = "ERROR" ] && errmsg="$errmsg Invalid DNS-Server IP-address!"'\n' && err=1
+ fi
 
  if [ "$err" -ne 1 ]; then
   # Run
   if [ "$action" -eq 1 ] || [ "$action" -eq 3 ]; then
    ifconfig br0 down; ifconfig br0 up && [ "$gateway" != "" ] && ret=`route add default gw "$gateway" br0 2>&1` && [ "$ret" != "" ] && ( echo $ret|grep "File exists" >/dev/null && ret=0 || ( errmsg="$errmsg Network is unreachable!"'\n' && ret=1 ) ) || ret=0
+   [ "$dns_submit" != "" ] && mkdir -p /var/fyi/sys/ && echo "nameserver $dns_submit" >/var/fyi/sys/dns
+   [ "$dns_submit" = "" ] && mkdir -p /var/fyi/sys/ && echo "" >/var/fyi/sys/dns
   fi
 
   # Save
   if [ "$ret" -eq 0 ] && [ "$action" -eq 2 ] || [ "$action" -eq 3 ]; then
-   [ "$gateway" != "`nvram get gateway`" ] && res=`nvram set gateway=$gateway` && [ "$res" != "OK" ] && err=1
+   [ "$gateway" != "`nvram get gateway`" ] && mustsave=1 && res=`nvram set gateway=$gateway` && [ "$res" != "OK" ] && err=1
+   [ "$dns_submit" != "`nvram get dns_server`" ] && mustsave=1 && res=`nvram set dns_server=$dns_submit` && [ "$res" != "OK" ] && err=1
   fi
 
   [ "$err" -ne 0 ] && errmsg="$errmsg Write to NVRam failed!"'\n'
@@ -33,10 +42,15 @@
 
 fi
 
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
+
 DEFAULT=`route|grep 'default'|grep br0|sed -n -e 's/default\W*\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*.*/\1/p'`
+DNS_NOW=`cat /etc/resolv.conf 2>/dev/null|sed -n -e 's/^nameserver \([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p'`
 
 gateway=`nvram get gateway`
+dns=`nvram get dns_server`
 [ "$gateway" = "Failed" ] && gateway=""
+[ "$dns" = "Failed" ] && dns=""
 
 
 echo '<SCRIPT language="JavaScript" src="../js_fade.txt" type="text/JavaScript"></SCRIPT>' \
@@ -52,9 +66,11 @@
 '}' \
 'function subm(x) {' \
 'var gateway=document.getElementById("gateway").value;' \
+'var dns_submit=document.getElementById("dns_submit").value;' \
 "var subnet='$MASK';" \
 "var ip='$IP';" \
 'if(gateway!="" && !isValidIpAddress(gateway)){alert("Gateway address is invalid!");return;}' \
+'if(dns_submit!="" && !isValidIpAddress(dns_submit)){alert("DNS-Server address is invalid!");return;}' \
 'if(gateway!="" && !isSameSubNet(ip,subnet,gateway,subnet)){alert("Gateway is in wrong subnet!");return;}' \
 'load();' \
 'document.getElementById("action").value=x;' \
@@ -71,12 +87,10 @@
 '<DIV id=c_border>' \
 '<DIV id=c_pfad>Network settings / LAN</DIV>' \
 '<DIV id=c_titel>Default Gateway</DIV>' \
-'<form id="xform" name="xform" methode="post">' \
+'<form id="xform" name="xform" method="post">' \
 '<DIV id=c_std>' \
 '<table border="0" cellpadding="0" cellspacing="2">' \
 '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0) >' \
-'<input id="action" type="hidden" name="action" value="0">' \
-"<input type=\"hidden\" name=\"session_id\" value=\"$session_id\">" \
 '<td width="120">local Gateway:</td>' \
 "<td><input type=\"text\" id=\"gateway\" name=\"gateway\" size=\"16\" maxlength=\"15\" value=\"$gateway\"></td>" \
 '</tr></table>' \
@@ -90,6 +104,24 @@
 '</tr></table>' \
 '</DIV>' \
 '<DIV id=c_leer></DIV>' \
+'<DIV id=c_std>' \
+'<table border="0" cellpadding="0" cellspacing="2">' \
+'<tr onmouseover=i_showElem(3) onmouseout=i_showElem(0) >' \
+'<input id="action" type="hidden" name="action" value="0">' \
+"<input type=\"hidden\" name=\"session_id\" value=\"$session_id\">" \
+'<td width="120">DNS-Server:</td>' \
+"<td><input type=\"text\" id=\"dns_submit\" name=\"dns_submit\" size=\"16\" maxlength=\"15\" value=\"$dns\"></td>" \
+'</tr></table>' \
+'</DIV>' \
+'<DIV id=c_last>' \
+'<table border="0" cellpadding="0" cellspacing="2">' \
+'<table border="0" cellpadding="0" cellspacing="2">' \
+'<tr onmouseover=i_showElem(4) onmouseout=i_showElem(0) >' \
+'<td width="120">current DNS-Server:</td>' \
+"<td><input type=\"text\" id=\"c_dns\" name=\"c_dns\" size=\"16\" maxlength=\"15\" value=\"$DNS_NOW\" readonly=\"readonly\"></td>" \
+'</tr></table>' \
+'</DIV>' \
+'<DIV id=c_leer></DIV>' \
 '<DIV id=c_foot></DIV>' \
 '</DIV>' \
 '<DIV id=c_verzoeg1></DIV>' \
@@ -100,7 +132,7 @@
 '<DIV id=t_but2 onclick="subm(1);" onmouseover=rahmen(1,2) onmouseout=rahmen(0,2)>Run &lt;&lt;</DIV>' \
 '<DIV id=t_but3 onclick="subm(2);" onmouseover=rahmen(1,3) onmouseout=rahmen(0,3)>Save &lt;&lt;</DIV>' \
 '<DIV id=t_but4 onclick="subm(3);" onmouseover=rahmen(1,4) onmouseout=rahmen(0,4)>Save &amp; Run</DIV>' \
-'</DIV>' \
+'</form></DIV>'\
 '<DIV id=i_Frame>' \
 '<DIV id=i_content>' \
 '<h2>LAN</h2>' \
@@ -112,7 +144,15 @@
 '</DIV>' \
 '<DIV id=i_content2>' \
 '<h2>current Gateway</h2>' \
-'This field shows the the local Gateway in use if it is set.</p>' \
+'This field shows the local Gateway in use if it is set.</p>' \
+'</DIV>' \
+'<DIV id=i_content3>' \
+'<h2>DNS-Server</h2>' \
+'If you want to set a different DNS-Server then enter it here.</p><p>This option is naturally needed if the ADSL-Modem is not in use.</p>' \
+'</DIV>' \
+'<DIV id=i_content4>' \
+'<h2>current DNS-Server</h2>' \
+'This field shows the current DNS-Server if it is set.</p>' \
 '</DIV>' \
 '</DIV></BODY></HTML>'
 
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/reset.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/reset.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/reset.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/reset.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -4,7 +4,7 @@
 action=0
 
 . ./login.cgi
-[ "$action" = "1" ] && nvram reset >/dev/null && nvram reboot >/dev/null
+[ "$action" = "1" ] && nvram reset >/dev/null && nvram commit >/dev/null && nvram reboot >/dev/null
 
 HOME="index2.cgi"
 
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/ssh.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/ssh.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/ssh.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/ssh.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -30,11 +30,13 @@
 #### Formular-Auswertung #######################################################
 #RENEW KEYS
 ret=0
+mustsave=0
 if [ "$action" -eq 4 ]; then
   #echo '<h2>Creating new DSS-Key</h2>'
   res=`/bin/dropbearkey -t dss -s 1024 -f /var/tmp_dss`
   #echo '<h2>Setting new DSS-Key to NVRAM</h2>'
   res=`/bin/nvram setfile ssh_dss_key=/tmp/tmp_dss && rm -f /var/tmp_dss`
+  mustsave=1
   if [ "$res" != "OK" ]; then
     ret=1
   fi
@@ -45,6 +47,7 @@
   if [ "$res" != "OK" ]; then
     ret=1
   fi
+  mustsave=1
 fi
 #SAVE 
 if [ "$action" -eq 2 ] || [ "$action" -eq 3 ]; then 
@@ -54,6 +57,7 @@
     if [ "$res" != "OK" ]; then
       ret=1
     fi
+    mustsave=1
   fi
   if [ "$ssh_port" !=  "$T1" ]; then
     if [ "$port" -ge "1" -o "$port" -le "65534" ]; then
@@ -70,6 +74,7 @@
     if [ "$res" != "OK" ]; then
       ret=1
     fi
+    mustsave=1
   fi
 fi
 #RUN or RENEW
@@ -87,6 +92,8 @@
 fi
 ################################################################################
 
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
+
 ssh_start=`/bin/nvram get ssh_start`
 ssh_on=''
 ssh_off='checked="checked"'
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/stproxy.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/stproxy.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/stproxy.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/stproxy.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -29,6 +29,7 @@
 #### Formular-Auswertung #######################################################
 #SAVE
 ret=0
+mustsave=0
 if [ "$action" -eq 2 ] || [ "$action" -eq 3 ]; then 
   if [ "$stproxy_start" != "$stproxy_start_submit" ]; then
 #echo '<h2>Setting stproxy_start to NVRAM...</h2>'
@@ -36,6 +37,7 @@
     if [ "$res" != "OK" ]; then
       ret=1
     fi
+    mustsave=1
   fi
   save_file="0"
   if [ "$stproxy_port" != "$T1" ]; then
@@ -71,6 +73,7 @@
   fi
   if [ "$save_file" = "1" ]; then
     res=`/bin/nvram setfile stproxy_config=/var/stproxy.conf`
+    mustsave=1
     if [ "$res" != "OK" ]; then
       ret=1
     fi
@@ -78,6 +81,7 @@
   if [ "$stproxy_open" != "$stproxy_open_submit" ]; then
 #echo '<h2>Setting stproxy_fw_open to NVRAM...</h2>'
     res=`/bin/nvram set stproxy_fw_open=$stproxy_open_submit`
+    mustsave=1
     if [ "$res" != "OK" ]; then
       ret=1
     fi
@@ -85,6 +89,7 @@
   if [ "$stproxy_admin_open" != "$stproxyadmin_open_submit" ]; then
 #echo '<h2>Setting stproxyadmin_fw_open to NVRAM...</h2>'
     res=`/bin/nvram set stproxyadmin_fw_open=$stproxyadmin_open_submit`
+    mustsave=1
     if [ "$res" != "OK" ]; then
       ret=1
     fi
@@ -105,8 +110,7 @@
 fi
 ################################################################################
 
-
-
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
 
 stproxy_start=`/bin/nvram get stproxy_start`
 stproxy_on=''
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/telnet.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/telnet.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/telnet.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/telnet.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -17,6 +17,8 @@
 [ "$R2" = "V2" ] && telnet_open_submit="1"
 telnet_open=`/bin/nvram get telnet_fw_open`
 telnet_start=`/bin/nvram get telnet_start`
+mustsave=0
+
 #### Formular-Auswertung #######################################################
 #SAVE 
  if [ "$action" -eq 2 ] || [ "$action" -eq 3 ]; then 
@@ -26,6 +28,7 @@
     if [ "$res" != "OK" ]; then
       ret=1
     fi
+    mustsave=1
   fi
   if [ "$telnet_open" !=  "$telnet_open_submit" ]; then
     #echo '<h2>Setting telnet_fw_open to NVRAM...</h2>'
@@ -33,6 +36,7 @@
     if [ "$res" != "OK" ]; then
       ret=1
     fi
+    mustsave=1
   fi
  fi
 #RUN
@@ -50,6 +54,8 @@
  fi
 ################################################################################
 
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
+
 telnet_start=`/bin/nvram get telnet_start`
 telnet_on=''
 telnet_off='checked="checked"'
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/voip.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/voip.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/voip.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/voip.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -21,6 +21,7 @@
  #SAVE 
  if [ "$action" -eq 2 ] || [ "$action" -eq 3 ]; then 
      /bin/nvram set voip_start=$voip_start >/dev/null
+     /bin/nvram commit >/dev/null
  fi
 ################################################################################
 
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/voip_conf.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/voip_conf.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/voip_conf.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/voip_conf.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -16,6 +16,7 @@
 PATH=.:$PATH
 
 errmsg=""
+mustsave=0
 ####### Save & Run #######
 if [ "$action" -eq 3 ]; then
 
@@ -49,16 +50,16 @@
  err=0
  [ "$ata_start" != "`nvram get ata_start`" ] && res=`nvram set ata_start=$ata_start` && [ "$res" != "OK" ] && err=1
 
- [ "$reg" != "`nvram get ata_reg`" ] && res=`nvram set ata_reg=$reg` && [ "$res" != "OK" ] && err=1
+ [ "$reg" != "`nvram get ata_reg`" ] && mustsave=1 && res=`nvram set ata_reg=$reg` && [ "$res" != "OK" ] && err=1
 # [ "$prox" != "`nvram get ata_prox`" ] && res=`nvram set ata_prox=$prox` && [ "$res" != "OK" ] && err=1
- [ "$regport" != "`nvram get ata_regport`" ] && res=`nvram set ata_regport=$regport` && [ "$res" != "OK" ] && err=1
+ [ "$regport" != "`nvram get ata_regport`" ] && mustsave=1 && res=`nvram set ata_regport=$regport` && [ "$res" != "OK" ] && err=1
 # [ "$proxport" != "`nvram get ata_proxport`" ] && res=`nvram set ata_proxport=$proxport` && [ "$res" != "OK" ] && err=1
- [ "$pass" != "`nvram get ata_pass`" ] && res=`nvram set ata_pass=$pass` && [ "$res" != "OK" ] && err=1
- [ "$uname" != "`nvram get ata_uname`" ] && res=`nvram set ata_uname=$uname` && [ "$res" != "OK" ] && err=1
- [ "$domain" != "`nvram get ata_domain`" ] && res=`nvram set ata_domain=$domain` && [ "$res" != "OK" ] && err=1
- [ "$ext1" != "`nvram get ata_ext1`" ] && res=`nvram set ata_ext1=$ext1` && [ "$res" != "OK" ] && err=1
- [ "$vad" != "`nvram get ata_vad`" ] && res=`nvram set ata_vad=$vad` && [ "$res" != "OK" ] && err=1
- [ "$bovc" != "`nvram get ata_bovc`" ] && res=`nvram set ata_bovc=$bovc` && [ "$res" != "OK" ] && err=1
+ [ "$pass" != "`nvram get ata_pass`" ] && mustsave=1 && res=`nvram set ata_pass=$pass` && [ "$res" != "OK" ] && err=1
+ [ "$uname" != "`nvram get ata_uname`" ] && mustsave=1 && res=`nvram set ata_uname=$uname` && [ "$res" != "OK" ] && err=1
+ [ "$domain" != "`nvram get ata_domain`" ] && mustsave=1 && res=`nvram set ata_domain=$domain` && [ "$res" != "OK" ] && err=1
+ [ "$ext1" != "`nvram get ata_ext1`" ] && mustsave=1 && res=`nvram set ata_ext1=$ext1` && [ "$res" != "OK" ] && err=1
+ [ "$vad" != "`nvram get ata_vad`" ] && mustsave=1 && res=`nvram set ata_vad=$vad` && [ "$res" != "OK" ] && err=1
+ [ "$bovc" != "`nvram get ata_bovc`" ] && mustsave=1 && res=`nvram set ata_bovc=$bovc` && [ "$res" != "OK" ] && err=1
 
  [ "$err" -ne 0 ] && errmsg="$errmsg Write to NVRam failed!"'\n'
  fi
@@ -66,6 +67,8 @@
 fi
 #############
 
+[ "$mustsave" -eq 1 ] && nvram commit >/dev/null
+
 ata_start=`nvram get ata_start`
 ata_on=''
 ata_off='checked="checked"'
@@ -135,7 +138,7 @@
 '<DIV id=c_border>' \
 "<DIV id=c_pfad>$f_pfad</DIV>" \
 '<DIV id=c_titel>analog Telefon Adapter</DIV>' \
-'<form id="xform" name="xform" methode="post">' \
+'<form id="xform" name="xform" method="post">' \
 '<DIV id=c_leer>' \
 '<table border="0" cellpadding="0" cellspacing="2">' \
 '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0) >' \
diff -urNa dev_tree/bs_extra/webs_extra/cgi-bin/wol.cgi dev_tree_new/bs_extra/webs_extra/cgi-bin/wol.cgi
--- dev_tree/bs_extra/webs_extra/cgi-bin/wol.cgi	2008-04-12 23:04:22.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/cgi-bin/wol.cgi	2008-06-06 16:34:02.000000000 +0200
@@ -68,7 +68,7 @@
 '<DIV id=c_border>' \
 '<DIV id=c_pfad>Additional functions / Wake on LAN</DIV>' \
 '<DIV id=c_titel>Wake on LAN</DIV>' \
-'<form id="xform" name="xform" methode="post">' \
+'<form id="xform" name="xform" method="post">' \
 '<DIV id=c_std>' \
 '<table border="0" cellpadding="0" cellspacing="2">' \
 '<tr onmouseover=i_showElem(1) onmouseout=i_showElem(0) >' \
diff -urNa dev_tree/bs_extra/webs_extra/index.htm dev_tree_new/bs_extra/webs_extra/index.htm
--- dev_tree/bs_extra/webs_extra/index.htm	2008-04-11 13:22:06.000000000 +0200
+++ dev_tree_new/bs_extra/webs_extra/index.htm	1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-        <title>Main Page</title>
-        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-        <meta http-equiv="refresh" content="1; URL=cgi-bin/index.cgi">
-</head>
-<body>
-</body>
-</html>
diff -urNa dev_tree/Makefile dev_tree_new/Makefile
--- dev_tree/Makefile	2008-04-11 13:22:07.000000000 +0200
+++ dev_tree_new/Makefile	2008-06-06 16:34:02.000000000 +0200
@@ -116,8 +116,8 @@
 CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-uclibc-
 endif
 else
-TOOLCHAIN=/usr/crossdev/mips
-CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-
+TOOLCHAIN=/opt/toolchains/uclibc-crosstools
+CROSS_COMPILE = $(TOOLCHAIN)/bin/mips-linux-uclibc-
 endif
 
 AR              = $(CROSS_COMPILE)ar
diff -urNa dev_tree/targets/fs.src/etc/ethertypes dev_tree_new/targets/fs.src/etc/ethertypes
--- dev_tree/targets/fs.src/etc/ethertypes	2008-04-11 14:09:43.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/ethertypes	2008-06-06 16:35:15.000000000 +0200
@@ -34,4 +34,6 @@
 PPP_DISC	8863			# PPPoE discovery messages
 PPP_SES		8864			# PPPoE session messages
 ATMFATE		8884			# Frame-based ATM Transport over Ethernet
+EAPOL		888E
 LOOP		9000	loopback 	# loop proto
+
diff -urNa dev_tree/targets/fs.src/etc/inittab dev_tree_new/targets/fs.src/etc/inittab
--- dev_tree/targets/fs.src/etc/inittab	2008-04-11 13:22:28.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/inittab	2008-06-06 16:35:15.000000000 +0200
@@ -1,5 +1,4 @@
 ::sysinit:/etc/init.d/rcS
 ::respawn:-/bin/sh
-tty2::askfirst:-/bin/sh
 ::ctrlaltdel:/bin/umount -a -r
 
diff -urNa dev_tree/targets/fs.src/etc/issue.net dev_tree_new/targets/fs.src/etc/issue.net
--- dev_tree/targets/fs.src/etc/issue.net	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/issue.net	2008-06-06 16:35:15.000000000 +0200
@@ -15,5 +15,5 @@
 +++++++++++++++++++++++++++++++++#############+++++++++++++++++++++++++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 +-----------------------------------------------------------------------------+
-| bitswitcher image - Version 0.2.0 - build: 11.04.2008                       |
+| bitswitcher image - Version 0.2.1 - build: 06.06.2008                       |
 +-----------------------------------------------------------------------------+
diff -urNa dev_tree/targets/fs.src/etc/profile dev_tree_new/targets/fs.src/etc/profile
--- dev_tree/targets/fs.src/etc/profile	2008-04-11 16:06:28.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/profile	2008-06-06 16:35:15.000000000 +0200
@@ -20,7 +20,7 @@
  insmod /lib/modules/$KERNELVER/extra/bcm_usb.ko
  test -e /lib/modules/$KERNELVER/extra/wl.ko && insmod /lib/modules/$KERNELVER/extra/wl.ko
  test -e /lib/modules/$KERNELVER/extra/endpointdd.ko && insmod /lib/modules/$KERNELVER/extra/endpointdd.ko
- cfm
+ cfm >/dev/null 2>/dev/null </dev/pty/9 &
  echo "Done"
 fi
 
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/call_mon.sh dev_tree_new/targets/fs.src/etc/start_scripts/call_mon.sh
--- dev_tree/targets/fs.src/etc/start_scripts/call_mon.sh	1970-01-01 01:00:00.000000000 +0100
+++ dev_tree_new/targets/fs.src/etc/start_scripts/call_mon.sh	2008-06-06 16:35:15.000000000 +0200
@@ -0,0 +1,58 @@
+#!/bin/sh
+#
+# Start/stops vodsl call monitor
+#
+#
+PATH=/bin/:$PATH
+
+case "$1" in
+	start)
+	        echo "Starting vodsl call monitor"
+		autostart=`nvram get vodsl_monitor`
+                if [ "$autostart" != "Failed" ]; then
+                  start=$autostart
+                else
+                  nvram set vodsl_monitor=1 >/dev/null
+                  start="1"
+                fi
+		if [ "$start" = "1" ]; then
+		  server_start=`nvram get call_mon_start`
+		  server_port=`nvram get call_mon_port`
+		  server=""
+		  if [ "$server_port" != "Failed" ]; then
+ 		    server_port="-p $server_port"
+		  else
+		    server_port=""
+		  fi
+		  if [ "$server_start" = "1" ]; then
+		    server=$server_port
+		  else
+		    server="-n"
+		  fi
+
+		  vodsl_monitor -s /usr/bin/call_mon_event.sh $server -D
+		fi
+		;;
+	stop)
+	        echo "Stopping vodsl call monitor"
+		killall vodsl_monitor >/dev/null 2>/dev/null
+		i=0
+		while [ "`pidof vodsl_monitor`" -ne 0 ]
+		do
+		  [ $i -ge 10 ] && killall -9 vodsl_monitor
+		  let i=$i+1
+		  usleep 100000
+		done
+		;;
+	restart)
+		$0 stop
+		sleep 1
+		$0 start
+		;;
+	*)
+		echo "Usage: /etc/start_scripts/call_mon.sh {start|stop|restart}"
+		exit 1
+		;;
+esac
+
+exit 0
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/custom.sh dev_tree_new/targets/fs.src/etc/start_scripts/custom.sh
--- dev_tree/targets/fs.src/etc/start_scripts/custom.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/custom.sh	2008-06-06 16:35:15.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -12,7 +13,8 @@
                 if [ "$autostart" != "Failed" ]; then
                   custom_start=$autostart
                 else
-                  `/bin/nvram set custom_start=0`
+                  /bin/nvram set custom_start=0 >/dev/null
+                  must_save=1
                   custom_start="0"
                 fi
 		if [ "$custom_start" = "1" ]; then
@@ -20,6 +22,7 @@
 		  /bin/sh /var/custom_script.sh
 		  #rm -f /var/custom.sh
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Custom script cant be stopped"
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/dhcp_conf.sh dev_tree_new/targets/fs.src/etc/start_scripts/dhcp_conf.sh
--- dev_tree/targets/fs.src/etc/start_scripts/dhcp_conf.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/dhcp_conf.sh	2008-06-06 16:35:15.000000000 +0200
@@ -2,6 +2,7 @@
 
 DHCP_CONF="/var/dhcp.dnsmasq"
 
+must_save=0
 
 start=`nvram get dhcp_start`
 if [ "$start" = "Failed" ]; then
@@ -21,12 +22,14 @@
  nvram set dhcp_dns2=""
  nvram set dhcp_dns3=""
  nvram set dhcp_dns4=""
+ must_save=1
 
  start=1
 fi
 
 if [ "$start" != "1" ]; then
  echo "" > $DHCP_CONF
+ [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
  exit 0
 fi
 
@@ -65,6 +68,7 @@
    custom_start=$dhcp_custom_start
 else
    /bin/nvram set dhcp_custom_start=0
+   must_save=1
    custom_start="0"
 fi
 if [ "$custom_start" = "1" ]; then
@@ -87,3 +91,4 @@
 
 echo -e "dhcp-lease-max=50"'\n'"dhcp-leasefile=/var/dnsmasq.leases"'\n'"dhcp-authoritative"'\n'"cache-size=50"'\n' >> $DHCP_CONF
 
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/dhcp_dns.sh dev_tree_new/targets/fs.src/etc/start_scripts/dhcp_dns.sh
--- dev_tree/targets/fs.src/etc/start_scripts/dhcp_dns.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/dhcp_dns.sh	2008-06-06 16:35:15.000000000 +0200
@@ -31,7 +31,7 @@
 		$0 start
 		;;
 	*)
-		echo "Usage: /etc/start_scripts/dnsmasq {start|stop|restart}"
+		echo "Usage: /etc/start_scripts/dhcp_dns.sh {start|stop|restart}"
 		exit 1
 		;;
 esac
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/disconnect.sh dev_tree_new/targets/fs.src/etc/start_scripts/disconnect.sh
--- dev_tree/targets/fs.src/etc/start_scripts/disconnect.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/disconnect.sh	2008-06-06 16:35:15.000000000 +0200
@@ -9,6 +9,8 @@
 standard_delay=10
 CRONDIR="/var/spool/cron/crontabs/"
 
+must_save=0
+
 case "$1" in
 	start)
 	        echo "Setting disconnect"
@@ -17,36 +19,48 @@
                   disconnect_start=$autostart
                 else
                   /bin/nvram set disconnect_start=$standard_start >/dev/null
+                  must_save=1
                   disconnect_start="$standard_start"
                 fi
+                autostart=`/bin/nvram get disconnect_reboot`
+                if [ "$autostart" != "Failed" ]; then
+                  disconnect_reboot=$autostart
+                fi
 		if [ "$disconnect_start" = "1" ]; then
 		  hour=`/bin/nvram get disconnect_hour`
 		  if [ $hour -lt 0 ] || [ $hour -gt 23 ] || [ "$hour" = "Failed" ]; then
 		    echo "invalid value for disconnect_hour...setting standard value=$standard_hour\n"
 		    /bin/nvram set disconnect_hour=$standard_hour >/dev/null
+		    must_save=1
 		    hour=$standard_hour
 		  fi
                   minute=`/bin/nvram get disconnect_minute`
 		  if [ $minute -lt 0 ] || [ $minute -gt 59 ] || [ "$minute" = "Failed" ]; then
 		    echo "invalid value for disconnect_minute...setting standard value=$standard_minute\n"
 		    /bin/nvram set disconnect_minute=$standard_minute >/dev/null
+		    must_save=1
 		    minute=$standard_minute
 		  fi
                   delay=`/bin/nvram get disconnect_delay`
 		  if [ $delay -lt 1 ] || [ $delay -gt 3600 ] || [ "$delay" = "Failed" ]; then
 		    echo "invalid value for disconnect_delay...setting standard value=$standard_delay\n"
 		    /bin/nvram set disconnect_delay=$standard_delay >/dev/null
+		    must_save=1
 		    delay=$standard_delay
 		  fi
-
                   IP="ifconfig br0|grep \"inet addr\"|sed -n -e 's/^.*addr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*Bcast.*/\1/p'"
                   WGET="wget -O /dev/null http://\`$IP\`/cgi-bin"
                   mkdir -p $CRONDIR
                   #cronjob einfügen
-                  echo "$minute $hour * * * $WGET/disconnect.exe; sleep $delay; $WGET/connect.exe;" > $CRONDIR/root
+                  if [ "$disconnect_reboot" = "1" ]; then
+                    echo "$minute $hour * * * /bin/nvram reboot" > $CRONDIR/root
+                  else
+                    echo "$minute $hour * * * $WGET/disconnect.exe; sleep $delay; $WGET/connect.exe;" > $CRONDIR/root
+                  fi
                   #crond starten
                   crond
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping disconnect"
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/dns_conf.sh dev_tree_new/targets/fs.src/etc/start_scripts/dns_conf.sh
--- dev_tree/targets/fs.src/etc/start_scripts/dns_conf.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/dns_conf.sh	2008-06-06 16:35:15.000000000 +0200
@@ -3,18 +3,20 @@
 DNS_CONF="/var/dns.dnsmasq"
 HOSTS="/var/hosts"
 
+must_save=0
 start=`nvram get dns_start`
 if [ "$start" = "Failed" ]; then
 
  nvram set dns_start=1
  nvram set dns_domain="lan"
  nvram set dnshosts=""
-
+ must_save=1
  start=1
 fi
 
 if [ "$start" != "1" ]; then
  echo "" > $DNS_CONF
+ [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
  exit 0
 fi
 
@@ -31,6 +33,7 @@
    custom_start=$dns_custom_start
 else
    /bin/nvram set dns_custom_start=0
+   must_save=1
    custom_start="0"
 fi
 if [ "$custom_start" = "1" ]; then
@@ -48,3 +51,4 @@
 echo "$IP `cat /proc/sys/kernel/hostname`" >> $HOSTS
 echo $dnshosts|sed -e 's/~/\n/g'|sed -n -e '/^$/!p'|sed -e 's/^\(.*\),\(.*\)$/\1 \2/' >> $HOSTS
 
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/firewall.sh dev_tree_new/targets/fs.src/etc/start_scripts/firewall.sh
--- dev_tree/targets/fs.src/etc/start_scripts/firewall.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/firewall.sh	2008-06-06 16:35:15.000000000 +0200
@@ -1,12 +1,14 @@
 #!/bin/sh
 #
 # Start/stops firewall rules for telnetd, sshd and stproxy
+must_save=0
 
 rule=`/bin/nvram get telnet_fw_open`
 if [ "$rule" != "Failed" ]; then
   telnet_open="$rule"
 else
   `/bin/nvram set telnet_fw_open=0 >/dev/null`
+  must_save=1
   telnet_open="0"
 fi
 rule=`/bin/nvram get ssh_fw_open`
@@ -14,6 +16,7 @@
   ssh_open="$rule"
 else
   `/bin/nvram set ssh_fw_open=1 >/dev/null`
+  must_save=1
   ssh_open="1"
 fi
 ssh_port=`/bin/nvram get ssh_port`
@@ -25,6 +28,7 @@
   stproxy_open="$rule"
 else
   `/bin/nvram set stproxy_fw_open=0 >/dev/null`
+  must_save=1
   stproxy_open="0"
 fi
 rule=`/bin/nvram get stproxyadmin_fw_open`
@@ -32,8 +36,13 @@
   stproxyadmin_open="$rule"
 else
   `/bin/nvram set stproxyadmin_fw_open=0 >/dev/null`
+  must_save=1
   stproxyadmin_open="0"
 fi
+
+[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] /bin/nvram commit >/dev/null
+
+
 stproxy_port=8080
 stproxy_admin_port=6767
 test -r /var/stproxy.conf
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/lan.sh dev_tree_new/targets/fs.src/etc/start_scripts/lan.sh
--- dev_tree/targets/fs.src/etc/start_scripts/lan.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/lan.sh	2008-06-06 16:35:15.000000000 +0200
@@ -26,7 +26,7 @@
 		$0 start
 		;;
 	*)
-		echo "Usage: /etc/start_scripts/lan {start|stop|restart}"
+		echo "Usage: /etc/start_scripts/lan.sh {start|stop|restart}"
 		exit 1
 		;;
 esac
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/ssh.sh dev_tree_new/targets/fs.src/etc/start_scripts/ssh.sh
--- dev_tree/targets/fs.src/etc/start_scripts/ssh.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/ssh.sh	2008-06-06 16:35:15.000000000 +0200
@@ -4,6 +4,8 @@
 #
 #
 
+must_save=0
+
 case "$1" in
 	start)
 	        echo "Starting dropbear"
@@ -12,6 +14,7 @@
                   ssh_start="$autostart"
                 else
                   /bin/nvram set ssh_start\=1 >/dev/null
+                  must_save=1
                   ssh_start="1"
                 fi
                 port=`/bin/nvram get ssh_port`
@@ -19,6 +22,7 @@
                   ssh_port="$port"
                 else
                   /bin/nvram set ssh_port=22 >/dev/null
+                  must_save=1
                   ssh_port="22"
                 fi
                 /bin/nvram getfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
@@ -26,6 +30,7 @@
                   rm -f /var/dropbear_dss_host_key
                   /bin/dropbearkey -t dss -s 1024 -f /var/dropbear_dss_host_key >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_dss_key=/var/dropbear_dss_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_dss="/var/dropbear_dss_host_key"
                 /bin/nvram getfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
@@ -33,11 +38,13 @@
                   rm -f /var/dropbear_rsa_host_key
                   /bin/dropbearkey -t rsa -s 1024 -f /var/dropbear_rsa_host_key  >/dev/null 2>/dev/null
                   /bin/nvram setfile ssh_rsa_key=/var/dropbear_rsa_host_key >/dev/null
+                  must_save=1
                 fi
                 ssh_rsa="/var/dropbear_rsa_host_key"		
                 if [ "$ssh_start" = "1" ]; then
 		  /bin/dropbear -b /etc/issue.net -p $ssh_port -d $ssh_dss -r $ssh_rsa
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping dropbear"
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/startscript.sh dev_tree_new/targets/fs.src/etc/start_scripts/startscript.sh
--- dev_tree/targets/fs.src/etc/start_scripts/startscript.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/startscript.sh	2008-06-06 16:35:15.000000000 +0200
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 ledtool 1 4
-
+export STARTUP=1
 /etc/start_scripts/telnet.sh start
 sleep 5
 /etc/start_scripts/ssh.sh start
@@ -26,9 +26,12 @@
 /etc/start_scripts/voip.sh start
 /etc/start_scripts/ata.sh start
 /etc/start_scripts/disconnect.sh start
+/etc/start_scripts/call_mon.sh start
 ledtool 3 0
 sleep 30
 /etc/start_scripts/firewall.sh start
 /etc/start_scripts/custom.sh start
 /bin/thttpd -nos -p 81 -d /webs -c '**.cgi' -l /dev/null -i /var/run/thttpd.pid
 ledtool 1 0
+/bin/nvram commit >/dev/null
+export STARTUP=0
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/stproxy.sh dev_tree_new/targets/fs.src/etc/start_scripts/stproxy.sh
--- dev_tree/targets/fs.src/etc/start_scripts/stproxy.sh	2008-04-11 16:06:28.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/stproxy.sh	2008-06-06 16:35:15.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -13,6 +14,7 @@
                   stproxy_start=$autostart
                 else
                   `/bin/nvram set stproxy_start=0 >/dev/null`
+                  must_save=1
                   stproxy_start=0
                 fi
                 stproxy_config="/var/stproxy.conf"
@@ -21,12 +23,14 @@
 		  test -r $stproxy_config
                   if [ $? -eq 0 ]; then
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   else
                     echo "BIND_ADDRESS 0.0.0.0" >$stproxy_config
                     echo "PROXY_PORT 8080" >>$stproxy_config
                     echo "ADMIN_PORT 6767" >>$stproxy_config
                     echo "DNS_SERVER 127.0.0.1" >>$stproxy_config
                     /bin/nvram setfile stproxy_config=$stproxy_config >/dev/null
+                    must_save=1
                   fi
                 fi
                 stproxy_passwd="/var/stproxy_passwd"
@@ -35,14 +39,17 @@
 		  test -r $stproxy_passwd
                   if [ $? -eq 0 ]; then
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   else
                     echo "stproxy 0 \$1\$DE6e3/..\$7a68ski03Hxc/OjFhPEDk. 0.0.0.0" >$stproxy_passwd
                     `/bin/nvram setfile stproxy_passwd=$stproxy_passwd >/dev/null`
+                    must_save=1
                   fi
                 fi
 		if [ "$stproxy_start" = "1" ]; then
-		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfile stproxy_passwd=/var/stproxy_passwd"
+		  /bin/stproxy -c $stproxy_config -p $stproxy_passwd -u "/bin/nvram setfilecommit stproxy_passwd=/var/stproxy_passwd"
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 		echo "Stopping stproxy"
@@ -50,7 +57,9 @@
 	        test -r /var/stproxy.conf
 	        if [ $? -eq 0 ]; then
 	          /bin/nvram setfile stproxy_config=/var/stproxy.conf >/dev/null
+	          must_save=1
 	        fi
+	        [ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	restart)
 		$0 stop
diff -urNa dev_tree/targets/fs.src/etc/start_scripts/telnet.sh dev_tree_new/targets/fs.src/etc/start_scripts/telnet.sh
--- dev_tree/targets/fs.src/etc/start_scripts/telnet.sh	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/targets/fs.src/etc/start_scripts/telnet.sh	2008-06-06 16:35:15.000000000 +0200
@@ -4,6 +4,7 @@
 #
 #
 
+must_save=0
 
 case "$1" in
 	start)
@@ -13,11 +14,13 @@
                   telnet_start=$autostart
                 else
                   `/bin/nvram set telnet_start=1`
+                  must_save=1
                   telnet_start="1"
                 fi
 		if [ "$telnet_start" = "1" ]; then
 		  /usr/sbin/telnetd
 		fi
+		[ $must_save -eq 1 ] && [ "$STARTUP" != "1" ] && /bin/nvram commit >/dev/null
 		;;
 	stop)
 	        echo "Stopping telnetd"
diff -urNa dev_tree/targets/makeDevs dev_tree_new/targets/makeDevs
--- dev_tree/targets/makeDevs	2008-04-11 13:22:21.000000000 +0200
+++ dev_tree_new/targets/makeDevs	2008-06-06 16:35:15.000000000 +0200
@@ -91,6 +91,8 @@
 mknod $ROOTFS/dev/pts/8 c 2 8
 mknod $ROOTFS/dev/pts/9 c 2 9
 
+mknod $ROOTFS/dev/console c 5 1
+
 # Create Broadcom specific devices
 mknod $ROOTFS/dev/bcmatm0 c 205 0
 mknod $ROOTFS/dev/brcmboard c 206 0
diff -urNa dev_tree/userapps/broadcom/cfm/html_t_online_fra/hcti_laden.htm dev_tree_new/userapps/broadcom/cfm/html_t_online_fra/hcti_laden.htm
--- dev_tree/userapps/broadcom/cfm/html_t_online_fra/hcti_laden.htm	2008-04-11 16:06:29.000000000 +0200
+++ dev_tree_new/userapps/broadcom/cfm/html_t_online_fra/hcti_laden.htm	2008-06-06 16:35:15.000000000 +0200
@@ -96,7 +96,7 @@
       <table border="0" cellpadding="4" cellspacing="0">
         <tr>
           <td width="200"><a href="hcti_laden_firm.htm" onmouseover=i_showElem(6) onmouseout=i_showElem(0) target="hcti"><b>&gt;&gt; </b>Firmwareupdate</a></td>
-          <td>Version 0.2.0</td>
+          <td>Version 0.2.1</td>
         </tr>
       </table>
 </DIV>
diff -urNa dev_tree/userapps/broadcom/cfm/html_t_online_fra/m_startseite.htm dev_tree_new/userapps/broadcom/cfm/html_t_online_fra/m_startseite.htm
--- dev_tree/userapps/broadcom/cfm/html_t_online_fra/m_startseite.htm	2008-04-11 13:22:31.000000000 +0200
+++ dev_tree_new/userapps/broadcom/cfm/html_t_online_fra/m_startseite.htm	2008-06-06 16:35:15.000000000 +0200
@@ -21,6 +21,11 @@
     }
   }
   
+function load_bs_extra()
+{
+ var url="http://" + window.location.hostname + ":81/cgi-bin/index.cgi";
+ menupkt(61,url);
+}
 //-->
 </SCRIPT>
 
@@ -174,7 +179,7 @@
 <DIV id=m_but52 onclick=menupkt(52,"hcti_laden.htm") onmouseover=m_high(1,52) onmouseout=m_high(0,52)>&gt; Laden &amp; Sichern</DIV>
 <DIV id=m_leer></DIV>
 <DIV id=m_otitel>EXTRA</DIV>
-<DIV id=m_but61 onclick=menupkt(61,"http://<%ejGet(ethIpAddress)%>:81/cgi-bin/index.cgi") onmouseover=m_high(1,61) onmouseout=m_high(0,61)>&gt; BS-Extras</DIV>
+<DIV id=m_but61 onclick=load_bs_extra() onmouseover=m_high(1,61) onmouseout=m_high(0,61)>&gt; BS-Extras</DIV>
 <DIV id=m_leer></DIV>
 <DIV id=m_but6 onclick=beenden() onmouseover=m_high(1,6) onmouseout=m_high(0,6)>&gt; Beenden</DIV>
 
diff -urNa dev_tree/userapps/opensource/busybox/.config dev_tree_new/userapps/opensource/busybox/.config
--- dev_tree/userapps/opensource/busybox/.config	2008-04-11 14:09:53.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/.config	2008-06-06 16:35:30.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.9.2
-# Fri Apr 11 14:09:53 2008
+# Wed Jun  4 18:13:36 2008
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -376,7 +376,7 @@
 # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
 # CONFIG_ADDUSER is not set
 # CONFIG_DELUSER is not set
-# CONFIG_GETTY is not set
+CONFIG_GETTY=y
 CONFIG_FEATURE_UTMP=y
 CONFIG_FEATURE_WTMP=y
 CONFIG_LOGIN=y
diff -urNa dev_tree/userapps/opensource/busybox/.config.old dev_tree_new/userapps/opensource/busybox/.config.old
--- dev_tree/userapps/opensource/busybox/.config.old	2008-04-11 13:22:41.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/.config.old	2008-06-06 16:35:29.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.9.2
-# Thu Apr 10 17:44:38 2008
+# Thu May 15 14:54:45 2008
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -376,7 +376,7 @@
 # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
 # CONFIG_ADDUSER is not set
 # CONFIG_DELUSER is not set
-# CONFIG_GETTY is not set
+CONFIG_GETTY=y
 CONFIG_FEATURE_UTMP=y
 CONFIG_FEATURE_WTMP=y
 CONFIG_LOGIN=y
diff -urNa dev_tree/userapps/opensource/busybox/include/applet_tables.h dev_tree_new/userapps/opensource/busybox/include/applet_tables.h
--- dev_tree/userapps/opensource/busybox/include/applet_tables.h	2008-04-11 14:09:54.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/include/applet_tables.h	2008-06-06 16:35:30.000000000 +0200
@@ -33,6 +33,7 @@
 "free" "\0"
 "freeramdisk" "\0"
 "getopt" "\0"
+"getty" "\0"
 "grep" "\0"
 "halt" "\0"
 "head" "\0"
@@ -141,6 +142,7 @@
 free_main,
 freeramdisk_main,
 getopt_main,
+getty_main,
 grep_main,
 halt_main,
 head_main,
@@ -250,77 +252,78 @@
 0x0098,
 0x00a4,
 0x00ab,
-0x00b0,
-0x00b5,
-0x00ba,
-0x00c2,
-0x00cb,
+0x00b1,
+0x00b6,
+0x00bb,
+0x00c0,
+0x00c8,
 0x00d1,
-0x00d6,
-0x00dd,
-0x00e0,
-0x00e5,
-0x00ed,
+0x00d7,
+0x00dc,
+0x00e3,
+0x00e6,
+0x00eb,
 0x00f3,
-0x00fa,
-0x00ff,
-0x0107,
-0x810a,
-0x0110,
-0x0113,
+0x00f9,
+0x0100,
+0x0105,
+0x010d,
+0x8110,
+0x0116,
 0x0119,
 0x011f,
-0x0128,
+0x0125,
 0x012e,
-0x0131,
 0x0134,
-0x013c,
-0x0141,
+0x0137,
+0x013a,
+0x0142,
 0x0147,
-0x8150,
-0x0157,
+0x014d,
+0x8156,
 0x015d,
-0x4163,
-0x0168,
-0x0171,
-0x0178,
-0x017b,
+0x0163,
+0x4169,
+0x016e,
+0x0177,
+0x017e,
 0x0181,
-0x0185,
-0x018c,
-0x0193,
+0x0187,
+0x018b,
+0x0192,
 0x0199,
-0x01a0,
-0x01a3,
+0x019f,
+0x01a6,
 0x01a9,
 0x01af,
 0x01b5,
-0x01b9,
-0x01c4,
-0x01c7,
+0x01bb,
+0x01bf,
+0x01ca,
 0x01cd,
-0x01d2,
-0x01da,
-0x01df,
-0x01e7,
-0x01ec,
-0x01f0,
-0x01f7,
-0x01ff,
-0x0204,
-0x0208,
+0x01d3,
+0x01d8,
+0x01e0,
+0x01e5,
+0x01ed,
+0x01f2,
+0x01f6,
+0x01fd,
+0x0205,
+0x020a,
 0x020e,
-0x0211,
-0x0216,
-0x021a,
-0x0221,
-0x0228,
+0x0214,
+0x0217,
+0x021c,
+0x0220,
+0x0227,
 0x022e,
-0x0233,
-0x023a,
-0x0241,
-0x0244,
-0x024d,
-0x0250,
-0x0255,
+0x0234,
+0x0239,
+0x0240,
+0x0247,
+0x024a,
+0x0253,
+0x0256,
+0x025b,
 };
diff -urNa dev_tree/userapps/opensource/busybox/include/autoconf.h dev_tree_new/userapps/opensource/busybox/include/autoconf.h
--- dev_tree/userapps/opensource/busybox/include/autoconf.h	2008-04-11 14:09:53.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/include/autoconf.h	2008-06-06 16:35:30.000000000 +0200
@@ -2,7 +2,7 @@
  * Automatically generated C config: don't edit
  * Busybox version: 1.9.2
  */
-#define AUTOCONF_TIMESTAMP "2008-04-11 14:09:53 CEST"
+#define AUTOCONF_TIMESTAMP "2008-06-04 18:13:36 CEST"
 
 #define CONFIG_HAVE_DOT_CONFIG 1
 #define ENABLE_HAVE_DOT_CONFIG 1
@@ -1280,10 +1280,10 @@
 #define ENABLE_DELUSER 0
 #define USE_DELUSER(...)
 #define SKIP_DELUSER(...) __VA_ARGS__
-#undef CONFIG_GETTY
-#define ENABLE_GETTY 0
-#define USE_GETTY(...)
-#define SKIP_GETTY(...) __VA_ARGS__
+#define CONFIG_GETTY 1
+#define ENABLE_GETTY 1
+#define USE_GETTY(...) __VA_ARGS__
+#define SKIP_GETTY(...)
 #define CONFIG_FEATURE_UTMP 1
 #define ENABLE_FEATURE_UTMP 1
 #define USE_FEATURE_UTMP(...) __VA_ARGS__
diff -urNa dev_tree/userapps/opensource/busybox/include/bbconfigopts.h dev_tree_new/userapps/opensource/busybox/include/bbconfigopts.h
--- dev_tree/userapps/opensource/busybox/include/bbconfigopts.h	2008-04-11 14:09:54.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/include/bbconfigopts.h	2008-06-06 16:35:29.000000000 +0200
@@ -311,7 +311,7 @@
 "# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set\n"
 "# CONFIG_ADDUSER is not set\n"
 "# CONFIG_DELUSER is not set\n"
-"# CONFIG_GETTY is not set\n"
+"CONFIG_GETTY=y\n"
 "CONFIG_FEATURE_UTMP=y\n"
 "CONFIG_FEATURE_WTMP=y\n"
 "CONFIG_LOGIN=y\n"
diff -urNa dev_tree/userapps/opensource/busybox/include/config/getty.h dev_tree_new/userapps/opensource/busybox/include/config/getty.h
--- dev_tree/userapps/opensource/busybox/include/config/getty.h	2008-04-11 13:22:40.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/include/config/getty.h	2008-06-06 16:35:29.000000000 +0200
@@ -1 +1 @@
-#undef CONFIG_GETTY
+#define CONFIG_GETTY 1
diff -urNa dev_tree/userapps/opensource/busybox/include/usage_compressed.h dev_tree_new/userapps/opensource/busybox/include/usage_compressed.h
--- dev_tree/userapps/opensource/busybox/include/usage_compressed.h	2008-04-11 14:09:54.000000000 +0200
+++ dev_tree_new/userapps/opensource/busybox/include/usage_compressed.h	2008-06-06 16:35:30.000000000 +0200
@@ -1,641 +1,655 @@
 static const char packed_usage[] ALIGN1 = 
-"\x42\x5a\x68\x31\x31\x41\x59\x26\x53\x59\x32\x58\x10\x2e\x00\x0e"
-"\x80\x5f\x80\x52\x70\x6f\xff\xff\xdf\xff\xff\xff\xff\xbf\xff\xff"
-"\xff\x60\x2f\xca\x00\x3e\xc0\x35\xdc\xee\xba\x68\xbe\xf6\x0e\x26"
-"\x86\xa4\x91\xe8\x00\x3a\xe9\x64\x75\xf0\x3d\x3c\x77\xdb\xdd\xf7"
-"\x7a\xfb\x60\xd6\xb6\xda\x6b\x65\xb6\xfb\x9c\xe3\xe1\xd7\xde\xe6"
-"\xde\xe2\xee\x73\x85\x98\x0e\xe7\xbe\x00\x37\xbe\xf9\xcd\xd9\xde"
-"\xce\xc9\x90\x14\x2e\xbe\xfb\x7a\x7d\x77\x61\x69\xa0\xb6\xca\x5d"
-"\xf3\x03\xde\x30\x42\xc9\xaa\xad\xaa\xb1\x49\x1a\x6e\xf0\x0d\xd1"
-"\xed\x67\x1e\x85\xe6\xba\xaf\x2c\x0b\x6d\x29\xe6\xef\x86\xa6\x20"
-"\x4c\x81\x31\x34\xd0\x4c\x98\x26\x98\x84\xf5\x34\xd2\x98\xf4\x99"
-"\x32\x9f\xa6\x53\x53\xd4\xf4\xd3\x34\xa7\x9a\x93\x32\x46\x0d\x34"
-"\x02\x20\x24\xc8\x9a\x4f\x42\x31\xa4\xa7\xe9\x4f\x24\x34\x7a\x68"
-"\x8d\xea\x4f\x51\xa0\x1a\x1a\x03\x20\x00\x1a\x69\xa1\x08\x91\x95"
-"\x3f\x08\xd5\x3d\x4f\x51\xe6\x54\xd0\x3d\x46\x80\x7a\x26\x80\x00"
-"\x00\x00\x00\x02\x4d\x24\x84\x10\x13\x49\x82\x9e\xd4\x26\x4c\x42"
-"\x63\x53\x7a\xa6\x4d\x19\x06\x9b\x50\x00\x00\x00\x01\x12\x82\x09"
-"\x90\x29\xe4\xa7\x93\x25\x3d\xa9\x93\x53\xf4\x90\xf2\x43\xd4\xc4"
-"\xfd\x50\xcd\x26\x4f\x53\x4f\x53\x40\x00\x00\x02\x44\x82\x00\x10"
-"\x99\x32\x09\xa5\x4f\xf4\xd0\x02\x35\x46\xf4\x26\x9a\x47\xea\x8d"
-"\x1b\x48\x6d\x46\x80\x68\x0d\x0f\x0f\x27\x87\xb7\xdb\xf5\x4b\x08"
-"\x12\x87\xb8\xbf\xe6\x3f\xda\x76\xfa\x5e\x73\x44\xe4\x29\xa5\x23"
-"\xf2\x99\xb1\x8e\x04\x93\x94\x5f\x2f\x52\xc2\x62\xc5\xcb\x63\x77"
-"\x56\xde\xaf\xff\x74\xbb\x7a\xc6\x06\x73\x3f\xab\xf5\x4d\xc1\xcd"
-"\xde\x43\xce\x02\xd6\xb2\xad\xdc\xb6\x84\xdb\xe0\x86\xa1\x5a\x94"
-"\x81\x58\x00\xa6\x26\x64\x07\xb9\x66\x08\xbc\xbd\x90\xfe\x07\x64"
-"\x98\x3a\xfb\xfd\x58\xee\x6f\xd6\x7e\xf8\xc1\x31\x7e\x5f\x4f\xd3"
-"\xee\xa7\xf7\x92\x7f\x9e\xaf\x64\xd3\xd1\xc7\xfc\x64\xb6\x45\xe1"
-"\xd8\xc7\xf8\x7d\x69\x80\x7d\xfa\x44\xf9\x31\x52\x72\xe0\xbb\xd8"
-"\xea\x64\xd4\xcd\xb7\x96\x3f\x52\x5f\x14\x4a\x55\xe5\xfb\x7d\xbb"
-"\xf5\xbe\xbc\x05\xb7\x8e\x1a\xca\xcc\xd2\x50\xa2\x51\x28\x88\x02"
-"\x50\x52\x82\x94\x3f\x2e\x8f\xb2\x00\xa4\x04\xba\xa7\x3a\x2b\xb9"
-"\x2c\x89\xd0\x58\x8b\x15\x9c\x7f\x11\x5e\x84\x83\x94\xb8\x1d\x99"
-"\x8e\xe5\xef\xad\xe4\xcc\xb9\x91\x2e\x95\xa3\x29\x2d\xe6\x35\xa1"
-"\xb8\x1c\xc4\xf2\x7a\xe1\x00\x62\x5f\x9b\x76\x6a\xd7\x82\xf5\x52"
-"\xf3\x43\x1b\xe0\x0d\xd8\x8c\x25\x85\x3d\xa5\xfe\xb6\x22\xd7\x83"
-"\xe0\x91\x50\xe5\xd0\xd8\xfd\x5a\xda\xc6\xf2\x62\xf4\x65\x5f\xf2"
-"\x59\x58\x21\x31\xf1\x15\x26\x17\x5e\x6e\x5d\xf6\x77\x13\xa9\xd3"
-"\x3e\x85\xd4\x5a\x68\x9a\x73\x3a\xee\x7d\xfd\xce\x4c\x1c\x2a\x9a"
-"\x23\x0f\x11\x8d\x35\xab\x62\x43\x3b\x75\x2c\x68\xc7\xd1\x99\x17"
-"\x30\x93\x97\x07\x43\x0f\x73\xf5\x49\xa1\xae\xb5\x17\xa6\xa1\xe2"
-"\x77\x7e\xbd\xbb\x97\x49\x53\x75\x53\x62\x19\x74\x53\xd1\xb3\x5e"
-"\xe9\x75\xd9\x90\xb6\x2f\x41\x11\x14\x87\x91\xe6\x01\x97\x29\x02"
-"\xd2\x39\x10\x60\xe2\x0b\x64\xb8\x05\xb9\xd8\x1f\x26\xcc\x29\x0d"
-"\x26\x7a\x74\xcf\x9f\xe7\x69\xa5\x16\x72\x41\x54\x16\x27\x1e\x42"
-"\xcd\x92\xf7\x3a\xd3\x92\x69\x5a\x8c\x16\xf2\xc8\x13\x38\xd2\xed"
-"\xbb\xaa\xab\x22\xb4\x49\xc0\xb2\xe6\x67\x24\x7f\xa6\xd7\xb0\xcc"
-"\xae\x2b\x02\x0a\x2b\x5d\x04\xa9\x6c\x2b\x51\x5a\x6e\xd8\x9a\xf2"
-"\x4b\xff\x57\xaa\x06\x39\xf1\x1a\xb9\x57\x63\xe9\x62\xbc\xbc\x41"
-"\x82\x20\x63\x69\x0d\x83\x18\x36\x37\x7f\x5f\xec\xec\xda\xee\xd3"
-"\xd6\x75\xd2\x19\x29\xff\x52\xff\x79\x21\xf0\xc4\xfd\xd3\xf2\xfc"
-"\xcb\xd1\xd4\x89\x35\x7f\x1c\x07\x65\x75\xc2\xb9\x39\x85\x61\xef"
-"\x2b\x1a\xc7\xad\x74\x82\x71\x44\x34\x8f\x5c\x6d\xb5\xb5\xa4\xaf"
-"\x55\x67\xc0\x92\x8d\xc2\xa0\x96\xbc\xb8\xbb\xe1\x94\xed\x50\xcb"
-"\xca\xa2\xe9\xed\x5f\x93\xe9\xba\xde\x0a\xa7\xe2\x7d\x3b\x63\x2c"
-"\xdc\x64\x77\x4d\x60\x65\xb4\xda\xa2\x76\x54\x5a\x20\x70\x6e\x9e"
-"\x3a\xf4\xfa\xf3\x45\xb8\xaa\xf8\x2e\x58\xd6\x65\x1c\x34\x52\xf2"
-"\x59\x97\x1d\x56\x4c\x1e\xf6\xe4\x86\xfa\xed\x5a\x49\xbd\x6f\xf4"
-"\x4b\x09\x7c\xbd\x39\x2b\xb2\xb0\x6c\x6a\x9c\xcc\x2c\x8f\x38\xa6"
-"\x3c\x77\x2e\x0e\xa7\x9f\x74\xb7\x4d\xa5\x30\x47\x43\x17\xba\x87"
-"\x95\xb4\xfc\x30\xd6\xba\x05\x5b\x7e\xcd\x0d\x14\xea\x70\xb8\x3e"
-"\x96\x91\x83\xd4\xea\x32\x17\xf9\x88\x68\x5b\x87\xcf\x74\x33\x95"
-"\x58\x8d\x07\xb2\x2c\xfe\xb5\x84\xd6\x94\x45\x5a\xfc\x5f\xbd\xdc"
-"\x37\xd8\x82\x8f\x92\xaa\x18\x0b\xef\x4f\x53\xaf\x05\x2d\x1c\x59"
-"\x2c\x4f\x6b\x68\x07\xd8\x6f\xbf\x45\xf0\xe2\x0a\xbd\xea\xda\x4d"
-"\xce\x58\x66\x2a\x0f\x29\x01\xf9\x34\xd5\xa0\x8f\x71\x18\x22\x22"
-"\x99\x81\x35\x10\x5a\xb2\x12\xb7\xcc\xd4\x51\x18\xec\xae\x79\x50"
-"\xfd\xcc\x6d\x55\x97\xe6\x51\xf3\xed\x0d\x14\x66\xf9\x87\x2f\xe2"
-"\x4e\xd7\x56\xf8\x51\x41\xf8\xc8\x18\xca\x5c\x3f\x4a\x4a\x56\x8d"
-"\xdf\xb4\xe3\x47\x4e\x05\xf7\x1b\x5b\x65\xe1\x8e\xf7\x70\x8d\x10"
-"\x10\xd3\x0d\xa1\x93\x38\xb2\xd6\x57\x83\x32\x94\x5b\x1d\x92\x3f"
-"\xa3\x02\xee\x40\x4d\x88\x6c\x12\xf5\xb2\x1d\x1a\x42\x57\x31\x25"
-"\x26\x24\x98\xdf\x1b\xba\x33\x3e\x57\x7f\xa5\xd0\xc2\x5c\x3d\x26"
-"\x13\xf1\x7d\xba\x1b\x67\x3f\x55\xdc\xe5\xa9\x24\x1d\xc3\x7c\xc3"
-"\x4c\x85\x02\xd6\x61\xe5\x8a\x43\x11\x44\x09\xc7\x8c\x50\xcc\x8f"
-"\xf2\x13\x9c\x66\xfc\x84\x8e\x04\x3a\xf5\x61\xd8\xd0\xc8\xfa\xa2"
-"\x5f\xdd\x6b\x5b\xb3\x16\x3e\x85\x0c\x84\x72\xae\xca\x7c\x6e\x1f"
-"\x61\xe7\xbd\xb1\xc4\x05\x73\xef\x55\x03\xab\x57\x0d\x20\xf1\x48"
-"\x50\x81\xfc\xae\x45\xed\x21\x7b\x5f\x92\x43\x19\x8c\x1c\xa4\xd5"
-"\xda\x55\xc0\xbf\xff\xf5\x17\x3e\xac\xc6\x66\x02\x51\xbc\x46\xab"
-"\x35\x0d\x2f\xc9\xa3\xbb\xc5\x40\xe3\xd3\x7d\x50\x59\xe3\x4c\xb0"
-"\xa3\x74\xdd\x8b\xe3\x6c\x2a\x30\xab\x85\xbc\x47\x7a\xc2\xb0\xcd"
-"\x58\x29\xc6\x57\xf6\x8e\x2a\x87\xd3\x17\xbf\xe3\xe1\xf2\xc5\xf7"
-"\xf0\xf9\x31\x5d\xf3\x59\x75\xf3\xcb\xc8\x6b\xb3\x9e\xfe\x59\x1b"
-"\x46\x26\x72\x84\x23\x31\xa3\x70\xd6\x13\x93\xb1\x0c\xe7\x45\x4b"
-"\x3b\x43\x53\xee\x98\x97\xc4\xaf\xb0\x90\xc3\xfd\x66\x3c\xcb\xe7"
-"\xc2\xfc\x36\xec\x19\xe4\x85\x04\x38\x50\x67\x70\x7c\xef\x0d\x80"
-"\xb4\x29\xb5\xb3\xf1\xe5\x6e\x0f\xf5\x7d\xfc\xcd\x5b\x25\xec\xa6"
-"\x41\x32\xa6\x06\x64\xd9\x81\x6e\xc2\x62\x2b\xdd\x8e\x51\xd4\x75"
-"\x40\x2e\x5c\x3d\xb7\x5d\x58\xcd\x0a\x28\xbb\xbb\x31\xdb\x36\xf4"
-"\xff\x0b\xb8\x3e\xd4\xc0\x42\xf1\x98\xb1\x20\x88\xee\xc9\xe8\xd1"
-"\x66\xa4\x5b\xe3\x78\xd4\x16\xb3\x90\x58\xc9\x99\x33\x5a\x18\x1b"
-"\x35\xe6\xb0\x3c\x3d\xf9\x53\x56\x2e\x77\x57\xd2\xc2\x8c\xeb\x28"
-"\x71\xd4\x82\xd2\x60\x92\xb2\x06\xbc\x64\xcb\xed\xbd\x17\xfb\x7b"
-"\x5c\x44\x9b\xef\x5c\xa7\xbd\xdf\x23\x8d\x8d\x2d\x0f\xa3\xc4\xb0"
-"\x37\xf7\xc2\x3d\xaf\xc8\x4c\xe4\x00\x8c\x40\xf6\x44\x0d\x08\x7a"
-"\xb9\x4a\x0d\xa1\x94\x20\x43\xc9\x28\xf6\x6b\xec\xc8\xb9\xef\xc4"
-"\xf5\xde\x98\xc1\x75\x7b\x21\x0f\xae\x0a\x7c\xb6\x94\xac\x7a\xa9"
-"\x68\x59\x12\xad\x37\x59\xc6\x67\x86\xe3\xa8\xb1\xbc\xd5\x2b\xdb"
-"\xd3\x03\xb0\x9b\x69\xb0\x55\x4b\xfb\x89\x22\x17\x02\xdd\xbc\xe9"
-"\xfe\x35\x69\xd1\xf1\x38\x39\xd5\x7f\x2d\x26\x24\x7d\x56\x41\xca"
-"\xa5\x0a\x97\xa7\xf2\xd7\x88\x3d\x17\x25\x06\xef\x4d\xba\x75\x51"
-"\x0f\xc1\xd7\x51\x18\x76\x7e\x90\x33\x1d\x07\x41\x2c\x3a\xfa\x5b"
-"\xfc\xc7\x23\x05\x81\xba\x64\xfc\x31\xd8\xbf\x3c\x5f\x8c\xf8\x48"
-"\xe8\x6f\x21\x20\x85\x3c\xb8\x3f\x19\xe9\xba\x54\x81\x43\xc7\xe5"
-"\xe9\xe6\xc4\x02\x7f\x07\xad\xbb\xb1\x08\x72\x41\xaf\x43\x0f\x2a"
-"\x13\xd8\x2f\x95\xf1\xa4\xc6\x00\x31\xe6\xc3\x41\xea\x33\xdd\xdf"
-"\x48\x38\x7c\xf1\x8d\x75\x1f\xac\x5a\x59\xdc\xf7\x4f\x43\xa7\x1c"
-"\x2d\xa5\xac\x23\x5b\x28\x84\x4d\x09\x4c\x94\xec\xeb\xd0\x6a\x8d"
-"\x27\xb3\xe1\x53\x31\xcc\xa9\x66\x13\x0c\x14\x98\x2a\x0c\x98\x92"
-"\xae\x4b\xcb\x58\x4b\xd6\xae\x04\x01\x56\xf9\x5c\x2b\x0f\xa9\x82"
-"\x39\x0f\x39\x0a\x07\xc2\x64\xee\xd1\x48\x89\x4f\xce\xd7\x79\xe1"
-"\x4a\x4f\x8e\xb7\x23\x0c\x32\xf8\x8e\x33\x4d\x05\x3e\x6e\xa9\xa4"
-"\x53\x16\x66\x08\x58\x4a\x3b\xa5\x45\x20\xb6\x99\xdb\x4c\x11\xa1"
-"\xd3\x62\x36\x90\xe5\x72\x57\x2b\xdd\x8e\xd4\x33\x23\x1f\xd0\x2f"
-"\xaf\xb6\x37\x56\x39\x1f\x73\x47\x60\x34\xf1\x24\x4d\x6f\xe7\x4e"
-"\x3d\x72\xaa\x7a\x7c\x93\x03\x66\x29\xcf\xa1\xdd\x67\xbf\xbf\x95"
-"\x6a\xe6\xa3\x80\xbb\x65\x77\x2e\x1f\xc0\xf5\x91\xa0\xce\x2f\x80"
-"\xd0\x35\xb1\x99\xb9\x79\xef\x82\x71\x39\x52\x50\xf8\xc7\xcb\xdd"
-"\x53\xb3\x3e\x58\xbd\x29\xb5\xcb\x26\xa7\x21\x8b\x51\xca\x7d\x27"
-"\xb6\x3c\x0f\xc6\x94\xf9\xf4\x0b\xdf\xaf\xe8\x51\x97\xc7\x61\xa7"
-"\x1b\xcc\x8e\x01\xf6\x91\xe5\x3e\x90\x39\x6b\xd2\x28\x3b\xe4\x5c"
-"\x69\x58\x80\x67\xae\x9c\xe1\x30\xcd\xb3\x72\x48\x87\x56\xc1\x2d"
-"\xac\x3e\x97\x4c\xae\x8a\x43\xef\xf3\xa8\x7b\x81\x82\x1b\xaf\xd5"
-"\x17\x52\xd5\x4e\x23\xc1\x73\x50\xd5\x8d\x95\x1e\x7d\x88\x51\x28"
-"\x63\xa4\xb2\x16\x4d\xe9\x43\x0f\x99\x40\xef\xc6\x3f\x37\xbd\xa3"
-"\x26\x67\x07\x98\xcf\x86\xfe\x0e\x05\x87\xbc\x22\x48\x50\x3b\xda"
-"\x43\x88\xe0\x25\x4d\x0e\x00\xd0\xe4\xf1\xa7\x11\x35\x92\xc5\x51"
-"\xdd\x83\x15\xad\x65\x4a\x80\xde\x4b\x5e\x38\x2e\x26\x5d\x4f\x5d"
-"\x3c\xbe\xcf\xd7\x92\x39\xf9\xe7\x6c\x61\xaf\x35\xd3\x54\x15\xf5"
-"\x63\x70\x4c\xfd\x3f\x42\xa3\x1c\x6c\xbe\x6c\x88\xa1\x28\xef\xda"
-"\x6b\x43\x22\x79\x5b\x32\x1b\x07\xbb\xd7\xd6\xf6\x08\x71\xe7\x54"
-"\x99\xe0\x12\x90\xec\xec\x60\x9e\xf1\xa9\x4c\x61\x44\x2a\xd9\x53"
-"\x90\x74\xdf\xcc\x3c\xac\xa4\x86\x00\x38\x45\x33\xd5\x11\x3e\x10"
-"\xca\x0d\x80\x85\x5c\x2c\xb3\x33\x14\xf0\x5d\xd1\x40\x80\x8c\xd4"
-"\xda\x2f\x9a\xad\xc0\xfb\x44\x7a\x9c\xe0\x52\x11\x6e\xbf\x03\xb5"
-"\x43\x02\x52\x4b\x5c\xa8\x8f\xe1\x81\x5d\x94\x52\x0e\x98\xa5\x55"
-"\xd9\x52\x75\xeb\x03\xd3\x1b\x53\xe7\x2a\x61\x84\x9a\xdf\xed\xe7"
-"\xe0\x14\x60\xee\xa7\x5b\xf6\x26\x8b\x10\x7e\x6c\xba\x6c\x4d\x69"
-"\x28\x3e\x83\x63\xb3\x54\x39\x03\xe6\xe0\xe0\x6e\x3b\x2f\x98\x95"
-"\x72\x1c\xe4\xc2\x64\x8c\xc8\xb6\x32\xe6\x0b\xe3\xce\x22\xda\xe9"
-"\xbd\x3c\x1e\xd4\x20\x45\xac\xef\x4d\x85\xca\x7c\x08\x2d\xa1\x82"
-"\xfb\x68\xbc\x6f\xac\xdd\x77\x81\xa7\x4c\xb8\x30\x17\x1b\x03\x1c"
-"\x9a\xda\x98\x79\x94\xdc\x80\xc3\x90\xbc\x9f\x11\x62\x54\xf2\xda"
-"\x2b\xe7\xd0\xc2\xbb\x8d\xe4\x6a\x14\x68\x01\x1a\x7d\x70\x24\x5e"
-"\x76\x6d\xb6\xd9\x43\x94\x0c\x08\x62\x0b\xad\x62\x0d\x6f\x71\x40"
-"\x96\x2a\xaa\x15\x9c\x46\x90\x3d\x84\x55\xfa\x58\x24\xee\x39\xd2"
-"\x62\x9b\x42\xe3\xc5\xd9\xd7\xca\x12\x60\xaa\x2b\x92\xa0\x97\x70"
-"\x70\xaf\x1b\xf9\x6c\x10\x07\x27\xa0\xb2\x29\x38\xcc\x83\xad\x08"
-"\xce\x73\x77\x16\x3a\x8f\x45\xbc\xf9\x7f\x22\xe5\xb5\xd9\x55\x2d"
-"\x7b\x4e\xa5\x0b\x4a\x11\xf6\xc7\xa0\xb7\x43\xe9\xd3\x83\x37\xb7"
-"\xd9\xb6\xfb\x76\x1a\x3f\xc8\x7d\xbc\x0d\x4e\xd7\xf0\xd7\xc6\x7f"
-"\x27\x90\xe9\x9d\xa4\xd7\x7d\xea\x41\x11\xa4\xb4\x69\x0a\xc2\x63"
-"\xbb\xc4\x8f\x8c\x23\xf4\x91\xdd\xd7\xbb\x64\xd2\xfd\x35\xeb\x21"
-"\xf6\x07\xd5\xdb\x68\x65\xc2\x06\x0a\x41\xd3\xed\x64\x4b\x7f\xb2"
-"\xcd\x0c\xe4\x55\x74\xb5\xca\xbf\xb2\xb4\xfa\x20\x61\x3b\x74\xbc"
-"\x1b\x07\xa0\xdb\x66\x56\x60\x55\x45\xfe\x9d\xfd\x73\xd8\x5e\xf9"
-"\xdd\x34\x1a\x74\x1b\xd9\xef\x75\xb9\x3d\xad\xf6\xd5\xb8\xd8\x6a"
-"\x39\x0f\x35\x91\x4d\xa6\x11\x5b\xf1\x9b\x41\x97\x21\x84\xd0\xf7"
-"\xe2\x06\xe0\xfc\xbc\x82\xe1\xfd\x2e\x34\x8d\xd3\xb2\xea\x36\x48"
-"\xd3\x3f\xb2\x22\x3e\x0c\x19\xf1\xe0\x65\xf9\xca\x49\x45\x79\xce"
-"\xc3\xd1\x13\xc7\x8e\x98\x19\x3f\x9e\x6b\x5e\xbc\x5f\xa5\x97\xcf"
-"\xe6\xd1\x48\x69\xda\x19\xff\x61\x32\x1c\x76\x11\xaf\x93\x8a\x64"
-"\x74\x19\xd9\xa0\xc7\xb3\xd8\x27\x1d\x0c\xe1\x87\x7f\xb8\x71\xe8"
-"\x91\xa9\x04\x8d\x48\x02\x89\x8f\x5b\xee\x61\x69\xb9\x49\x45\x20"
-"\x69\x39\xc0\x56\x55\xc9\xbd\x0f\x71\x16\x31\x02\x49\xca\xa2\xcd"
-"\x36\x20\xaa\x9b\xeb\xab\x6e\x42\x95\x24\xf1\xaa\x7a\xf2\xba\x9c"
-"\x48\x1a\x26\x8a\x1b\xbc\x3e\x0f\x1e\xc9\x68\x57\x2d\x2c\xc9\xc9"
-"\x0a\x84\x82\x31\xbc\x50\xef\x58\x1e\x36\x31\x02\xa5\xb7\x38\xb5"
-"\xc5\xcb\x67\xb4\xb7\x57\xbd\x16\xb3\xde\x29\xb0\xaf\x45\xd9\x85"
-"\xf5\x64\xce\x0a\x89\x1b\x28\x0a\xcd\x0f\x6c\xcf\x22\x1f\x56\x7e"
-"\x8b\x72\x1e\xe2\x1c\x41\x39\xd6\x64\x30\xc7\x19\x31\xaf\x4a\x6c"
-"\x83\xae\x87\x19\x22\x03\x52\x2e\xef\x2b\xa6\x6e\x59\x52\xdb\x7c"
-"\xef\xdc\x98\xe7\x2a\x53\x12\xb8\xfc\x73\xb3\xc6\xef\x11\xf3\xdc"
-"\x63\xd4\x3e\x0d\xc5\x38\xac\x69\x86\x48\x7b\xb2\x95\x87\x9a\x30"
-"\x32\xf7\x86\x5d\xe6\x05\xa8\xf8\xb5\x34\xd2\x8e\xdc\xb7\xce\x54"
-"\x3f\x87\x7a\x38\x6c\x5f\x27\xfb\x38\x15\xd5\xc5\x91\x44\x6e\xc0"
-"\x13\x0c\x17\xb5\xd5\x41\x91\xbf\x3c\x38\x00\x41\x92\x56\x8a\xae"
-"\x31\x95\x78\xd7\x36\x46\x35\x81\xa3\x0c\xd0\x10\x10\xf5\x06\x91"
-"\x8c\x46\xdf\x83\x94\x84\x6e\xa2\x1a\xd7\xb6\x99\x03\xdb\x63\xef"
-"\x9f\xde\x8d\xbd\xde\x8d\x2c\x6b\xd7\x1b\xae\xd3\xdb\xd4\xd6\x3a"
-"\x0c\x0f\xd3\xf9\xf1\xc7\xc0\xcf\x23\x4c\x23\x92\x7b\x30\xfa\x39"
-"\x88\x52\x3c\x4f\x38\xd3\x19\x10\x6d\xef\x73\x6c\x8e\xa8\xfa\x71"
-"\x6f\xe6\x44\x1c\x79\xd9\x3f\x39\xcb\x01\xe6\xa4\x58\x20\x50\x4e"
-"\x1e\xb5\x10\x1c\xda\x61\x02\x0d\xd7\x6d\x66\x21\x23\x07\xe7\xfa"
-"\xa4\x8b\xb8\x41\xfb\x7d\x50\x14\xf5\xe5\x2c\x81\x7f\xe1\x07\xc5"
-"\x5f\x05\x18\xdd\xd2\x84\x10\xd0\x18\xb0\x21\xa1\x42\x61\xef\x68"
-"\x93\x0f\xc9\x87\x99\x77\x7c\x6d\x1a\x9a\x2a\xd0\xbb\x6e\xfc\xbc"
-"\xbe\xf9\x19\x5f\x80\xfb\xd3\xa4\x93\x5e\x94\xdf\xfb\x70\x8e\xde"
-"\xd3\x1b\x3a\xdf\x53\xce\x92\x1f\x8c\xe3\x2a\xb9\xe9\x60\x5b\x6c"
-"\xb6\xc6\x52\x4e\x3e\xd8\x52\xd6\xc8\xe8\x20\x40\x84\x18\x43\x29"
-"\x5f\xe3\x35\x96\x4e\x9f\xa2\x38\xab\x2e\x62\x03\xce\x3d\x21\xf8"
-"\x29\xc3\xf4\xec\x49\xce\xb2\x6d\x67\x1f\x93\x0f\x10\xe8\xc4\x20"
-"\x59\xcb\xd1\xd3\x8b\xae\xa8\xeb\x7c\xa2\x1e\x3e\xe6\xfe\x79\xc4"
-"\x06\x93\x8e\xf0\xd0\x6c\x15\x4f\x2e\x82\xbe\x6d\xee\x99\x9b\x05"
-"\x28\x66\x63\x8e\xf9\xd7\x3a\x2b\x63\x72\x8e\x81\x9d\x90\xc2\xb9"
-"\x5b\x03\xe3\xd0\x23\x5a\x16\xce\x6f\x08\xb4\x98\x6d\xec\xe1\xd5"
-"\xc5\xeb\xdb\x28\xf4\x79\xbb\xbe\xc5\xd3\xfe\xfc\x77\xaf\x0f\xf3"
-"\x8c\x69\xfc\x3f\x4e\xec\x72\x1f\x8a\x5a\xad\xda\xd4\xc3\x72\xe4"
-"\xa0\x6f\x1f\x9d\x87\xcd\xf6\xcc\xc3\x0f\xd5\x0c\xf8\x5e\x49\x2a"
-"\xa2\x82\xc5\x82\xe6\x3b\x7c\x9e\xcf\xde\xd1\x3b\xd2\x6e\x86\xec"
-"\xac\x15\x45\x41\x15\x43\x86\x18\xc3\x17\x29\x46\x15\xc4\xc6\x56"
-"\x56\x08\x83\xc9\x02\x92\x60\x96\x7c\x6e\xfd\x6a\xea\x1b\x0c\xb8"
-"\xfc\xff\x20\xba\x90\xc6\x0e\xd4\x6d\x56\x6c\x0d\x92\x33\x2d\xe5"
-"\x7f\xc3\x9f\x9e\xfa\x26\xec\xa3\x79\xfc\xc5\xce\x48\x06\xd1\x31"
-"\x0a\xc6\x86\xee\x73\xa5\x9a\x61\xd9\xad\x39\x21\xac\xa3\x0b\x69"
-"\xe3\xda\xe6\xda\xb0\x46\x11\xda\xc5\x19\x43\x39\x6b\x86\x1d\x70"
-"\xa0\x20\x9f\xeb\x50\xa5\x08\x20\x81\x6b\x80\x30\xfe\xfe\xcc\xd0"
-"\x13\xef\x50\xb5\x00\x67\x3e\x6a\x2f\x97\xbb\xf1\x27\x24\x63\x9b"
-"\xdf\x56\x58\x1a\x46\x83\x61\xdc\xc9\x53\x6f\xc1\xb4\x3a\xed\xb6"
-"\xec\x02\xbc\x8b\x54\xdb\xa3\x82\x39\x26\x9a\x09\x9f\x5a\x73\xef"
-"\xd0\x4d\xf7\xd8\xec\xba\x90\x42\x4e\x04\xcb\xc8\x47\x78\xf7\x3f"
-"\x75\xfe\xd7\x5f\x6e\x13\x4b\x06\xb1\xa7\x1b\x25\x41\xbe\xe7\x15"
-"\x12\x7b\x8d\xa6\x7a\x7d\xf1\x50\xdf\xdb\x8c\xac\xf3\xd6\x4b\xea"
-"\xda\xb8\x63\x69\x2d\xac\x48\xdb\x28\x19\x42\x24\xc1\x21\xfe\xa5"
-"\xf5\xfd\x50\xd8\x0e\x20\x31\x72\x6b\x66\x92\xe9\xea\xfe\xab\xfe"
-"\x15\xd2\x4d\xdb\xd9\xf2\xbe\x9b\x56\xbe\xed\x41\x06\xda\x43\x00"
-"\xcc\x30\x15\x80\x0c\xe5\xf1\x67\x57\xb3\xa1\x8a\x05\xa2\x24\x23"
-"\xdb\xa6\xf2\x9c\x0e\xac\xee\x92\x58\x82\x77\x6e\x71\xd6\x2a\xc2"
-"\x9f\x3f\xa7\xe6\x87\x97\xb6\xf8\x84\x1f\xa3\x26\x7c\xd4\x12\xbe"
-"\x9f\x74\xc2\x03\xdb\x0b\x7a\x28\xda\x6d\xa4\xf9\x60\x1a\x9f\x6c"
-"\x89\x12\x9c\x18\x13\x6f\xb6\xf8\x56\x89\x66\xeb\x89\xfc\x24\x65"
-"\x5f\xd7\x86\x6a\x18\x49\x3b\x15\x24\xc6\x17\xfe\x35\x46\x4f\x02"
-"\xe4\x0d\xae\x59\x30\x63\xd4\x46\xe3\xc0\x6d\x8c\x67\xdd\xd3\x59"
-"\xd7\xd0\xfc\x6f\x9c\xf0\xb9\x14\xa5\x01\xc0\x82\x82\xba\x06\x33"
-"\x19\x88\x50\x2b\x04\x6d\xcb\xe2\x51\x30\x6b\xee\x35\xb4\xc2\xbb"
-"\xfe\x3f\xbc\xfe\xf1\xe7\x9b\x81\xfa\x46\x5d\x5a\x80\xd6\x24\x43"
-"\x78\x3e\x65\xb6\x20\xc1\x11\x1e\xf5\x28\xeb\x62\xb6\x28\xe6\x42"
-"\x39\xab\x74\x9f\xaf\x88\xda\x2f\x2f\xdc\x53\xa3\x57\x0d\x4b\xfb"
-"\x92\xfb\x52\xfb\x0d\xa9\x5f\x70\x28\x63\x6c\x03\x99\x22\x18\xc9"
-"\x35\xb9\xf4\x7e\xec\x87\x45\x20\x7f\x0f\x36\x43\xbf\x3a\x00\x53"
-"\xe3\xf6\xfd\x25\xbd\x84\x2f\xca\x18\xd2\x9c\xa9\xc3\x2f\xd2\xbe"
-"\x83\x68\x88\x2c\x0a\x3f\xb7\x91\xc6\x45\x19\xf8\xdd\x03\xfc\x4e"
-"\x5c\xef\x12\xcd\xfe\x5e\xbd\x8f\xc0\xa6\xf0\x90\xb1\x04\x8f\x54"
-"\xaa\x2a\xe1\xda\xb3\xe8\xf6\xfe\xd3\xd8\x6c\xed\x8f\xa6\x4b\xeb"
-"\x3a\x49\xe8\x4f\x04\xa9\x0f\x6c\x64\x1c\x19\xd9\xec\x5f\xcf\x83"
-"\xa6\x93\x78\x37\x89\xc0\x81\x08\x42\x04\x1b\x18\x22\x79\xb2\x28"
-"\x67\xfc\x3c\x13\x71\x5e\x03\x24\x10\xe5\x8f\x64\xc3\x0a\x22\xce"
-"\xd8\x09\x3b\x1d\x06\x0c\x69\x0d\x87\x75\x87\x86\xd0\x7f\x02\xe1"
-"\x13\x61\xde\x78\xc6\x71\xfb\xe6\xef\x16\x26\xe7\xd6\xed\xc1\x5a"
-"\x84\xed\x73\x26\x90\x68\x6c\xcb\x8a\x1d\x06\x48\x91\xa4\x0a\x61"
-"\x0b\xa2\x6b\x88\xfe\xec\xab\x67\x0e\xa7\x97\xb2\x26\x85\x4b\x8e"
-"\xb1\xb9\x0d\x43\x8a\x9c\x12\xd4\xc5\xdd\xcc\x91\xe2\x34\x25\x90"
-"\xd6\x8e\x19\x22\x04\x43\x19\x26\xbd\x3d\x9d\x84\xaf\xc8\x87\x7b"
-"\x03\x32\xa8\x27\xf7\x41\x92\x14\x4a\x88\x45\x90\x14\x72\x9f\x38"
-"\x5e\xe3\xdd\x74\x6d\x11\x1e\x49\xd3\xdc\x8c\x6d\x89\xf0\x0e\x1f"
-"\xba\xb6\xad\xec\xdf\x58\xd1\x52\xe6\x7d\x21\x65\xda\x2a\xe3\xdf"
-"\xda\xc9\x5f\xdd\xdd\x3e\xca\xd3\xa8\x45\xc9\xc0\xcb\x90\xa5\x4c"
-"\x4a\xf0\xbf\x1a\xf6\x1b\x11\xc4\x64\x44\xca\xff\x0e\x09\xe0\x8f"
-"\xbc\xd7\x10\x4f\x10\xb2\xe0\xdf\x3e\xa6\xed\x40\xd8\x1e\x92\xd5"
-"\x4f\x6a\xe8\x74\x2b\x67\x9e\xa2\xed\x67\x1e\x84\x3d\xa2\x49\x3b"
-"\x62\x23\x09\x59\x98\x07\xc3\xe9\xce\x3a\x7d\xe4\x9d\x58\x08\x8b"
-"\xf5\xda\x29\xb0\x34\xd9\xf2\x35\x5e\x65\xac\x67\xd6\xb6\x5a\xb9"
-"\x68\x5b\x50\xc8\xc7\x73\x57\x13\x8a\xf8\xaf\x53\xfb\x1f\xa6\x71"
-"\x7d\xc6\x81\x8b\x5f\x8b\x86\x5d\x79\xdd\x0d\x16\xb4\xf4\xcd\xc3"
-"\xd6\x12\x82\xb9\x35\x22\xcd\x61\x72\x06\x26\x52\x94\x77\x42\xe3"
-"\xaf\x8d\xff\xda\xdd\xfc\x64\xe2\x92\x19\x10\xa0\xca\xf4\x61\xa9"
-"\x49\xb6\x33\xc2\xa9\x17\x39\x35\xd3\x3b\x43\xf6\x7c\xa2\x73\x4e"
-"\x21\xbe\xa8\x00\xbc\xdc\x8e\x4d\x1c\x2f\x7c\x03\xcd\x22\xfa\x8a"
-"\x0f\x03\x43\x64\xaf\x40\x8c\xa9\x7e\x42\x15\xb4\xf1\x4b\xd0\xa6"
-"\x62\x43\x73\xe3\x03\x72\xec\xcf\x95\xae\x3a\x48\x88\x10\x4e\x1f"
-"\xcf\x5a\x52\x14\xa6\x95\xda\xe6\x2e\x6a\x8e\x35\xac\x48\x39\x41"
-"\x96\x4c\x57\x8f\x31\x9a\x35\x26\xbf\x45\x3a\x49\xb3\xf7\xe4\x25"
-"\x1c\xa1\x23\xeb\xee\x5e\xce\x9e\x8d\xad\x06\x48\xc4\x51\x46\x20"
-"\xa2\x22\x20\x35\x38\xf3\xad\x80\xe1\x6b\x40\xec\xc3\xcb\x5b\xde"
-"\xf2\xad\x3b\x57\x5c\x44\xd8\x1d\x1c\x39\x0b\xb1\x36\x17\xcc\x14"
-"\xdc\x29\x7c\xee\x45\x85\x62\xd8\x4a\x8e\x31\x2d\x6a\x09\x9d\x0d"
-"\x36\xae\xe8\xac\x58\xa0\xa2\x8b\x18\x74\xbe\xec\x29\x0d\x76\xfa"
-"\xa9\x5f\x1e\x86\x92\xfb\x75\x8f\x9f\xd3\x5c\x31\x0d\xeb\x93\xb8"
-"\x83\x9f\xa1\x89\x50\x37\x34\xb7\x17\x34\x82\xd3\xf7\x50\xcd\x93"
-"\x81\xb6\xbf\x61\x43\x10\x3c\xbc\xe8\xa6\xb6\xce\x67\x91\xa7\x0f"
-"\x07\x09\x52\x10\xd8\xf4\x46\x11\x92\x10\x13\xa8\xc0\xa9\x2a\x7e"
-"\xdb\x33\x2d\x64\x75\xf1\x6f\x4b\xf1\x53\xdb\xd6\xe9\x0e\xe4\xb7"
-"\xd7\xe9\xe0\x43\x44\xb5\x35\xd1\x0e\xc0\xd0\x90\xf7\xa0\x90\xc1"
-"\x47\x8a\x01\xc2\x58\x77\xdb\xba\x46\xa8\x81\x2c\x5d\x53\x11\x1c"
-"\xab\x99\x51\x22\xca\xe0\x83\x23\xc2\xfe\x56\x41\x4b\xa2\xe6\x4c"
-"\x8b\x72\x43\x69\xbd\xa2\x02\x72\x83\xef\x6b\x5d\xc3\xed\xf7\xdf"
-"\xfe\x57\xcd\x51\x23\xa8\x67\x34\xa6\x1f\x62\xe0\xa4\x9e\x13\x79"
-"\x31\xb9\x09\x01\xfd\x7b\x7a\x08\x67\xdd\x8d\x9d\xd0\x71\x0c\xb1"
-"\xeb\xa8\xd4\xc1\x94\x0a\x74\x5e\x9d\xb5\xc4\x42\x7d\x57\xcc\x4e"
-"\x83\xf6\xf9\x33\xd0\xc3\xc3\xd6\x16\x7f\x24\x35\xcb\x77\x95\xb3"
-"\x40\xa5\x12\x4a\x47\xdd\x5a\x81\x46\x02\x22\x0c\x12\x31\x51\x06"
-"\x44\x45\xcc\xa1\x8c\x8a\x3f\x0e\xb0\xc3\xf4\xf3\xe5\xd7\xcb\x69"
-"\x39\xa1\x0e\x6c\x54\x05\x82\x90\x54\xe8\x9d\x89\x58\xbf\x72\xdf"
-"\xb1\x81\xb0\xe3\x7d\x65\x5c\x4f\xec\xb4\x60\x87\x51\x85\x8c\xf0"
-"\xbf\x46\x0a\x30\x40\x38\xa9\x25\x76\x78\x50\xaa\x7b\xe8\x81\x6b"
-"\x1a\x1f\xdc\x43\xd1\x92\x9a\xf2\x79\x2c\x4f\x5d\x3d\xf2\x15\x62"
-"\x7a\xb2\xba\x44\xfa\xba\xf9\x0c\x42\x5a\x90\x24\x36\x92\x01\x7a"
-"\xbc\xa8\xbb\x1c\xdb\x18\x20\x43\xd4\x55\xf9\x3b\x5f\xfc\x91\x11"
-"\x10\xa3\xa6\x68\x5f\xd9\xff\x97\x6d\xef\xa1\x59\x56\x66\xc3\x0f"
-"\x9c\x99\xca\xaa\x62\x30\xf4\x4d\x2f\x33\xbf\x17\x58\xac\x78\x54"
-"\x3b\x69\xb7\x0e\xe7\x7e\x0a\x8f\xaa\xa2\xd7\x1e\xbe\xaa\x99\xe0"
-"\xcd\xb5\x61\x8d\xea\xee\x66\x16\x3f\x49\xc9\x86\x68\x53\xed\xc3"
-"\x19\xb5\x65\x75\x32\x9e\x02\x14\xf8\x46\x44\x5e\xe2\x08\x43\x27"
-"\x16\xaa\x7a\xcf\x81\x1d\xcb\x37\x84\xba\xf4\xc4\x22\x78\xc8\x4d"
-"\xfc\x22\x1a\x0e\x4c\xa3\x53\xf4\x70\xf9\xe2\x5d\xca\x6a\x30\xde"
-"\x33\x99\x98\x22\x29\xc8\x81\xd6\x9f\x1f\x12\xbd\xc2\x8f\x57\x98"
-"\xfd\x62\xb0\xf0\xa5\x52\xfb\xb3\xaf\x63\x18\x08\x82\x80\x59\x00"
-"\xc0\x82\xc0\x47\x29\x61\xe0\x96\x03\xab\xd3\xb2\x32\xeb\x70\x9d"
-"\xb0\x8c\x01\x49\x70\x97\x2b\x24\xdc\xe7\xa7\xd1\x61\xdf\xe6\x38"
-"\x34\x29\x46\x42\x94\xe2\xbd\xb1\x73\x83\xef\x43\xcb\x77\xd0\x7b"
-"\x70\xa0\x78\xc5\xd3\xca\xd5\xef\x60\x2e\x63\x12\x64\xcb\x3f\x51"
-"\xd9\x21\x1f\x91\xda\xee\xb2\xd4\x2d\xbb\x7f\x96\xd0\x3d\x8f\x6e"
-"\x79\xd6\x72\x56\x06\xab\x89\x1d\x76\x1d\x4d\x47\xdc\x6e\x3d\xfd"
-"\x8c\xab\xac\x7c\x23\xb9\x63\xe6\xa4\xdb\x6e\x81\xdb\x59\x44\x19"
-"\x71\xcb\x33\x42\x84\xb6\xdf\x39\x21\xbb\x58\xb9\xe2\x59\x80\x96"
-"\x31\x71\xc3\x91\xa6\xf0\xe2\x80\x46\xdf\x09\xee\x50\xd8\xfd\x51"
-"\x7c\x5c\x13\x21\x7e\xd1\x07\xba\x2a\x1d\x67\x6e\xcd\x71\x67\x2d"
-"\xdb\x6b\x48\xc2\x2b\x65\xef\x99\x8e\xb3\xd3\xb0\x4f\xdc\x7d\x3a"
-"\xa2\xa4\x62\x98\xfe\xf7\x3a\x54\x35\xbc\x81\xe5\x4e\x18\x0b\xae"
-"\x5d\xcb\xea\x8b\xcb\xba\x16\x41\x31\xbd\x02\x96\x1a\x1c\x8b\x04"
-"\xbc\xca\x45\x2b\xec\x48\xa3\x01\xe6\xef\x3b\xda\x43\x20\x2d\x44"
-"\xb5\x5d\xf0\x23\x00\x9c\x65\x91\xdd\xc6\x77\x1e\x57\xda\xd1\xd0"
-"\xa2\x28\xcc\x47\xd6\xd6\xf6\x2d\xe6\xe6\x36\x70\x66\x66\x80\xca"
-"\x62\x15\x92\xa3\x21\x92\x71\xd1\xdb\x70\x67\x52\xa5\x78\x42\xb9"
-"\xe9\x88\x7a\x91\x57\xb5\x81\xe5\xae\x39\x77\xdb\x85\x68\x2c\x5d"
-"\xe1\x04\xb8\x68\x76\xe7\x77\xb5\x14\xf0\x75\x03\x23\x4e\x4d\x3b"
-"\xb4\xd4\x46\x1d\x17\xd8\x10\x58\xb5\xa5\xee\x47\x24\xe7\x26\x39"
-"\x62\x9d\xdc\x81\x0d\xb8\x17\x43\xdb\x5e\x70\xed\xa7\x7e\x76\x43"
-"\x60\x45\x08\x44\xf5\xcf\x71\x84\x3b\xfb\x07\xd5\x3b\x8d\xa5\x1a"
-"\x81\x36\xf7\xde\xa5\xc6\x7f\xba\x95\x17\x90\xc0\xc4\x15\xb0\x49"
-"\xf8\xb3\x9f\x84\x14\x54\x69\x22\x12\xfb\x4e\x36\xa9\x77\xae\xa2"
-"\xbd\x09\x9d\xb8\x44\xd5\xf8\xfb\xcf\x54\xb4\xa0\xd4\xd3\x55\x56"
-"\xe1\x05\x5a\x48\xd9\x8c\x2c\x81\x1a\xbb\x5c\xcb\x2c\x89\x51\x43"
-"\x1c\x45\xe1\x1d\xa9\x1b\x28\x98\xed\x33\xcb\xcf\xda\x74\xf3\xe3"
-"\x8e\x0f\xa7\xae\x8e\xa2\x59\x69\x7c\xd1\x9a\x85\x33\xe5\x57\x64"
-"\xe1\x82\x5a\x1c\xce\xf4\x33\x9f\x2d\x8d\xf6\xf2\x43\x0b\x71\x2e"
-"\x29\x4b\x30\x29\x5c\x19\xde\x19\xad\x0e\xaf\x04\xf9\x44\x01\x7b"
-"\xa6\x80\x4d\x58\xb0\xdc\x66\x6e\x85\x17\xea\x3b\x60\x19\x95\x29"
-"\xd0\x65\x61\x2d\xd5\x56\x61\x73\x40\xad\x70\xc2\xfb\x98\x9a\x1a"
-"\x06\x8b\x6b\x22\x31\x1e\x6d\x15\x31\xbd\xec\xb9\xc4\x39\x4e\x71"
-"\x71\x13\xbe\xd5\x53\xe9\x80\xe3\x0c\x0b\x4a\x3c\x42\x52\xb4\x72"
-"\x81\xd5\xef\xc2\xb5\xe0\x2c\x1d\xa7\x9f\x68\x1b\x88\x1c\x51\xbd"
-"\x1b\xe3\x42\xcc\x14\xb9\xae\x10\x32\x49\xdb\xbd\x58\x34\xe2\xe6"
-"\x01\x4f\x1d\x6b\x1f\x9a\x96\x2a\x8a\x0b\xca\xd1\xe6\xd3\x86\x8d"
-"\xcc\xcc\x63\xbb\x84\xc3\x8b\xb3\x95\x21\x51\x99\x75\x38\xd1\x86"
-"\xc3\x28\xc5\xd9\x5a\xe5\xdb\x0b\xf4\xbc\xb0\xa6\xf2\x1b\xe4\xcc"
-"\x61\x97\x0c\x37\x4d\x2c\x9c\x98\x55\x9a\x36\x03\x29\x82\x57\xd6"
-"\xcf\x4f\x1d\x37\x37\x9b\x7a\x93\x37\xd4\xb8\x22\x23\x37\xa5\x79"
-"\xca\x69\x0e\x9e\xab\xb7\x5b\x59\xc7\xda\xe5\xc8\x14\xd1\xbd\xb9"
-"\xbc\xf3\xbc\x64\xda\x0c\x81\xdf\x26\x99\xef\x9f\xa2\xd3\x63\xe7"
-"\xfc\x85\x24\x52\x77\x70\x82\xf5\x2d\x8d\x2c\xfb\xfa\xe4\x6b\x59"
-"\xd0\xef\x81\xb0\x8b\x04\x45\x27\xbd\x87\x18\x1f\x62\x3c\xc2\xef"
-"\xe0\x72\x2e\xe2\x1d\xdd\xe3\x60\x80\x32\x4d\xb4\xb6\x49\xcf\x50"
-"\xe2\xb9\x18\x86\x18\x19\x37\x14\x37\xea\x18\xa6\x11\x08\xc9\x67"
-"\x3c\xc8\xa0\x49\xe1\x64\x17\x31\x36\x97\x53\x59\xb0\xe2\xd0\x7c"
-"\xc3\x99\xd4\xaf\xc2\x88\xb5\xeb\xdf\x7a\x93\xa9\xa0\x75\x7e\x36"
-"\xe0\x20\xa2\xe2\x34\xd9\xb9\xc3\x5d\xde\x77\xd4\x2e\x06\x46\xa5"
-"\xa5\xf8\x41\xfb\x32\x52\xb1\x9b\x3d\xdc\xeb\x23\x36\x21\xa0\x2a"
-"\x80\x70\x20\x61\xa5\x55\xaa\x36\x94\x4c\xc6\x32\x6c\x26\x41\x33"
-"\x61\x87\x35\x41\x91\x65\x74\x96\x14\x5f\x79\x71\x2a\xab\x38\x3d"
-"\xc9\x50\x8d\x8d\x5c\x65\x9f\xca\xc4\x8c\x90\x53\xe2\x4e\x31\x0e"
-"\x15\x8a\x62\xcb\x6e\xf9\xe4\xbb\x59\xb8\x2a\x08\x10\x39\xbd\x07"
-"\x23\x48\x65\x10\xec\x26\x64\x53\xc6\x43\x35\x33\x62\x5a\x07\x0b"
-"\x72\xa2\xb1\xb5\xae\x57\xa6\xc1\xb6\xdf\x9d\x78\xe3\x0a\x43\xd2"
-"\x9a\x85\xce\xc1\x77\x00\xf3\x0a\x26\xa0\x96\x71\x47\x75\x96\x85"
-"\x94\xd0\x38\x45\x29\x81\x22\x3a\x2e\x37\x12\x0e\xcb\x59\xd5\x25"
-"\x60\x54\x92\x0b\x33\x26\x81\x99\xdd\x01\x02\xf9\x80\x35\x30\x80"
-"\xd0\x64\xc8\x7b\xd7\x2e\x2a\x18\x4e\x5e\xd5\x5c\xf4\x60\xed\x54"
-"\x03\xca\xa0\x24\x0e\x6c\x2b\x65\x40\xa3\xc9\xdd\x61\x9d\xe3\x9a"
-"\x2d\xcc\x24\x94\x90\x49\x14\xc8\x44\x95\x1b\xa2\xd8\x51\x90\x39"
-"\xd8\xe7\x60\xd0\x0d\x02\xed\x56\x1c\x33\x0c\xf3\xc2\xb8\xc5\x65"
-"\xd6\x97\x22\x8e\xb0\x89\x00\xb9\xe9\x7b\xbf\x02\x05\x8d\xb8\x60"
-"\x37\x22\xdf\x56\x0c\x4c\xaa\x04\x24\x64\x88\xd1\x67\x61\x5a\xc2"
-"\xe8\x35\x1b\x58\x16\x0c\x9d\x11\x41\xdd\x46\x05\x05\x03\x83\xaf"
-"\x3b\xe1\xfa\x74\xd7\x3a\x18\xc6\x80\xa9\xb9\x47\xe1\xf6\x2e\xfc"
-"\x19\x4b\x8c\x07\x98\x18\x41\x99\xdc\xc1\xcd\xab\xf3\x14\x75\xd1"
-"\x9c\x52\x58\x37\x44\x7d\x21\x62\xf7\xd0\x32\xba\xdc\xe9\x3b\x20"
-"\xbb\x96\x13\x99\xa8\x41\x84\xab\x01\xc9\x20\xbd\x7b\xd3\x1b\x31"
-"\x12\xa5\x8a\xa2\xa9\x3d\x00\x72\x28\x21\xf7\x46\x15\x8c\x9a\x7f"
-"\x77\xf2\x85\x0e\xc9\x13\x6b\x4c\x82\x1c\xd7\xe0\x86\xe7\x61\x6a"
-"\x14\x26\xb2\x10\xaa\x24\xd1\xa0\xec\x1c\xb0\x99\xc5\x8a\xb2\x44"
-"\x73\x12\xbc\x35\x94\xf5\x84\x75\x9c\x15\x07\x1b\x86\x80\x86\xec"
-"\x66\x35\x0c\x34\xbb\xbe\x25\xca\x70\x88\xc9\x05\x19\x52\xa9\x6a"
-"\x05\xd5\x74\x21\x00\x76\xc4\xc7\x21\x13\xe2\x11\x21\x3e\x80\x2f"
-"\x46\xec\x4b\x85\xd5\x76\x63\x24\xbe\xa3\x68\xfb\xf9\x9b\x02\x09"
-"\x2e\xbe\xf8\x44\xaa\x2c\xbf\x92\x7f\x74\xe0\x46\x21\xa8\xfc\x13"
-"\x6c\x1b\x2f\x0b\x96\xf4\xaa\x6e\xd8\xd8\xd2\xcb\x1a\x72\x65\xbb"
-"\x83\x82\xb7\xb8\xc4\x91\x03\x0b\xb5\x1e\x31\x69\x13\x5f\x15\x8a"
-"\x26\x52\x01\x2c\xe4\xc1\xde\x18\x99\x86\x5e\x1e\xcc\x2e\xf7\x6b"
-"\x69\x6e\x5d\xf5\x6e\x85\xd6\xfc\x1f\x15\xe8\xc3\x83\xa0\x6d\xe2"
-"\x1c\x14\xb5\xfc\x3b\x1a\xc9\x9f\x66\x1f\xa6\xff\x8b\x56\x15\xd9"
-"\x36\xbb\xb2\x50\xf9\x28\x20\x6d\xba\x30\x99\xdd\x3e\xae\x05\x84"
-"\x2c\x76\xb5\xa0\xb8\x95\x8a\x07\xe9\x9a\x21\x18\x1d\x4d\x70\x2d"
-"\x06\x32\xea\xc4\x98\xad\xe9\x7d\x96\x60\xd2\x69\x87\x3e\xa2\x99"
-"\x5a\x7a\xaf\x22\x34\xbe\x19\x1b\xc1\x6e\x7c\x50\x8d\x70\x62\x31"
-"\x6b\x58\x8c\x45\x09\xd5\x0c\x53\x2a\xf5\x56\x5e\x48\x80\x20\x42"
-"\x80\x43\xfc\xdb\x6a\x9e\x00\xd2\x0d\x4c\xe8\x3c\x86\x14\x06\x45"
-"\x92\xb0\xf9\xc9\x10\xc0\xc5\xf6\x9e\x0d\x1e\x32\x45\xc7\x97\x24"
-"\x39\x1b\xc6\xc6\x29\x83\x86\x36\xf8\x70\x4b\x06\x29\x86\x09\x1a"
-"\x84\x80\xf0\xe1\x65\xd5\xb7\x59\xaa\x1c\x7b\x27\xca\x64\x63\x12"
-"\xac\xe7\x2b\x69\x55\xb6\xea\x9a\xbc\xa9\x59\xec\x3b\x4c\xe8\x6e"
-"\x72\xe7\xc6\xd7\x25\x39\xe8\x79\xba\xcd\xea\xa7\x40\x15\x5e\x48"
-"\x57\x76\x0b\x01\x8b\x01\x52\xce\x4a\xa6\x36\x12\xd6\x27\x5a\x07"
-"\x50\xfa\x03\x4b\x02\x3e\x91\x70\xb2\x23\x7d\x55\xb2\x58\xd7\xb4"
-"\x75\x14\x37\xd9\x2f\xc8\x29\x20\x64\xa6\x32\xa8\x84\x11\x96\xd1"
-"\x05\x8c\x07\x69\x49\x7b\x9a\x6d\xde\x7e\xc7\x86\xd9\xf6\xbb\x29"
-"\xab\x29\xd0\x87\x7e\xbc\x6c\xb5\x38\x7e\xdd\xca\x7b\x1e\xdd\x37"
-"\x4d\x12\xee\x66\xae\x39\x39\xeb\xeb\x36\xe7\x0d\x41\xf4\x06\xed"
-"\xba\xea\xb2\x25\x71\xbf\x0c\xc0\x79\x91\x81\x22\x65\x10\xf8\x5e"
-"\x5e\x8f\x26\x6c\x68\x2d\x8b\xd1\xa9\xba\xc2\xc3\x0c\x28\xad\x41"
-"\x3b\x47\xe4\xd1\x23\x6d\xd5\x7e\xdd\x24\x19\x34\x97\x14\x35\xb8"
-"\xa8\xcf\x98\xdf\x79\xb8\xf6\x60\x07\x8d\xaf\xcb\xf1\x97\x0a\x15"
-"\x85\x14\x1a\x91\x45\x82\x84\x4b\x49\x59\x4a\x7f\x0e\x4a\x2a\xa3"
-"\x46\x83\xaa\x69\x92\x69\x03\x4c\xd6\xba\xf7\xe8\xd9\x1d\x4c\x6c"
-"\x36\xb7\xd0\x45\xde\x1d\x42\x07\xc3\xd7\xc1\x32\x3c\xc3\xa8\x2f"
-"\x2b\x60\xcb\x31\x92\x1c\x48\xce\x96\x76\xff\x17\xe8\xca\x81\xe9"
-"\x49\xe9\xfc\xd4\xf0\x4d\xd9\xf9\x44\x03\xf1\xf1\x79\xdb\x0c\x42"
-"\x0b\x03\xf3\xe7\x86\x29\x0e\xe2\x8a\x23\x4d\x8e\x79\xfa\xd7\x52"
-"\x40\xc2\x35\x24\xee\x04\x2b\x24\x1d\xe5\xda\x03\x3b\xf5\xb3\xe0"
-"\xd8\x4a\x80\x7a\x59\x2b\x08\xb1\xf4\x5a\x31\x42\x0a\xc4\x45\x66"
-"\x92\x7c\x03\x09\xfe\x6c\x2f\x1c\xe2\xa3\x1b\xf9\xbe\x0e\x4c\x65"
-"\xe1\x8a\xb2\xc4\x5c\x18\x91\x26\xab\x6a\x95\x50\x19\x36\x81\xb4"
-"\xf6\x01\x4d\x07\x1b\x1e\xdd\xe4\xd2\x71\xee\x64\x4c\x36\xe8\xf5"
-"\xb4\xa8\x8c\x36\x30\x0b\xcf\xbe\x1f\x4c\xf8\xa4\x15\x91\x51\x11"
-"\x11\x16\x22\x0f\x74\xb5\x10\x16\x0a\xa5\xb0\xaf\xd5\xaf\xb4\x68"
-"\x3e\xf6\xd9\xd9\x35\x0f\x33\x53\x36\xa4\x94\xe3\x70\xc3\x37\x21"
-"\xee\xbc\xcf\x6c\xdb\x68\xa4\x27\xdd\x48\x41\x56\x0a\x41\x45\x01"
-"\x18\x54\xfb\x58\x53\x14\xef\x68\x61\x50\xf2\x43\x10\xd5\xac\x80"
-"\x9a\x71\x52\x0f\x8e\x73\x20\x44\xb0\x2f\x87\x02\x3d\xa7\x1d\xba"
-"\x3b\x97\x14\x0f\x65\x61\x98\x57\x07\x03\x28\xe5\xa2\x0b\x18\xf6"
-"\x2e\x24\x12\x53\xb2\x0f\xf1\x74\xf8\x5e\x24\x4b\x88\xfe\x52\xb9"
-"\xf7\x7c\x83\xb5\x5c\x78\x2e\x64\xe6\x59\x9f\xb3\x49\xa9\xa6\xfd"
-"\x54\x66\x45\xdb\x04\x59\x08\x84\x04\x46\xe0\x62\x2a\x53\x2d\x31"
-"\xa1\xe1\xaf\xba\x30\xc7\xa7\x25\x85\x6a\x98\x80\x9f\x34\xda\xfc"
-"\xb8\x86\x43\x86\xd1\x58\x91\xbf\x15\xac\xce\x21\xd5\x35\x02\x1f"
-"\x0e\x9b\x16\xf0\x91\x4e\xae\xa8\x4b\xab\x93\x18\x36\x81\x8d\x2b"
-"\xd3\xf4\x1d\x61\xdc\x35\x75\x9a\xe8\xad\xcf\x89\x34\x01\xfa\x90"
-"\x8a\x40\xfa\x59\x21\x44\x0a\x7c\x37\xf5\x9e\x7c\x71\x77\x32\x71"
-"\xdf\x3e\x7e\x50\x05\x06\x31\xb5\xa1\xf6\x64\x66\x1e\x6d\xfe\x96"
-"\x49\x10\xd2\x7d\x21\x23\x26\x07\xa9\x84\xc7\x2c\xce\xfd\xf6\xcb"
-"\x25\x5e\x2c\x8a\x7c\x9a\xe9\x85\x03\x31\x64\xd2\x37\xb4\x64\x60"
-"\x42\x48\xa0\x1c\xbb\xda\xc5\x16\x42\xef\xbf\x40\xe7\xc4\x7a\x22"
-"\x44\x20\xcb\x2c\x91\x03\xd4\x83\xdb\x97\xfb\x8c\x1f\x0a\x30\x35"
-"\xd2\x34\x55\x86\x2a\x48\xd3\x02\x58\xcd\x67\x64\x16\xdd\x10\xef"
-"\x92\x95\x1c\xd9\xfa\x76\x0d\xdb\x96\x68\x06\x83\x7b\x06\xba\x52"
-"\xf1\x5c\x74\xf3\x51\x21\x11\x0a\x46\x95\x0e\xa8\xb5\x08\x56\x86"
-"\x8f\x1f\xc5\x57\x7d\x85\x15\x51\x80\xa8\xac\x00\x94\x3c\xa7\x6b"
-"\x50\xf0\xd1\xe7\x9a\x03\xca\x79\x25\x46\x24\x78\xf5\x23\x7a\x0d"
-"\x01\x1b\x30\x18\xd0\x3f\x20\xa8\x6b\x11\xcc\x38\xe1\x9c\xe8\xf2"
-"\x68\x80\x43\x19\x61\xf6\xde\x74\xef\x11\x7b\x4f\x84\x25\x04\x9c"
-"\xb6\xba\x4a\x63\x1a\xae\xc4\xfa\xc8\x98\x48\x95\xff\xae\xab\x4b"
-"\x37\x3a\x5b\x6c\x5b\x64\xec\x5a\x24\x6b\x35\x52\x5b\xb7\x23\xd4"
-"\x9a\x43\x1b\x4d\x2f\x21\xcc\x93\x0c\x36\x6f\x0b\xb0\x74\xd5\x9d"
-"\x4e\x3b\x20\xde\x5a\xd8\xbb\x52\x2d\x62\x96\xf2\x62\x1a\x36\x43"
-"\x04\x9d\x63\xc4\x35\x5e\x85\xbe\x31\x9b\xe1\x69\x4d\xb5\x81\xde"
-"\x6f\xe3\xc7\xb8\xf8\x0e\x61\x21\x8c\xc1\x72\x12\x04\x71\xa1\x5d"
-"\x1f\x30\xea\xeb\x93\x94\x21\x08\xc8\x20\x87\xc8\x9d\xbe\x8d\xa0"
-"\x73\x4c\xae\x25\xe7\x69\xa5\x0e\xcd\x8e\x13\x50\xad\x23\x05\x46"
-"\x1b\x56\x6d\x93\x0b\x4c\x4c\x11\x25\x65\x13\x54\xab\x1d\x5d\x30"
-"\x7e\x89\xc2\x91\x42\xb2\x53\x5d\xe1\x1b\x82\x3d\x0b\xa1\x53\x33"
-"\x23\x50\x27\x27\x10\xaa\x91\x90\x24\x8c\x41\x9d\x50\x78\x93\x92"
-"\x0a\xab\x11\x91\x38\xf5\x66\x4b\xbe\x18\xea\xeb\x2b\xb5\x25\xf8"
-"\x9a\x99\x12\x1b\xdb\x88\xb1\x48\x73\x3a\x1f\x59\xd3\x11\x04\x3b"
-"\xf9\x5c\xdc\x9f\x45\x9b\x19\x3b\x19\xcd\xac\x14\x14\x28\xcf\x2d"
-"\xa9\x0e\x09\x64\xf9\xb3\x73\x5e\x8e\x82\xce\xdb\x7b\x0e\xd9\x79"
-"\xcd\xc7\xcd\x91\x40\xc6\xe5\xac\x21\xcc\xe6\x58\x75\x7e\x77\xd9"
-"\xe2\x93\xc3\x08\x70\x73\xed\x0e\x6a\xe2\x7e\x26\x66\x5a\x86\xbf"
-"\x1d\x86\x30\x73\x58\x2f\x52\x83\x85\x04\x14\xa4\xd1\x6c\x2e\x36"
-"\x65\x7c\x32\x6f\x78\xa6\xf8\xa9\x0c\xf1\x70\x85\xd7\xf6\x75\xc8"
-"\xf4\x6f\x3a\xba\xb7\x83\xc1\x2c\x50\xdc\x56\xd3\x8a\x32\x01\x22"
-"\xb2\x10\x84\x52\xe3\xe0\x21\xe8\x99\x9b\xbe\x3e\xcc\xa0\x73\xf9"
-"\x69\x17\x06\x4c\x96\xd7\x5e\x66\xa6\xfe\x35\xea\xac\x99\x24\xb0"
-"\xd1\x90\xd1\x39\xe1\x30\x98\x44\x10\xd5\x48\xf0\x62\x92\x9b\xd7"
-"\xf0\x89\x3b\x6f\xe7\xc8\xcc\xca\xac\xa1\x93\x7c\x7c\x23\x40\xb8"
-"\x15\x50\xe3\x72\x98\xa6\xb8\xb5\xd1\x8a\x1e\x5b\x2a\x22\x42\xe0"
-"\x27\x84\xbe\x1d\xaa\x0c\x60\xc9\xa6\x16\x31\x54\x89\x52\x8a\xb1"
-"\x62\x23\x02\x61\xa2\x90\xda\xd2\x21\x15\x13\x55\x02\x1a\x6c\x1b"
-"\x54\x39\xef\xf3\xfd\xf4\xa5\x47\x0b\x14\x65\xab\x9c\xbe\x95\x9b"
-"\x2e\x34\x49\xc8\x16\x33\x4c\xb9\x84\xed\x03\x56\x83\x21\x9e\x76"
-"\x7c\xfe\x32\x53\x82\xf8\xae\x73\x61\xe5\xaa\xc0\xec\x03\xb1\xa2"
-"\x09\x36\x44\x7f\xc7\x63\xc8\xf2\x2a\x2b\xbd\x66\xc1\x1c\x06\x21"
-"\x10\x94\xc4\x42\x49\x41\x0b\xac\x2b\xa1\xea\xa6\xde\xc1\x86\x08"
-"\x91\x01\xc8\x91\x02\x4d\x1a\x34\x83\xb2\x81\x30\x44\xc0\x92\x13"
-"\xa3\x0a\xa0\x39\x89\x45\x85\x27\x8a\x98\x4e\x4b\xb3\x4c\xb8\x10"
-"\x64\x00\xf2\xa9\x50\x42\x02\x2d\x40\x14\x99\xf2\x5c\xc4\xd5\xa8"
-"\xad\xb7\x33\x25\x6f\x2d\x6d\xb5\xa2\x6c\x49\x86\xe6\xb2\x1a\xb7"
-"\x42\x2e\x3f\x46\xdf\x71\x9d\x37\xdb\xa1\x67\x1f\x40\xea\x8a\x0a"
-"\x7b\x4e\x36\xe2\x6f\x98\x9a\x0d\x19\x56\x95\x86\x18\xf6\x97\xb7"
-"\x41\xb2\x43\xc9\xaf\xab\x97\x4d\x58\x6e\xf5\xd9\x60\xec\xec\x17"
-"\x57\xbb\x5f\x26\xe6\xdb\x26\x85\x36\x40\x66\x09\x94\xa4\xc7\xf4"
-"\xb0\xae\x09\x34\xca\x2a\x4b\x6a\x86\x0c\xae\x32\x05\x0c\x73\xf3"
-"\x30\xbc\xb6\xa5\x25\x18\x64\x2a\x58\x8b\x23\x05\x1d\x90\xf7\x0f"
-"\x7b\xeb\x20\x87\x69\x3b\x40\xf0\xe9\xa0\x27\x43\x1a\xb7\x03\xaa"
-"\x2e\x8d\x81\x59\x06\x11\x07\x50\xa1\x28\xd0\x83\x8a\x56\x58\xd2"
-"\x97\x0d\x5f\x64\x58\x56\x32\x6a\x3e\x87\x02\x45\x18\x0d\x8d\xa2"
-"\x64\xcb\xc0\x34\x4c\x58\x0d\x12\x18\x89\xc8\x0c\x91\x5d\x2f\xf2"
-"\xfc\xf5\x4a\x78\x41\x88\x86\x78\xfa\xa0\x41\x0d\x58\x62\x6f\xb7"
-"\xc2\x2e\xce\x99\x09\x64\xd2\xfa\xbc\xa9\xf1\x9c\x79\xb0\xb6\x1b"
-"\x6d\xf2\x62\x8a\x40\x24\x0e\xfe\x32\x76\x87\xc5\xa0\x0c\xd7\x27"
-"\x2a\x95\x65\x5b\x12\x25\xa5\x13\x0b\x86\x2d\xb5\x4b\x65\xb4\xb1"
-"\x55\x29\x4a\xb4\xdb\x30\x43\x10\x95\x44\x68\x38\x4c\x2d\x1f\x76"
-"\xa6\x87\x41\xdb\x70\x28\xb1\x93\x22\xec\x06\xb2\x64\xc9\x63\x25"
-"\x89\x82\xb0\xcb\x6b\x19\xe2\x40\xe1\xd6\x1b\x48\x6d\x0d\x89\xd6"
-"\x1e\x66\x87\xdb\xf3\x34\x06\x32\x69\x87\xdf\x40\xfa\x26\xa8\x6c"
-"\xc3\x10\x98\xdd\x7d\x72\x22\xe1\xbc\xa4\x00\x1d\x17\xad\xc2\x27"
-"\xe2\xa3\x84\xbb\x6c\x45\x79\xf2\xa9\x1e\x9f\x37\x52\x94\xc7\x46"
-"\xa5\x24\x91\x8a\x52\x14\xd9\x82\xa1\x91\xc0\xe6\x7b\x46\x64\x41"
-"\x09\xc5\x49\xcd\x22\xe9\x96\x24\x2f\x26\x90\x5a\xc0\x46\x59\x41"
-"\xdf\xd5\x07\xde\x3c\xcb\x19\xa3\x69\x34\x2d\x75\x1a\x4e\x3d\x9e"
-"\xe4\x7e\x6a\x51\xf9\xcb\xb6\xb1\x8d\x9c\x7e\x63\x2c\x2b\x64\x0a"
-"\x81\x00\x8e\x2a\x51\x6c\x09\x7c\x5a\x24\x8e\x49\x29\xbe\xe7\xd7"
-"\x92\xac\x88\xaa\x08\x7a\x7d\xfe\x40\x82\x9b\x13\x5b\x32\x73\xbc"
-"\xb9\x90\xdb\x03\xb8\x89\x52\xfc\x8e\x72\xb0\xc2\xe7\x88\x82\x42"
-"\x0e\x49\x77\x18\x34\x2f\x9a\x6f\x80\x09\x64\xd2\xe3\x44\x3b\x31"
-"\x29\x22\xc6\x49\xc0\xc7\x40\xb7\x13\x18\x71\xc2\x33\x57\xd5\x28"
-"\x0f\x72\x23\xef\x61\x4f\x34\x7d\xe1\xf5\x75\x0e\xbc\xb8\x82\x33"
-"\xd0\xfa\xd8\xa0\x82\x7a\xa9\x53\xcc\xb6\x0a\x0b\x77\xbb\xba\x99"
-"\xeb\xa1\x8e\xad\x4d\x59\x53\x45\xa9\x3d\x0c\x83\x3d\xdc\xc5\x7f"
-"\x99\x2a\x2d\xfd\x59\x97\x71\x20\x88\x18\x35\x0d\xae\xc7\x20\x1e"
-"\x82\x30\xe1\xcd\x61\x27\xc1\x38\x9c\x44\x3b\x92\x7b\x4f\x23\xa7"
-"\xa3\xe3\x3f\x5d\x62\x3d\xd7\x1c\x0b\xf9\x32\xbc\x26\xfe\x08\x0d"
-"\x96\x93\x35\xb9\xca\xa4\x91\xf9\xd8\x2c\xb7\xb1\xb1\x26\xd3\x65"
-"\xa1\xea\xbc\x3c\xa1\x60\x7a\xa4\xdf\x8d\x75\xc3\xec\x94\x87\x8a"
-"\x1c\x34\xf5\xf4\x55\x9f\xb2\x8a\x29\x53\xce\x85\x15\xa2\x9e\xe3"
-"\x7f\x56\xdf\x3c\x8e\x9e\xee\xe4\xe8\xf7\xca\x0b\xc9\x31\x9e\x2c"
-"\x04\xd8\x64\x21\xa2\x51\x6f\xb5\xe5\x51\x45\x51\x85\xf6\x99\x87"
-"\x3d\xe7\xb3\xd7\xd3\xaa\x07\x64\x63\x98\x32\xf8\xdf\x59\x92\xf6"
-"\xca\xc5\x82\xc5\xaa\x6b\x7d\xbb\x38\xa6\xf6\xfa\x34\x6e\xc1\x90"
-"\x72\xf4\xe8\x1c\x80\xd2\x05\xc9\x23\xde\x6e\x7f\x59\xa9\x25\x79"
-"\x09\xa2\x75\x37\x11\x23\xaa\xd8\xdc\xcd\x86\x46\xab\x5a\x21\x2c"
-"\x8a\x3b\x99\x6a\xc3\x0d\x61\xeb\x89\xfa\x2c\x14\x4b\xfc\x4e\x4b"
-"\x54\xe0\xbd\xe6\xd4\xdb\x65\x9d\x14\x06\xd1\x83\xf5\x8c\x0f\x6f"
-"\xba\x20\x62\xf7\x35\x0d\x51\xa2\xcd\x71\xcf\x64\xa2\x09\x0d\x1a"
-"\xe5\x24\xbd\x28\x81\x10\xc1\xc9\xd9\x89\xd8\x1b\xe1\x23\x08\x11"
-"\x84\x8c\x20\x46\x23\x18\x9b\x6d\x8c\x63\x6c\x38\x58\x18\x62\x85"
-"\xe1\x53\x2b\x78\xdb\x24\xb0\xdf\x6a\x93\x97\xc9\xda\x8e\x6b\x92"
-"\x34\xbd\x68\x15\x32\xc1\x4c\x49\xe0\xc2\x8a\x2c\x72\xc3\xcf\x29"
-"\xb3\x2b\x52\x77\x68\xba\x05\x53\x7b\x2b\x05\x27\xb4\xa5\x15\x19"
-"\x11\x58\xaa\x22\x0f\x79\x68\xa0\xa0\xa2\xb3\x16\xd1\x58\xc1\x62"
-"\x6c\x4d\x16\x0d\x12\x66\x53\x89\x59\xf4\xce\x94\x45\x31\x8c\x76"
-"\x53\x42\x96\x49\xfb\x83\x46\x12\xf9\x5d\x6b\x6e\x32\xab\x3b\xfa"
-"\x2c\x2e\x4a\x2c\x64\x16\x03\x23\x31\x30\xb6\x8c\xc3\x59\x74\xca"
-"\x8e\xa1\x48\xc6\x2b\xf8\xad\xeb\xe8\xe5\xee\x77\x43\xa3\x0f\x40"
-"\xcf\x8c\x7e\xdf\x7f\xa0\x86\x48\xef\x3d\xa3\x83\x61\x21\x97\xef"
-"\x5a\xeb\xb4\x36\xe2\x1b\xc1\x7b\xbb\x0c\x82\xab\x15\x89\x85\xa0"
-"\x33\x46\x6e\x69\xb2\xab\xa6\x2c\x86\x40\xd1\x2d\xec\x55\x1a\xb3"
-"\x5a\x97\xaa\x50\x39\x87\x51\x55\x14\x58\xa9\x58\x65\x93\xa4\x9b"
-"\x90\x3b\x0e\xf3\x27\x42\xaa\x0c\x54\x43\xe8\x4a\x9b\x88\x1c\xba"
-"\x2c\x18\xc9\x05\x83\x20\xef\x2c\xe5\xae\x40\x5f\xc1\x0f\xc2\x8a"
-"\x3c\xf3\x21\x66\xe6\x52\x1e\xda\x58\x07\x28\x19\x10\x46\x42\x3c"
-"\x7e\xc9\x83\xa1\x19\x15\x90\x0d\x1e\x40\x94\x6b\x0d\x78\xa6\xf3"
-"\xa6\xa9\xc7\x9a\xed\xae\x5b\x87\xb4\x27\x90\x65\xe8\x78\xce\x21"
-"\xda\x9e\x04\x18\x18\x9e\x23\x1b\x6b\x20\xa1\x8a\x99\x4a\x2c\x12"
-"\x7b\xbb\xe0\x7d\x9b\x6f\x37\x88\x14\x42\x8c\x94\x65\x68\xe1\x56"
-"\x8b\x41\xe7\x54\x97\x26\x83\xb8\x99\x62\xa9\x32\x0b\x5c\x38\x7f"
-"\x5b\x93\xef\x1a\xa6\xf8\xbf\xc2\x87\x6a\x71\xa8\xd8\x82\xbb\x17"
-"\x8b\xdc\x2f\x7c\x98\x58\xb0\x04\x5b\x61\xdd\x59\xdd\x2a\x81\xb1"
-"\xc9\x2e\x9e\x54\x3b\xae\x4a\x90\x4b\xc4\x32\x51\x11\x0a\x3d\x6a"
-"\xa2\x28\xac\x9b\x34\x6c\xc1\x05\x0e\xc4\x3d\xca\x8d\x5f\x7a\x0a"
-"\x33\xe9\xcb\x07\xcc\x0d\x9c\xfb\xb5\x69\xd8\x6a\xa0\xb9\x78\x59"
-"\x1d\x76\x81\x8c\xa8\xd3\x3c\xd9\x70\xca\x82\xdd\x08\x28\x6f\xd7"
-"\x33\x1d\x98\x59\x04\x87\x4f\xe4\xdd\xa9\x54\x59\x43\x18\xe3\x2d"
-"\x08\x36\xa5\x9a\x1f\xe0\x6b\x8f\x26\x68\x5c\x0e\x70\xe2\x17\x08"
-"\x74\xdd\x9f\xb1\x80\x31\xd0\x74\x51\x23\x14\xa8\xbc\x28\x62\x03"
-"\x14\xdc\xc9\xc6\xa6\x1b\x20\x95\x60\x9b\x34\x4b\x48\x41\x90\x40"
-"\x90\xa1\x5a\xbc\x11\x92\x11\x4b\x16\x41\xf8\xb1\xb2\x34\x41\x21"
-"\x77\xc3\x52\xeb\xb4\xa6\x96\x34\xed\x88\xb8\x33\x2b\xc8\xd0\x2c"
-"\xec\x44\xb7\x5e\x9d\x9d\xc4\xe8\xb4\x14\xf7\x1c\x12\x73\xba\x93"
-"\xc5\x23\xdb\x86\x46\xc7\xc3\x58\x52\x08\x0c\xa2\x99\x50\x80\x63"
-"\xf8\x2e\x9f\x3d\x1f\x1d\xf1\xd8\x4f\x76\xc1\x3d\xcb\x0e\x30\xa9"
-"\xa6\x1d\x02\x00\x18\x57\x52\x18\x48\xcb\xd7\x52\xb3\xf5\x53\x70"
-"\xf4\xad\x75\x8e\x08\xe1\x35\x49\x2e\xf7\x90\x3d\xa4\x43\x09\x0f"
-"\xe6\xff\x33\xe9\x4f\x8f\xdd\x17\x8f\x8b\xf1\xf6\x8b\x1c\xc6\xeb"
-"\x54\xec\xdd\x35\x9d\x5d\x6d\xa5\x31\x1a\x6d\x49\xc1\x05\x64\xed"
-"\x0e\xdf\xa4\x16\x00\xfd\x9d\x50\x6e\x6b\x8b\x5a\x32\xa1\x83\x49"
-"\xb0\x33\x52\x4d\xae\xbe\x02\x82\x4d\xb7\xc1\x42\xb7\x62\x3c\xbe"
-"\x30\x6d\xf5\x46\x4c\x57\xb0\x81\x98\x92\x85\xc2\xb2\xbe\x44\x36"
-"\x44\x70\x89\x48\x54\x0c\xb6\x81\x59\x90\x33\x74\xe7\xe0\x5d\x9c"
-"\x8e\xf1\x78\x75\xc9\x2f\xc2\xa8\xc4\x34\xb6\xe8\x35\x82\x9a\xc7"
-"\x8d\xd1\x77\xd7\x8e\x02\xf0\x82\x32\x75\xc4\x3c\x18\xd2\x40\x93"
-"\xe0\x6d\x0c\x5d\x7d\xed\xaf\x1c\xf7\x13\x7a\x51\x11\xd8\x5a\xe9"
-"\x3b\x50\xdb\x7b\x77\xa6\xf2\xb0\x8c\x6b\x30\x97\xad\x89\xd3\xc7"
-"\xb7\x3d\xab\xe3\x8a\xb4\x17\x1e\x68\x9b\x17\x39\x56\x21\x0e\xf1"
-"\x1d\x17\x6d\xa1\x03\x14\xaa\xd5\x22\x48\xde\xd1\xc1\x31\x72\x85"
-"\xb5\x98\xc8\x39\x6e\xdb\x99\xb5\xe9\x5f\xd2\x17\xe8\x7b\x9f\x36"
-"\xbb\x58\x6c\xdb\x06\x93\x1f\xae\x7b\xf6\xdb\x4e\x70\x45\x9b\xa2"
-"\x44\x9f\x95\xb6\xea\x90\x53\xb6\x30\x31\x55\x47\x22\x8e\x76\x81"
-"\x1a\x5b\x40\x45\x55\x05\x4c\x10\xa5\x21\x46\x56\xc7\xa2\x29\x3b"
-"\xe6\xc3\x53\x8b\x00\xa2\x6c\xec\x1b\x5b\x99\x80\x8e\x44\xa3\x09"
-"\x0e\xb0\xf1\x94\x51\x4e\xa6\xd3\x5b\x74\x0c\x0d\x0c\xea\x34\x82"
-"\x46\x03\xe0\xc0\x0c\x04\x8c\xe8\xac\x2f\x20\x55\x87\x5c\x8c\x50"
-"\x81\x03\x81\xcc\xc0\xb3\xa2\x80\x37\x14\x1d\x8a\xb3\xa0\x1d\xd2"
-"\x37\xc4\xe0\x0a\x01\xe5\x08\x96\x6d\xec\x53\x10\xa5\x5c\x15\xd0"
-"\x28\xf5\x69\x6c\x93\x07\x1a\x8c\x50\x62\x2a\x48\x6a\xdd\x95\xd1"
-"\x55\x4a\xa9\x51\x4b\x79\x42\xc5\x1e\x09\x24\xb3\xd4\xcb\xc2\x30"
-"\x98\xd4\x39\x0a\x16\x08\x3b\xaa\x07\xce\x2e\xb3\x75\x81\xa6\x94"
-"\xe8\x42\xaa\xdb\x30\x30\x02\xb3\xc9\x2d\x36\xa9\x8a\x5b\x09\xa3"
-"\x65\x4e\x91\xa2\xdb\x36\x68\x2b\x3b\xaa\x5d\x88\xc9\x04\x31\x40"
-"\xc5\x44\x69\xa3\x6e\x65\xc4\x04\xcc\x45\x12\xc1\x5e\x0c\xfe\xf9"
-"\xc2\xb4\xf5\x97\xd5\x74\x86\x6c\xb5\xc0\x6d\xcf\xe4\x2c\x8a\x02"
-"\xd4\x17\xbc\x57\x5e\x3e\x43\x36\x08\x7b\xf4\x53\x9b\x37\xe5\x49"
-"\x69\xd6\x10\x72\x07\x96\x31\x53\xa8\xd3\x9d\xd9\x0f\x3a\x8b\x5c"
-"\x33\x0d\x68\xb0\xd2\x28\xb1\xd5\xd4\x4d\x84\x12\x11\x1d\x23\xa4"
-"\x03\x75\x49\xa8\x69\x36\x5d\x0c\xc3\x16\xd1\x18\x40\x02\x81\x00"
-"\x7a\xbc\x42\x83\x1a\x86\x9f\x11\x5e\x03\x96\xe7\xc8\x56\x28\x6b"
-"\x50\x39\xce\xd3\x98\x1e\xad\x13\x82\x12\x20\x34\x0b\x98\x68\xd1"
-"\x89\x10\xdc\xb9\x51\x5f\x17\xcb\x8d\x91\x54\x12\xdb\xca\x48\x23"
-"\xf3\xc0\x19\x12\x71\x2f\x39\x09\xf2\x24\x14\x92\x13\x99\xad\x97"
-"\x89\x35\x2d\xa1\x45\x43\xbf\x2a\x35\x84\x4a\x0d\x59\x46\x16\xd4"
-"\xd6\x60\xbb\xb9\x4f\x49\x9a\xb0\xb8\x31\xc0\xcb\x1d\xc7\x1a\x8d"
-"\xcb\x54\x3b\x9c\xa7\x13\x63\x46\xfb\x4e\xb3\x74\x3a\x9d\xd4\xb6"
-"\xa9\xc8\x72\x54\xcd\xad\x9a\xac\x8a\x21\xb0\xb5\x4b\xdd\xae\xf7"
-"\x31\x35\x14\x6b\x04\x64\x53\x33\x58\x94\x3a\x6f\x79\x81\x9a\x64"
-"\x24\x8a\x60\x18\xa8\x97\xed\xa8\x78\x5d\xd9\x66\xb1\xc0\x1d\x95"
-"\x69\xa6\x23\x87\x86\xf7\xbf\xbb\xb7\x34\x23\xc9\x16\xdf\x0b\x93"
-"\xb8\xa1\xad\xea\x9a\x8e\x0b\xc0\x69\xaf\x79\x2d\x40\xb0\x6c\x77"
-"\xd9\xbd\xbf\x4d\x00\xa2\x3d\xf8\x7c\x26\xb5\x60\x77\x61\xbf\x48"
-"\x1b\x1c\x36\x43\xa6\x5f\x08\x50\xd2\x68\x25\xbc\x86\xca\x3f\x2b"
-"\xed\x5a\x87\x53\x46\x9b\x47\x5e\xb6\x40\x46\xb0\x43\x26\x4c\x9f"
-"\xed\x99\x24\x13\xeb\x5f\x47\x08\x7c\xb5\x0d\xd3\xad\xa0\xdb\x06"
-"\xbb\x8d\x0d\x45\x68\xcf\x03\x31\xb3\x50\x41\xd6\x10\x6e\x8f\xc3"
-"\xf8\xd6\x74\x41\xe7\x66\x8b\x23\xbd\x8d\x84\x95\xdc\x05\x61\x9f"
-"\xd8\xd8\xda\x0e\xd2\x52\x59\xbe\x09\x29\x68\xc3\xdb\x38\xe8\xe8"
-"\x24\x9b\x07\xc5\x1e\xa9\x3f\x44\xd2\xe2\x7c\xb4\x4b\x6b\xf3\xb8"
-"\x35\x9b\xb7\xcc\x06\xf1\x14\x1a\x08\x86\xda\x72\x46\x8f\x61\xa3"
-"\x7b\x21\x8c\xf1\x1e\x91\x53\xe3\xff\xe9\xe7\xef\x9d\x10\x50\x54"
-"\x45\x24\x58\x1e\xec\xb1\xac\x59\x14\x86\xd6\x10\xae\x85\x75\x33"
-"\xbd\x4d\xd6\x02\x88\x77\xc4\x90\x08\x90\x1b\x13\x2d\x34\x33\xf0"
-"\x63\x60\x73\x70\xbe\x66\x21\x20\xaf\x6d\x95\x7e\xee\x21\x2d\x05"
-"\x24\xcf\x26\x1f\x3c\xee\xef\x6a\x5e\x28\xf1\xab\x9e\x13\x62\x88"
-"\xeb\x68\x30\x8a\x1d\x9d\xb9\xc0\x20\xd3\x9b\x2d\x09\x8a\xa8\x92"
-"\x90\x3a\x30\x25\x27\x41\x51\x0e\xbd\xde\xac\xea\x5d\x48\x67\xb2"
-"\xeb\xe4\x39\x87\x16\x43\x6c\xc5\x8a\x63\x5c\xe2\x8a\xa7\x75\x8e"
-"\x16\x80\xf7\x16\xe2\xe5\x58\x84\x77\x8c\x0d\x92\xe1\xda\x19\x02"
-"\x6c\x19\xf5\x4e\x34\x9f\x7e\xde\x52\x57\x80\xec\xc5\x2a\x1c\x63"
-"\x2f\xaf\x68\x55\x46\xaf\xd9\x94\x70\x86\x1f\xe0\x38\x63\xde\x91"
-"\x4b\x89\x07\xe6\x1b\x1a\xa1\xa4\x43\x05\x26\xb4\xa8\x40\x19\x98"
-"\x98\xd2\x37\xc3\x72\x8a\x44\xdd\xd3\x51\x39\xca\x9f\x1a\x48\xf0"
-"\x39\xc1\x56\xfa\x60\x15\x24\x82\x37\xbb\x5d\x49\x04\x2a\x2b\x0a"
-"\x6a\x91\xab\xba\xb0\xa9\x60\xa1\x9e\x02\x70\x90\x8c\x62\x45\xac"
-"\xe3\xb1\xec\xc8\x45\xaf\x19\x4d\x4a\xaa\xbc\xb8\xab\x24\xe5\x10"
-"\xf3\x0d\xf2\xc8\xba\xd9\xc6\x72\x57\x4d\xaf\xab\x0b\xa9\x43\x57"
-"\xb6\x43\xb5\x81\xeb\x37\x24\xd4\x0c\x92\x77\x45\x33\x14\xdb\xd3"
-"\x5e\x6d\x60\x48\x65\x07\x1a\x1f\x9a\x07\x77\x92\x9f\x24\x17\xff"
-"\x1e\x7f\x3f\xcf\xf5\xf9\x6e\xef\xcb\x4d\xba\x0d\x3d\x45\xef\x66"
-"\x1e\x2b\xf4\x4b\x7b\xa2\x25\x4d\xa8\xbd\x9a\x13\x10\x5e\x52\xfe"
-"\xc5\xdc\x91\x4e\x14\x24\x0c\x96\x04\x0b\x80"
+"\x42\x5a\x68\x31\x31\x41\x59\x26\x53\x59\xeb\xde\x33\x77\x00\x0e"
+"\xd8\xdf\x80\x52\x70\x6f\xff\xff\xdf\xff\xff\xff\xff\xbf\xff\xff"
+"\xff\x60\x31\x0a\x00\x3b\xb8\x0e\x6d\xdc\x77\xd9\xea\xb7\xb8\x3a"
+"\x91\x47\x63\xdc\x3a\x3a\x50\x1d\x06\x3d\x1a\x60\x6b\xcb\x98\xbd"
+"\xf7\x3c\x82\xb5\xb6\xcd\x9a\x54\xfb\x0c\x7c\x35\x3d\x7b\x6f\x49"
+"\xdd\xce\x08\x87\x4c\x7b\x80\x34\xed\xbe\xc3\x52\xea\xdb\x24\x91"
+"\x21\x34\x0a\xc8\x54\xa1\x54\xa4\x5d\x34\x17\xd6\x08\x45\x2a\x96"
+"\xab\x51\x49\x12\x7a\x8c\x93\x44\x98\x03\xdc\xe2\xa5\x54\x22\xa1"
+"\xba\xf7\xc1\xa9\xe8\x84\xd3\x40\x26\x40\x14\xf2\x60\x21\xa9\x93"
+"\x46\x4a\x3d\x30\x98\x69\x94\x4f\x53\xd3\x51\xed\x43\xd2\x4c\xc9"
+"\x1a\x0d\x34\x04\x10\x20\x9a\x04\x13\x69\x09\xe8\x1a\xa3\xd2\x7a"
+"\x8f\x50\xd9\x4f\x50\xd0\x00\x03\x40\x00\x1a\x9e\x99\x24\xd1\x26"
+"\xa3\x68\x69\x3d\x43\x46\xd4\x1e\xa3\x40\x00\x00\x00\x34\x03\x40"
+"\x00\x00\x93\x49\x12\x04\x04\xd0\x08\xc8\x23\x26\x4a\x78\x08\x46"
+"\xd4\xd1\xea\x0f\x28\x68\x0d\x00\x00\x01\x14\xa6\x41\x32\x68\x29"
+"\xb5\x32\x69\x90\xd1\xea\x3d\x41\x90\x03\x4d\x03\x40\x0d\x34\x00"
+"\x00\x00\x24\x44\x20\x08\xd0\x4d\x00\x40\x13\x20\x47\xaa\x78\x01"
+"\x4d\xa9\xa1\xe9\x06\x86\x8d\x06\x80\xd0\xfa\x74\xfd\x3e\x1f\x0f"
+"\xaa\xdc\x41\x60\xf8\x9f\xd3\x2f\xed\x4b\xfd\x90\x4a\x26\x49\x4d"
+"\x13\x94\xf2\xb9\x0b\xa4\x05\x69\x33\x42\x7e\xa6\x85\xc5\x85\xa5"
+"\xaf\xb3\xab\x6d\x56\xff\xdc\xda\xcf\x57\xb8\xc6\x27\xf5\x7e\xaa"
+"\xab\x49\xc5\xef\x80\xf3\x80\xb5\xa4\xab\x73\x58\x29\x7d\xf0\x46"
+"\xc1\x6b\x18\xa1\x98\x40\xa6\x64\x42\x07\xc5\xa8\x09\xf2\xf5\xc7"
+"\xf8\x1d\x72\xe1\xf3\xf7\x7b\x72\xe2\x7f\xd6\x9e\xe9\xa3\xdf\x95"
+"\xc7\xd8\xbd\xff\x2f\x37\xed\x7b\xf7\x9a\xbf\xa6\xef\x80\xaa\xbb"
+"\x35\x7f\x19\xf1\x4a\xdc\xbc\x8e\x87\xfc\xfa\xd7\x11\x0c\x35\x8a"
+"\x73\xe6\xad\x27\xc7\x93\xe1\x25\x72\xee\x77\x0b\x1a\x3e\x65\xba"
+"\x26\x33\xb7\x8b\xed\xf6\xfd\x37\xc2\xdc\x27\x87\x14\x77\xe1\x4b"
+"\xfa\x23\x5b\x0b\x0b\x09\x00\x80\x18\xc6\x30\x7b\x7a\x36\xa8\x0c"
+"\x50\x5b\x6d\x49\x5d\xd8\xd6\xfc\xc9\x59\xca\x72\xdf\xe2\xee\x16"
+"\xea\x58\xc8\xc6\xc5\x2e\xd0\x98\xdb\xe1\xb6\x05\xda\x38\x95\x71"
+"\x4e\xf1\xa0\xb6\x08\x36\xaa\x48\x12\x83\x03\x06\x88\xc4\x20\x9f"
+"\xbd\xfb\xf6\x6d\xc3\x63\xaf\x4f\xcc\xb1\xcb\x2a\x84\x93\x22\x05"
+"\xb8\x8a\x70\x1f\x86\xa5\x6b\x70\xfc\xd6\x66\x0e\x34\xd4\xf9\xb9"
+"\xda\xfb\x47\x02\xe6\xea\xce\xdf\xe4\xe7\x70\x8d\x1a\x97\x39\xb1"
+"\x03\xae\xe2\xe3\xe1\x7f\xb4\xc9\x66\xca\xb5\xb6\x8b\x53\x62\xf1"
+"\xd3\x52\xa5\xfc\x92\xe1\xe5\x91\x71\xf4\x5b\x4c\xc3\x2e\x84\x1b"
+"\x6e\x66\x45\x8e\xa7\xed\x68\xd7\x9b\x9f\x89\x5b\x40\x97\x93\x0f"
+"\x3b\x93\x84\x36\xcb\xad\xf2\x60\x56\xec\xbc\x3c\x52\x77\x6e\xe5"
+"\xe0\xda\xcd\x78\xaf\x51\x90\x67\xd7\x5e\xbd\xfb\x79\x67\xdb\x76"
+"\x63\xbd\xba\x89\x26\x54\xcd\x04\x01\x0f\x19\x07\x58\xdc\xa3\x0f"
+"\x80\x35\xd3\xe1\x18\x34\xb8\x42\x5d\xf8\xd6\x3a\xd1\x35\xeb\xa7"
+"\x4f\xeb\x81\x16\xab\xb7\x45\x95\x1c\x92\x26\x63\xa3\x35\x99\xb9"
+"\x9c\xdd\xd4\xd1\x22\xb8\x61\xe3\x88\x5d\x23\x5c\x9c\x9c\xb6\xdb"
+"\xe0\x66\xb9\x7a\x0e\x8e\x27\x6e\x9b\xfa\x7d\xbb\xd1\x01\xc6\x6e"
+"\x0a\x2a\xb5\xb5\x16\x4f\x71\xc0\xac\xd9\x8b\x22\xed\xcd\x3f\xfd"
+"\xb5\xf9\x7a\xd3\xf4\xfc\x68\x7e\x1a\xf5\xf3\xf2\xdc\xfb\xbf\x20"
+"\x21\x0a\x22\xc8\x28\x22\x0a\x2e\x19\xb6\xf7\xf9\x2f\xd8\x1b\x43"
+"\x34\xc1\x09\xf9\x23\x70\x90\xef\x44\xf5\x6b\xdb\xee\x46\x47\x04"
+"\x54\xdd\x6d\xab\xc3\x50\xe2\xec\xce\x4e\x72\xf6\x78\x1e\xf2\xb5"
+"\x53\xeb\x5c\xc1\x38\xa2\x1a\x47\xae\x35\xcd\x9a\xc9\x2b\xd1\x59"
+"\xee\x24\xa3\x6e\xa8\x25\xad\x87\x16\xb6\xec\xa7\x5a\x86\x5e\x15"
+"\x17\x3e\xe5\xfc\x1f\x3b\x2d\xae\x55\x3f\x65\xf3\xd6\xf8\x66\xdf"
+"\x03\x9c\xd5\xc6\x1b\x3a\xd4\x4e\xaa\x8b\x44\x0d\xcd\xa9\xe3\xa7"
+"\x2f\xab\x14\x5a\x77\x35\xf3\x2e\x18\x1a\xc4\xf7\x11\x01\xe6\xcb"
+"\xc8\xb3\x2e\x3a\xac\x98\x36\x6e\x08\x6f\xaa\xca\xd2\x4d\x8e\x96"
+"\xfe\x89\xa7\x15\x18\x8a\x0e\x4a\xea\xac\x1a\xb4\x4e\x26\x16\x47"
+"\xcb\x14\xc7\x7e\x6b\x73\xa1\xe3\xd2\x5b\x96\xb2\x97\x23\x91\x8b"
+"\x6c\xa1\xe5\x6c\x9f\x6c\x35\x97\x21\x56\xcf\xd5\xa1\xa2\x9d\x4d"
+"\xd6\xe7\xc5\xa4\x5c\xf4\x3a\x0c\x05\xfe\x32\x1a\x16\xd1\x78\xc7"
+"\x39\x68\x2a\xb3\x12\x3d\x91\x63\xfe\x6b\x09\xa5\x2a\x45\x59\x7e"
+"\x0f\xdc\xee\x1b\xeb\x41\x47\xcd\x55\x0c\x05\xf7\xa7\xa9\xd7\x72"
+"\xc8\x31\xa2\x04\xa9\x37\x41\x5c\x0e\x73\x0b\xf3\x26\x0a\x9c\x52"
+"\x10\x67\x21\x7e\x93\x8e\x83\x52\x67\x20\x7a\xde\x8c\xd4\x53\x94"
+"\xa0\x24\x9a\x1c\x17\x61\x0d\x66\x62\xce\x14\x3d\x58\x4b\xae\x46"
+"\x91\x5a\x06\xde\x53\x04\x45\x4c\x88\x36\x71\xca\x9b\x8d\x6d\xa7"
+"\x2c\xbc\xc4\xe3\xb5\xd6\x77\xc6\xec\xd8\x4a\xc0\x17\x84\xc0\x8d"
+"\x84\x94\xad\x2c\xbf\x69\xbe\x9e\xab\x8b\x77\x1a\xae\x96\x74\x3e"
+"\x0a\xa1\x8c\x90\x18\x6e\xe9\xa1\x0e\x3b\x11\x62\x27\xa9\x1a\xb2"
+"\xd9\x7e\x8c\x3f\xc7\xd8\xe9\xee\x03\x49\x05\x09\x3f\x04\xae\xd8"
+"\x49\x3a\x24\x93\x12\x48\x8b\x82\x5c\x84\x53\x86\x5f\xd6\x54\x20"
+"\x2d\xdb\x84\xcd\xd6\x73\x54\x2c\xa5\xbb\xe5\xc7\x3d\xe5\x94\x76"
+"\x8e\x14\x0d\x72\x98\x9d\xa8\x20\x72\x4a\x82\x65\x50\xbc\x59\x45"
+"\x4e\xcc\xe8\x74\x94\x91\x12\x19\x8a\xc8\x08\xb6\xd5\x17\x19\x04"
+"\x47\x23\x9e\xdd\x50\x49\x29\x55\x2a\x70\xa0\x56\x11\x5a\x35\x50"
+"\xe2\x83\x9b\x40\xd9\x4c\x14\xca\xe0\xce\x6e\x0c\xa8\x75\x6c\xe8"
+"\xd6\x13\x24\xa6\x31\x8f\x86\x64\xf9\x04\x64\xd1\xd2\xbe\x06\xcc"
+"\x08\xd2\x35\x7a\xe7\x57\x03\xfd\xff\x62\xba\xd5\xba\x86\x65\x84"
+"\x9e\x60\xf4\xee\xa5\x4d\xd1\xa1\x39\xfc\xbe\x8a\x1e\x37\x5c\x7a"
+"\x3c\x30\xda\x8d\x45\x37\xd5\x17\xbc\x65\x7b\xe7\xf3\x5d\xaa\x05"
+"\xd8\x74\xf1\x8e\x1c\xdd\xf4\x46\x62\xaf\x31\xb7\x90\x67\xbc\x3b"
+"\xf2\xfc\xbe\x7f\x4f\xcf\x27\x9b\xa3\xf3\x73\x3b\xa8\xbb\x15\xf4"
+"\xcf\xbd\x1b\x77\x35\xfc\xf2\xbe\xac\x8e\xe4\x0a\x51\x06\xad\x87"
+"\x80\xdc\x1b\xbf\xad\x51\x2a\x56\x51\x53\xc3\xd7\xfb\xd2\x5b\x9d"
+"\x9f\x61\x2a\x08\x7b\xd0\x6d\x2d\x8e\x18\x61\xa2\xf8\x57\x92\x14"
+"\x10\xe1\x41\x9d\x81\xf9\xad\x76\xb8\x5a\x14\xda\x58\xfd\x1c\x2d"
+"\xa0\xff\x3f\xe5\xda\x5e\x34\xfd\x3c\x5c\x6a\x94\x04\x42\xfa\x01"
+"\xe5\xc6\x81\xb3\x3b\x97\x2c\xe3\xa9\x2f\x48\x1b\x3e\x3e\xcc\x58"
+"\xad\x1a\x23\x55\x58\xbb\x74\x26\x0a\x38\x2f\x8d\xb8\x84\x3b\x37"
+"\x79\x1c\x95\x47\x56\xc3\x35\x7e\x9d\xb7\xf4\xeb\xf2\xb3\xdb\x3c"
+"\x95\x03\xba\xdc\x75\x8d\x63\x59\x91\x02\x75\xe5\x30\x20\x21\x0c"
+"\xeb\xb3\x27\x34\x96\xf9\x1c\x66\xa5\xa6\x3c\x57\x94\x60\x2e\x12"
+"\xda\x42\x37\x29\x75\xf7\xd9\x33\x7a\xae\x83\x9c\xf3\x0b\xf1\x8a"
+"\xf4\xd2\x98\x9b\xb4\x77\x45\xc7\x9b\xad\xc8\xef\xfd\x55\x54\xbe"
+"\x3f\x02\xd6\xc4\x05\x2c\x17\x73\x40\x64\x27\xee\xf4\x69\x34\x9c"
+"\xd1\x04\xfb\x1b\x3e\x8e\xef\xe5\xcc\xd9\xf8\x30\xfe\x1b\xbc\x92"
+"\x7b\x3f\x1b\x07\xdf\x48\xfb\x79\x33\x51\xe1\x1b\x71\x4e\xcf\x2d"
+"\xce\xbb\x38\xf9\x39\x8e\xe1\x47\x0b\xb2\x4d\x7a\xbc\xb4\x1e\x62"
+"\x6e\xd3\x6b\x82\xac\xa6\x3d\x09\x22\x57\x02\xee\xdf\x2d\x3f\xc2"
+"\xac\x98\x7b\xde\x89\xc6\x8b\xfa\x29\x2f\x23\xe8\xb1\x07\x0a\x94"
+"\x2a\x5e\x9f\xcf\x45\xde\x0f\x25\xc1\x41\xb3\xc3\x6c\x9d\x14\x43"
+"\xee\x74\xd0\x45\xdd\x9f\x94\x0c\x47\x21\xc8\x4b\x0e\x9e\x2d\xfe"
+"\x43\x81\x72\xc0\xda\x99\x3e\xd8\xea\x5f\x8d\xed\xe1\x3d\xa4\x72"
+"\x22\xd8\x09\x04\x29\xe1\xc1\xf8\x4f\x2d\x92\xa4\x0a\x1e\x1f\x87"
+"\x8f\x16\x10\x09\xfb\x3d\x76\x7e\x6b\x08\x70\x41\xae\xf6\x1e\x74"
+"\x27\xa8\x5f\x3b\x6f\x95\x9f\x19\xc0\x05\xbb\x14\x4e\x33\x19\x29"
+"\xb7\x04\x00\xaf\xc6\x8e\x7d\x0e\x8d\x34\x0e\xf1\x06\x40\xd6\x6e"
+"\x7d\xa6\x6a\xeb\x48\x32\x08\xe6\x35\x99\x46\x32\xac\x52\x34\x5e"
+"\xdf\xbb\xef\x54\xcf\x0b\xf0\xfe\xee\x71\xeb\xd5\x34\xd4\x2e\xa3"
+"\xc7\x85\x07\x75\x32\xda\x3d\xf9\x3b\x42\xd9\x85\xb3\x10\x0d\xb0"
+"\x9e\x41\x68\x85\xe7\x09\xb3\xa6\xa2\x2a\x1f\xee\x85\xed\xd9\x58"
+"\x98\xd3\xce\xf9\x3d\x51\xad\x69\xcb\x6c\x8a\xe4\x0e\xbe\x2b\x9f"
+"\x2a\xb7\x61\xab\x8b\xcb\x4c\x58\xe6\xa2\x02\x22\x58\x98\xa7\x56"
+"\x28\xc1\x5d\x2f\xae\x2a\xf1\x25\x19\x16\x48\xfa\x29\x2b\x85\xe7"
+"\x7e\xb4\x31\x22\xaf\xfc\xa2\xfd\x3d\xd3\xb2\xb1\xc8\xfb\xda\x3a"
+"\x81\xa7\x81\x22\x6b\x7f\x9e\x9c\x7a\xe5\x54\xef\xf8\x25\xc6\xac"
+"\x51\xf8\xef\x88\x76\xb2\xf7\x77\x70\xad\x6e\x2d\x1b\x85\xb6\x17"
+"\x62\xe1\xfb\x1e\x92\x27\x23\x17\xbe\xe1\xa4\x69\x70\x46\xc5\xbd"
+"\xd9\x50\xea\xed\x0c\xa7\xb2\xfe\x7f\x84\x8f\x3d\xbb\xf4\x3b\xc7"
+"\x3b\xa6\xa5\x1d\x81\x0c\xac\x15\x6e\x46\xd1\x2e\x03\xc9\x22\x1d"
+"\x96\x04\xc1\x3f\xc1\x04\x5b\x2d\xc2\x6a\xa9\x7b\xc5\x55\x94\xd2"
+"\x46\x59\x31\x81\xc9\xaf\xa4\x50\x77\xc8\xb4\x69\x57\x80\x67\x39"
+"\xe2\xe9\x76\x6d\x5b\x82\x44\x3a\xb5\xc9\x6d\x21\xf3\x6a\x65\x74"
+"\x52\x1f\x6f\x6f\xd2\xc2\x2f\x23\x0d\x92\xc0\xf5\xa9\xbd\xa5\xad"
+"\x4e\x23\xb2\xe6\xa1\xaa\xf8\x54\x79\xf6\x21\x44\xa1\x7e\x52\xc8"
+"\x59\x36\xa5\x0c\x3c\x94\x0e\xeb\xdf\xf1\xbf\xbd\xe5\x8c\xcd\xcf"
+"\x11\x8e\xdb\x76\x70\x2c\x1e\xd8\x25\x62\x03\x9c\xd8\xa1\x5d\xc4"
+"\x9c\x2c\x5c\x11\x31\x87\xc2\x7c\x1d\x9d\x73\xc9\x65\xef\xe9\xdb"
+"\xd5\x6a\xf0\x58\x1c\x0b\x5b\x96\x2d\x99\x0f\x96\x0d\xaf\x8f\xf1"
+"\xff\x5b\xa6\x8e\x87\xd1\x2c\xab\x08\xcf\x0b\x28\x60\x87\x24\x5e"
+"\x09\x7e\xee\x24\x62\x99\x68\x4d\x8a\xc6\x20\x64\x86\x9b\x9f\x24"
+"\xc5\xe1\xf5\xb5\xd9\x91\xc3\xe3\xef\xf4\x41\xc2\x3c\x49\xa5\x97"
+"\xa3\xa6\x60\xdb\x03\xf4\xb9\xc2\xab\xc8\xc6\x39\xd9\x50\x50\x19"
+"\x86\x95\xdc\x3a\x70\xe8\x1f\xd9\xd6\x11\x8c\x0e\x89\xb2\x56\xed"
+"\x37\x50\x2c\x78\x75\x68\xe0\x45\xbc\xfc\xb8\x67\x9a\x58\x1f\x2e"
+"\x25\x44\x0c\x45\x2a\x37\x63\x2c\x53\x79\x99\xe3\x99\xe0\xb3\x78"
+"\xba\x84\x59\xc6\x83\x8e\xe9\x40\x94\x92\xd6\x95\x11\xf9\x40\xae"
+"\xaa\x29\x07\x2b\xd2\xaa\xea\xbf\x98\x8a\xd7\xac\x8f\x28\xda\xd1"
+"\x19\xca\x99\x61\x46\x37\xfb\xb9\x7e\x60\xa2\xe7\x75\x3a\x5b\xdc"
+"\x99\x58\x83\xe7\x87\x4d\x4a\xbb\x68\x17\xe2\xb1\x5e\x93\xcc\x68"
+"\x3e\x02\xab\xd7\x22\x3f\x5d\xc2\xdd\x7b\xbb\xd4\x6a\xf9\x5d\xcc"
+"\x18\xbc\x7b\x1e\x23\xca\x07\x61\xfb\xc3\x33\xd7\x9f\x2a\xdb\x17"
+"\xa6\x20\x9f\x82\xd7\x2d\x7c\xac\x98\xc9\x0f\x42\x07\x69\xdf\x92"
+"\xdb\xa2\xd7\x8f\xfa\x2b\x7e\x7d\x3c\x3b\xcf\x3f\x49\x0e\x72\x6d"
+"\xb5\xa9\xcf\x5b\x5b\x98\x50\xd8\x8d\x9f\x51\x81\x68\x7b\x4e\x71"
+"\x4c\xba\x49\x77\x17\x7e\x26\x64\x19\x03\x59\x7b\x6a\x48\xb6\x35"
+"\x6d\x75\xd5\x43\x94\x46\x04\x31\x42\xeb\x57\x83\x5b\xda\x28\x12"
+"\xc5\x55\x42\xb3\x88\xcc\x0f\x69\x14\x96\xef\x60\x93\xb0\xe3\x33"
+"\x14\xd9\x2e\x39\x3b\x3a\xf9\xc2\x4c\x15\x45\x72\x54\x12\xaa\x0d"
+"\xda\xcf\xe1\xb5\x06\x00\xe1\x64\x36\x0b\x32\x8c\x90\x79\xb0\x7c"
+"\xc6\x55\x45\x1e\x0f\x95\x7c\x65\xfc\xcb\x96\x9e\x84\x46\x41\x2e"
+"\x7c\xe5\x85\x5e\xc2\x3a\x9d\x84\xad\x87\x1c\xd5\x17\xc2\x8e\x6a"
+"\x29\xa2\xe1\x33\x7d\x43\xaa\xa1\x39\xa2\x1b\xf4\xf0\x9f\xdb\xfb"
+"\x3d\x43\x9e\x76\xa3\x6e\xd7\xd4\x82\x23\x49\x68\xd2\x15\x84\xc7"
+"\x4f\x12\x3e\xa8\x47\xe7\x23\xa7\x5e\x9a\xa6\x6d\xe5\x5e\xc2\x1f"
+"\x50\x7d\x7d\x75\x86\x5b\xa0\x60\xa4\x1c\xfd\xcc\x89\x67\xf8\xd8"
+"\xd0\xc6\x05\x57\x2b\x2e\x15\xfd\xb5\x9d\x2e\x12\xb2\xeb\x21\x29"
+"\x80\x36\x0a\x28\x54\x55\x05\x10\x43\xe5\x4e\x77\xdc\x21\x4c\x69"
+"\x64\xc2\x6b\x05\x30\x37\xda\x90\x93\xd6\xcf\xae\x8d\xba\xae\xa3"
+"\x41\xc0\x69\xac\x25\x83\x66\xe8\xad\xf7\x9b\x20\xc3\x90\xc2\x68"
+"\x7c\xb7\x81\xb0\x3f\x8f\x98\x5b\xbf\x8b\x8c\xc6\xc9\xd5\x74\x1a"
+"\xa4\x67\x1f\x58\x88\xf9\xd8\x33\xde\xdd\x96\xa3\x88\x49\x28\xaf"
+"\x38\xd4\x77\xc4\xef\xe1\x95\xb8\x7c\x2f\xe8\x6a\xd3\xa6\xf7\xf1"
+"\x65\xf9\xbc\xb2\xa4\x34\xe9\x0c\xff\x04\xc0\x71\xd4\x46\x9e\x6e"
+"\x29\x91\xd0\x63\x56\x8f\x25\x9f\x67\xb0\x56\x39\x99\xc3\x0e\xde"
+"\x83\x8f\x09\x1a\x90\x48\xd0\x80\x28\x98\xd5\xf6\x30\xb4\xdc\x24"
+"\xa2\x90\x33\x38\xb8\x56\x55\xc7\xb5\x6f\xa1\xe8\x45\xc6\x20\x51"
+"\xba\xe5\x91\x6a\xcd\x10\x55\x4d\xba\xea\xdb\x90\xa5\x49\x3c\x68"
+"\x9e\xcc\x2e\x86\xf2\x06\x53\x2a\x1b\xb0\x7b\x9e\x3d\xb2\xd0\xae"
+"\x5a\x59\x93\x82\x15\x09\x04\x5f\x68\xa1\xd9\x60\x78\xd8\x5e\x05"
+"\x4b\x6c\x6f\x65\xbd\xa5\xb1\xdd\x2d\xd1\xed\x95\xac\x76\x14\xd7"
+"\xc3\xb8\xba\xb7\x06\xda\xae\x98\x49\x81\x51\x8e\x00\x84\xa5\xd9"
+"\x27\x51\x2f\x49\x3c\x91\x6a\x87\x69\x87\x10\x4e\x34\x99\x0c\x2f"
+"\xbe\x0c\x69\xca\x9b\x00\xe9\x93\x7c\x41\x50\xa1\xa9\x17\x60\xf2"
+"\xb9\xc5\xa5\x95\x2c\xdb\x63\x6e\x68\x41\x76\x88\x6d\x2c\x6b\x4f"
+"\xb7\x6b\xfb\xed\xef\x07\xcb\x98\xd7\xb8\x1e\xa4\xac\x76\x4d\x23"
+"\x3a\xa0\x3b\xea\xd4\x3e\x45\xc8\xc3\xda\xec\xbb\x4c\x0b\x28\xfa"
+"\x1a\x9a\x68\x28\xeb\xc3\x7c\x85\x43\xf6\xee\x47\x0d\x7b\x70\x7f"
+"\xab\x71\x5d\x1c\x58\x8a\x2b\x5d\xe1\xbc\x70\xff\x4d\x73\xac\x4e"
+"\x7b\xb6\xcf\xc4\x02\x23\x1d\x19\x3a\x69\xa6\xaf\xe6\xfa\xfa\xa2"
+"\x60\x48\xf1\xd7\x03\x03\x1e\xa0\xd2\x2f\x78\xd7\xe3\xc2\x42\x4b"
+"\xf3\x12\xf8\xbb\x75\xa7\x20\x7a\x58\x7e\x53\xf4\xc6\xbe\x98\x66"
+"\x80\x9e\xd9\x69\x4a\x1f\x76\x65\x80\xb0\x4a\x3e\x5e\xe9\x6a\xdc"
+"\x5f\x58\x9a\x56\x34\x93\x72\x8e\x2a\xdc\xe4\x23\x11\xae\x59\xa5"
+"\x88\x71\x83\x61\x49\x82\xb1\xac\x9b\xd9\x93\xc3\xc6\xaa\x38\xb4"
+"\xba\x9e\x64\x9e\x23\xd3\x58\xb8\x44\xc5\x7a\x3d\xec\x20\x78\x75"
+"\xc6\x24\x3f\x6e\x0b\x50\x46\x57\x0f\xc3\xad\x58\x25\xb9\x07\xc7"
+"\x7a\x00\xec\xdc\x74\xb6\x90\x19\xfc\x84\x1c\xec\x99\x03\x88\x2f"
+"\x5c\xa4\x2b\x00\xef\x40\xac\x25\x88\x7e\x86\x18\x87\xfa\xd0\xfa"
+"\xe7\xcf\xf5\x73\x19\xa8\x1e\x58\x19\xe0\x97\xf2\xdb\xe7\x51\x44"
+"\x66\x1e\x65\xf2\x15\xdd\xb1\x78\x7e\xdd\x13\x72\xf6\x20\xe3\xf3"
+"\xc2\xf4\x12\xb2\x3d\x34\x8d\x0c\xd1\x5b\x83\x5f\x76\x0b\x9d\x59"
+"\x91\x3d\x71\xad\xef\x96\x48\xa8\x50\xa4\x38\x8c\xe7\xab\x06\x95"
+"\x71\xf0\x74\xf7\xac\x0d\xc7\x98\x81\xea\x1e\xc1\x0c\x56\x64\xef"
+"\xeb\x5a\x52\xe2\xfb\x92\x6f\xcd\xc9\x94\x78\xb2\x88\x9d\x47\xef"
+"\xe9\xcb\xe8\xbd\x36\xe8\x4e\x23\xe4\xfc\x1f\xdb\xa8\x44\x6c\x5c"
+"\xfd\x62\x42\xc0\xe7\xb6\x9e\x87\xb9\x67\xe2\x62\x28\x34\x30\xc9"
+"\x7f\x4f\x08\xe7\x1a\x4f\x44\xd8\x79\x0c\xd3\x0b\xb5\x8c\xed\xb4"
+"\x28\x8f\x42\x20\xbc\x82\x13\xba\x56\xab\x56\x91\xcb\xd7\xe3\xf2"
+"\xf8\x3d\xfc\x93\x8f\x5f\xa7\xb7\xec\x7a\x7f\xcf\x92\xcb\x07\x8f"
+"\x30\xd7\xf7\x7e\x5d\xb9\x65\x4f\x14\xf7\xb2\xe1\xe4\x91\xb9\x31"
+"\xb6\x35\x8e\x03\xce\x58\x35\xe9\x0a\xa1\x47\xb9\x81\x7c\x89\x02"
+"\x18\x84\x90\x48\x2c\x58\x2e\x63\xbf\xaf\xe1\xfc\x34\x4f\x14\x9c"
+"\x21\xc3\x2b\x05\x51\x44\x11\x54\x9c\x98\x63\x0c\x5c\xa5\x18\x57"
+"\x13\x19\x59\x58\x22\x0f\x34\x0a\x49\x82\x59\xf5\x3c\x76\xab\xa8"
+"\x6c\x65\xc7\xd5\xf5\x0b\xa9\x0c\x60\xee\x8d\xaa\xcd\x83\x64\x8c"
+"\xcb\x79\xdf\xf8\x74\xf9\x71\xa2\x70\xca\x37\xa7\xda\x5c\xe6\x80"
+"\x6e\x26\x21\x50\x68\x70\xe7\x4a\x59\xa4\x9d\xda\xd3\x81\x35\x94"
+"\x61\x6d\x3c\xfb\xdc\xde\xac\x11\x84\x77\x41\x46\x50\xce\x7a\x39"
+"\x30\xed\xd2\xc2\x1c\x7f\xa6\x95\x88\x88\x73\xbd\x02\xef\xef\xea"
+"\xcd\x01\x3f\x25\x0b\x50\x06\x31\xf2\xa8\xb7\x0e\xb3\x48\x96\x20"
+"\xa1\x69\x5e\xcc\xa8\x03\x90\x54\x1b\x0f\x06\x4a\x9b\xfc\x77\x0e"
+"\xdb\xdf\x0c\x02\xbc\xcb\x54\xdf\x57\x04\x72\x4d\x34\x1a\x9f\x9d"
+"\x98\x6e\xa0\x2b\x5a\xa6\x71\x44\x86\x12\xe1\x26\x62\x42\x3c\x47"
+"\xc1\xfc\x78\xfb\xdd\xbd\xf9\x51\x2c\x9a\xce\xbd\x57\x4d\x46\xfc"
+"\x1c\x58\x49\xf0\x36\xa1\xec\xf9\x22\xc1\xc7\xbf\x39\xbb\xcf\x69"
+"\x5f\x3e\xd6\xcb\x3b\xcc\xf3\xe5\x21\xe6\xf7\xb1\x36\x5c\x49\x20"
+"\xff\x19\xfb\x3f\x5d\x50\x1b\x43\xb9\xc6\x79\xa0\x0c\x83\x7f\x64"
+"\x79\x9f\x52\x93\x0c\xbe\x38\xba\xc7\xbf\x85\x60\x30\x0b\x35\x87"
+"\x01\xa0\x61\x37\x00\x34\x9f\x9d\x8f\xea\x68\xfc\x79\xd0\x00\x40"
+"\xd5\xa8\x50\x82\x8e\xc6\xde\x64\x81\x2d\xd3\x24\xb3\xcc\x0c\x9d"
+"\x9a\x47\x9c\x2b\x08\x4f\x6f\x37\xac\x8d\x57\x3a\x40\x62\xfd\x77"
+"\xa7\xfa\xa0\x44\xfc\xbe\x62\xcc\x17\x93\x29\xf2\x42\xa3\xd2\x1f"
+"\xe3\x00\xd5\x3b\xe4\x92\x69\x06\x45\x1b\xef\xc6\x15\xe2\x5a\xbb"
+"\x66\x7f\x19\x34\xb7\xe7\x96\xaa\x18\x4a\x77\x42\xb3\xae\x11\xff"
+"\x39\xa9\x5d\x4e\x8c\x34\xbe\xd2\xb0\x75\xef\x66\xa7\x51\xa6\x18"
+"\x63\xe8\xdb\x3b\x67\xd2\x9b\xb5\xc7\x1d\xd1\xde\x92\x0f\xd0\xd2"
+"\x17\xcc\x65\x41\xa0\x8a\x85\xa0\xa3\xf3\xf8\x98\x5c\x36\xf6\xa3"
+"\x5e\x81\x9d\xdf\x3f\xde\x9f\x90\xf5\x51\xd0\x7e\x22\x3a\x2b\x02"
+"\xf0\x70\x6b\x3b\x1e\x75\xac\xd9\x64\x37\xe0\xaa\x79\xe8\x56\xaa"
+"\x7a\xe8\x3d\x7a\xe5\x93\xec\xe1\x8d\x61\x4d\x1b\x82\x77\xc6\x97"
+"\x83\x45\xeb\x5e\xc2\xed\x99\x69\xab\x64\x1a\x20\x88\x80\x0d\x52"
+"\x45\x10\x41\x28\x5a\x4f\x0f\xba\xc1\xb9\x48\x0f\xdf\xea\xbc\x5b"
+"\xb0\x80\x08\xfa\xbf\xab\xf3\x29\xfd\x03\x2b\xc5\x97\x44\x71\x8d"
+"\xf7\xfe\xd5\xf9\x0d\xa2\x20\xb8\x2a\xfe\xbe\x87\x54\x95\x67\xec"
+"\xc2\x07\xfb\x08\xe8\xfb\x31\x49\x7b\x37\x47\xf7\x7c\x5c\x0f\xc0"
+"\xaf\x20\x91\xb4\xc1\x89\xf4\x4a\xa2\xae\x1e\x0b\x3e\xff\x8f\xf4"
+"\xbd\xe6\xdd\xe3\xec\x92\xfb\xce\xb2\x7a\x27\xa3\x82\x7f\x5b\x14"
+"\x9c\x47\xe9\xfe\x52\x7f\x9f\x89\xdb\xb3\xe2\x13\x6c\x3c\x84\x11"
+"\x88\x82\x28\x92\x1a\xf0\x64\x54\xd7\xf8\xf9\xd3\x71\x6e\x43\x24"
+"\x21\xce\x7d\xf4\x0c\xaa\x8b\xbc\x20\x25\xdc\xea\x30\x63\x48\x6c"
+"\x3c\x6e\x3c\xfb\x41\xfc\x74\x78\x88\xab\x0f\x23\xd5\x1b\xa3\xf8"
+"\x51\xe4\x2d\x0e\x0f\xad\xdf\x9a\xbd\x09\xde\xe8\x51\x20\xde\x70"
+"\x66\x05\x4e\xd1\x92\x49\xbe\x05\x40\x85\xda\x9a\xea\x1f\xd9\xa5"
+"\xae\xe7\xd4\xf4\xf7\xc5\x10\xab\x81\xd6\x36\x48\xd4\x38\xb1\xc8"
+"\x50\xf7\x99\xbc\x3b\x09\x3d\x43\x42\x5a\x0d\x6e\x70\xc9\x20\x44"
+"\x31\x92\xd7\xb7\xb7\xb8\x9c\x74\x21\xe2\xc0\xd4\xb2\x0a\x7d\x90"
+"\x68\xc2\x06\x54\x42\x2c\x80\xa3\x94\xfc\x81\x7c\x0f\x8d\xd1\xb8"
+"\x88\xf3\x13\xaf\xc5\x11\x54\x9f\x20\xe5\xfb\xad\x7a\xe2\xce\x36"
+"\x8d\xca\xb8\x33\xf2\x80\xd3\xbc\x56\xcf\xc7\xbd\x93\x8f\x87\x85"
+"\x3b\x6d\x5e\xb1\x09\xb1\xa8\xb3\x48\x52\x45\x64\xb2\x53\x96\x5a"
+"\xc5\xa8\xd6\xb1\x08\x96\x53\xa2\xa4\xe0\x43\x9e\x1d\x30\x4f\x30"
+"\xbb\x00\xe3\x4e\x6d\xde\x81\xb4\x1e\xc2\xf5\x5f\x7a\xed\x3b\x4b"
+"\x5d\xe7\xb2\x5d\xec\xea\xed\x11\xd8\x24\x93\xbe\x22\x30\x95\x97"
+"\x10\x3f\x77\xdf\x9c\xba\xfe\x29\x3b\x30\x11\x17\xf5\xdb\x09\x68"
+"\x5d\x6f\x71\x92\xe6\x27\x33\x07\x0d\x66\xb2\x6c\xb8\x9e\x10\xb0"
+"\xaf\x13\x26\xb3\x2a\xeb\xd3\x23\x7e\x34\x52\x31\xc0\xdc\x19\xb5"
+"\xfb\x1c\x33\x0c\x4f\x08\x68\xbd\xa7\xbb\x57\x0f\x7c\x25\x05\xb4"
+"\x6a\x4b\xa9\x24\x64\x0c\x4c\xa5\x28\xf0\x85\xc7\x5f\x37\xff\xb5"
+"\xbc\x79\xc9\xef\xe7\x84\x86\xa2\x1c\xb0\x29\x7e\x2c\x3c\xcd\xe9"
+"\x44\xfa\xf8\x90\xea\xe3\x39\xf8\x73\x0f\xeb\xfd\xb7\x5a\x8d\xab"
+"\xec\xa0\x1d\x4f\x52\x6a\x42\x66\xb6\x33\x07\x1a\x45\xb5\x0d\x06"
+"\xc1\x8c\xca\xb6\xa3\x10\x8b\x7d\x36\xde\xa3\x65\x39\xd5\xea\x48"
+"\xc0\x43\x35\x5e\x20\x6a\x96\x38\x71\xa5\x45\x90\xd8\x90\x0c\x46"
+"\xff\xf5\xce\x21\x91\x19\x4e\x8e\x82\xec\x55\x71\xbe\xd1\x21\xd2"
+"\x0d\x34\x62\xc4\x7a\x8c\xdc\xd4\xb5\xf7\xd7\xb6\x5b\x3f\x86\x82"
+"\x97\xdc\x49\x1f\x77\x82\xf7\x75\xf5\x6e\xd0\x64\x8c\x45\x14\x62"
+"\x0a\x22\x22\x03\x93\x6e\x53\x40\x37\xd2\x8c\x3b\xad\xe8\x9a\xd6"
+"\xbc\xa2\x8a\x7c\x92\xd2\xf1\x19\x05\xdb\xf8\x89\x62\x8c\x4a\xe0"
+"\x09\x1a\x89\x15\xc2\xa3\x49\x92\xd2\xa0\x89\x17\xa6\xf8\x45\x6b"
+"\x02\x31\x83\x3d\x64\xf1\x62\xc5\x8a\x0a\x28\xb1\x87\x6b\xf4\x61"
+"\x48\x6b\xc3\xdd\x4a\xfa\xba\x9a\x4b\xdb\x49\xce\x3c\x63\xf2\xdb"
+"\x3d\x03\x92\xeb\x78\x90\x76\xf2\x62\x55\x0e\x2d\x2e\x26\x0d\x20"
+"\xbc\xfd\xd5\x37\x33\x54\x56\x7f\x61\x4e\x40\x7d\xbe\xcb\x21\xdd"
+"\xae\x8f\x4e\x67\x6f\x3f\x4f\x27\x06\x27\x59\xed\x62\x31\x51\x84"
+"\x3b\x0c\x0a\x92\xa7\xef\x66\x65\xac\x8e\xbd\xbc\x52\xfb\x69\xf0"
+"\xed\x74\x87\x82\x2a\xf8\x75\xa0\x43\x44\xb5\x35\xa8\x10\xec\x0d"
+"\x09\x0f\x6c\x89\x0c\x14\x78\x20\x1b\xa5\x83\xbe\xbc\xe4\xcc\x12"
+"\xbc\xc2\xc6\x62\x3a\x5b\x52\xc2\x45\xd6\xb5\xd9\x20\xd0\xf3\x4f"
+"\x4b\xe0\xae\x31\x8b\x28\x46\x1a\x09\xb4\xde\xd1\x01\x49\x83\xee"
+"\x6b\x7f\x01\xf7\xfc\x98\xfe\xfc\x68\xaa\x91\xcc\x67\x62\x54\x0f"
+"\xa9\x73\x52\x9e\x54\x7a\x31\xb6\xc6\xc1\x7f\x7e\x9c\xc6\x61\xec"
+"\xba\x8b\x56\x2b\x82\xfb\xbb\x65\x29\x2c\x9c\x04\x73\xac\x79\x4d"
+"\xc2\x07\xfd\x95\xc0\x47\x33\xf7\x79\xf0\xc8\xb7\x67\x68\x51\x7f"
+"\x3b\x33\xbf\x5f\x42\xa2\x80\x88\x43\x6b\x3e\xb9\x30\x0a\x30\x11"
+"\x10\x60\x91\x8a\x88\x32\x22\x2e\x65\x0c\x64\x51\xfd\xdd\xa1\x87"
+"\xf8\x7a\x73\xed\xe9\xb9\x3a\x21\x0e\x8c\x56\x02\xc1\x48\x2a\x75"
+"\x4e\xe4\xac\x5f\xcb\x6f\xf1\x60\x6c\x71\xbe\xe2\xae\x27\xf6\x5a"
+"\x30\x43\xb0\xc0\x8c\x2c\xad\x36\x2b\x18\x80\x81\x21\xac\xb3\xaf"
+"\xe9\x53\x2b\xee\xaa\x27\x68\xd5\x0e\xd2\x3e\xfc\xd5\xdb\x9b\xa6"
+"\xe5\xf7\xd7\xdd\x29\xb4\x53\x7b\x3c\x92\xaf\xd6\x4b\xe4\x64\x13"
+"\xde\x50\xb1\xe4\xa1\x1a\x05\x96\xe7\x56\xdd\x07\xdc\xe1\x31\x1e"
+"\xd3\x1e\x9e\xc8\x7f\x24\x92\x45\x5e\x4a\x23\x7f\x7f\xfd\x6e\x0b"
+"\x3b\xcd\xd7\xb4\x3e\x38\xfd\x45\xdc\x6c\xae\x61\x8f\x9e\x89\xfc"
+"\x32\x7a\x64\xb9\x99\x71\xb0\x76\x57\x83\x1f\x2c\x9f\x73\x26\xf6"
+"\xde\x3b\x66\xf3\xf5\x5e\x77\xd1\xdc\x97\xb1\xcd\x65\xb8\x9d\x8d"
+"\xd0\xd6\x92\xe3\xa2\x35\xfc\x31\xcd\x46\xcc\xf2\x57\x3a\x61\x22"
+"\xbf\xa4\xd2\xad\x3d\xec\x96\x77\xf8\x7a\xb7\xf5\x9f\x29\x1e\x0b"
+"\x57\x94\xf5\xee\xcc\x22\x99\xc8\x9b\xf9\x62\x1a\x0e\x8c\xab\x2a"
+"\xdd\xb2\xef\x2c\xe1\xf8\x5a\xc4\x9a\xd1\xa5\x11\x01\x26\x92\x42"
+"\x5a\xbf\x3f\x13\x3e\x22\xaf\x6f\xa1\x3d\xe2\x61\x68\x04\x78\xe2"
+"\x12\xdb\x1e\xc7\xe8\xa7\xc5\x5a\x0d\x82\x28\xc1\x0c\x62\x29\xbd"
+"\xa3\xed\xaa\x0f\x36\x17\x4b\xac\x4f\x32\xb9\x52\x5d\x02\xd4\xa5"
+"\x3c\xf3\x0e\x71\x95\xd0\xf9\x7e\x4a\x0b\x77\xa8\xde\xa0\x88\x4d"
+"\x91\x1b\x25\xe4\xd2\xc2\x07\x3c\x1c\x8a\x5d\xa3\x7a\xaa\x03\x8a"
+"\x2d\xdc\xab\x03\x6a\x04\x75\x48\x16\x09\x95\xf8\x8d\x69\x09\xea"
+"\x3b\xde\x17\x5e\x85\xb7\x7f\xf2\xde\x83\xdc\xf6\xec\x35\xb5\x25"
+"\x5c\x1b\xd7\x51\x1d\x77\x1c\xda\x8f\xb0\xe0\xdf\xc9\xdc\xc9\x32"
+"\xbf\x62\xfa\xd3\x4f\x6c\x39\x24\xc0\x1e\xa9\x65\x0a\x61\x46\xd1"
+"\x12\x24\x42\x75\xfa\xd9\x87\x77\x31\x63\xe8\x54\x29\x62\x76\x1c"
+"\x7b\xda\x6c\x9d\x05\x41\x28\xaf\xc6\x69\xd0\x5a\xef\xc2\xeb\xe4"
+"\x4b\x00\x36\x48\x5d\x0c\x04\x76\x9e\x58\xe7\x72\x7c\x75\xd2\x61"
+"\xa6\x34\x9c\x28\xdc\xa6\x5d\x27\x95\x41\x7e\x0f\x95\x20\x6d\x23"
+"\x14\xc7\xf8\x74\xa5\x43\x5c\x48\x1e\x94\xf5\xf6\x27\xbf\x3e\x53"
+"\xf5\xde\xa7\x4f\x89\xca\x9a\x15\xdc\x15\xf4\x97\x9b\xce\xb2\xf1"
+"\x2f\x32\x92\xd7\x7b\x92\x2a\xc0\x66\xe7\xe5\x90\xda\x43\x20\x2f"
+"\x44\xec\xbc\xa0\x46\x41\x48\xd7\x43\xc7\xa5\x34\xc4\xf5\xe5\x83"
+"\x47\x71\x64\x55\x9a\x0f\xb1\xae\x4d\x2e\x26\x28\xa7\xb1\x3c\x0f"
+"\x10\x4d\xf7\x07\x19\x36\x95\x31\xbf\x43\xbe\x01\x9d\x8a\x95\xe4"
+"\x85\x73\xd7\x10\xf7\x22\xaf\x7b\x03\xd3\x5c\xb9\xf8\xd6\xe1\x8f"
+"\xb7\x0b\x1c\xbb\xc3\x33\xed\xef\xb3\x85\x2b\x52\x5d\x5c\xf0\x0c"
+"\x0d\xf0\x91\xdd\xbc\xbb\xdd\x58\xaf\x40\xc1\xae\xee\x62\x01\x4b"
+"\x20\xea\x4d\x59\x58\xe8\x74\x81\x0b\xea\x29\x43\x7a\x59\xa0\xd8"
+"\xa3\x73\x04\xc4\xb4\x20\x12\x08\x4d\xd8\xd3\x60\x67\xd9\xdc\x2f"
+"\x83\xf6\x9a\x10\xa4\x07\xa7\xd9\x59\x2a\x03\xff\xc9\x24\x4b\xa0"
+"\xd2\x33\x05\x7c\x13\xf9\x91\xeb\x67\x6f\x9e\x0b\x2b\x30\x14\x25"
+"\xf6\x1d\x30\x53\xe4\xba\x8b\x77\x14\x3c\x32\x8a\x2c\x73\xf9\x8f"
+"\x74\xef\xa8\xcd\x46\x71\x39\xf6\xa7\x0c\x90\xf5\x22\x1c\xa9\x0f"
+"\x27\x9b\xa3\x97\x2b\x2a\x28\x63\x88\xbc\x91\xdd\x23\x65\x13\x1d"
+"\xcc\xf5\xfc\xfe\x30\xeb\xf3\xe5\xcb\x91\xf8\x76\xd7\x65\x12\xcb"
+"\x4b\xf3\x46\x6a\x16\x67\xd8\xae\xd3\x93\x04\xb4\x3a\x1e\x28\x67"
+"\x4e\x7b\x38\xdf\xa2\x18\x5b\x89\x71\x4a\x59\x81\x4a\xe0\xcf\x10"
+"\xcd\x68\x75\x79\x13\xec\x10\x05\xf0\x9a\x01\x35\x62\xc3\x81\x99"
+"\xc2\x14\x5f\xc4\xef\x80\x66\x54\xa7\x51\x95\x0c\xf5\x71\x39\x76"
+"\xc1\xa0\x57\xb8\x61\x8e\x0c\x4d\x0d\x03\x45\xf6\x92\x33\x1e\xad"
+"\x16\x2e\xad\x68\x96\x0d\x07\x17\xc9\xa5\x70\x8f\xb6\x92\x91\xdc"
+"\xc1\x5c\xd5\x8a\x38\x5b\x03\x89\x85\x7b\x0e\xbf\x89\x93\x3b\xc4"
+"\x98\xb4\x3d\xba\x20\xd4\x61\xb2\x15\x61\x56\xe8\x28\x98\x91\x53"
+"\x3b\x20\x94\x96\x96\xab\x06\x9c\xae\x60\x14\xf3\xd7\x3d\xe9\xfb"
+"\x69\x62\xa8\xa0\xbd\x2d\x1d\x34\xe4\xd1\xb9\x99\x8c\x78\x70\x98"
+"\x72\xbb\x4c\xa9\x0a\x8c\xcb\xa9\xcb\x46\x1b\x19\x46\x2e\xd5\xae"
+"\x5d\xe1\x7e\xf7\x9e\x14\xe2\x43\x8c\x99\x8c\x32\xe1\x87\x09\xa8"
+"\xb2\x73\x61\x56\x68\xd8\x19\x4c\x12\xbe\xe1\x9e\xbe\x5d\x78\x38"
+"\x9b\xf6\xa6\x71\xa9\x70\x44\x42\x92\xa1\x4d\xd1\x43\x90\x31\xd9"
+"\x63\x2a\xa5\x2b\xce\xd6\x00\x90\xe2\x55\x5a\x53\xd6\xb4\xc3\x53"
+"\x28\x32\x07\x8c\x9b\x67\xd3\x3f\xaa\xd3\x67\xe4\xfe\x72\x92\x29"
+"\x3c\x79\x20\xbd\xc5\xb1\xa5\x9f\x9f\x5c\xcd\x6b\x3a\x9e\x50\x36"
+"\x22\xc1\x11\x49\xf4\xb0\xe5\x81\xfc\x51\xe5\xd0\x33\x97\x99\xd1"
+"\xb0\x52\x22\x22\x9c\x8a\x05\xa5\x73\x6b\x17\x2d\xf9\x1e\x89\xd1"
+"\x31\x18\x18\xaf\x44\x9c\xb7\x98\x59\x14\x84\x68\xb5\xa1\xa9\x15"
+"\x09\x79\x5d\x06\x0c\x4d\xa5\xcd\xad\x58\x75\x31\x1f\x48\x76\x1c"
+"\xd6\x39\x55\x2b\xde\xff\x1c\x54\xbb\x1b\x83\x9f\xec\xbf\x21\x05"
+"\x57\x50\xd3\x67\x07\x0d\x78\x79\xdf\x31\x72\x34\x37\xab\xcb\xf1"
+"\x8c\x2e\xdf\x9a\xc7\x0d\x1a\x5f\xcc\xd2\x88\xe5\x45\x04\x5e\x02"
+"\x40\x42\x07\x9b\xd8\x18\x8f\x33\x22\x07\x65\x44\xc6\xac\x26\x6c"
+"\x18\x2f\x15\x41\xd2\xc1\xa9\xb3\x66\x16\x2f\xb4\xb8\x95\x55\xda"
+"\xb2\x79\xa5\xa5\x1b\x3a\xb8\xcb\x3f\x9d\x84\x8c\x90\x53\xe0\x4d"
+"\xf7\xc4\xc0\x57\x29\x8b\x96\xdd\xf3\xc8\xbb\x58\xda\x0a\x8c\x28"
+"\x12\x39\x5f\x41\xa0\xd2\x19\x44\x3b\x09\x99\x16\x78\xc8\x66\xa6"
+"\x6c\x4b\x40\xe1\x6d\x2a\x31\x6c\x66\xeb\x95\xe3\x50\xd5\xb4\x71"
+"\xa6\xfb\xba\x90\xf4\xa4\x54\x2e\x35\x1b\x31\x00\xe3\x89\x61\x56"
+"\x92\x59\xc5\x8e\xcb\x2d\x0b\x29\xa0\x70\x8a\x53\x02\x44\x72\x5b"
+"\xec\x24\x1d\x96\xb1\xa2\x4a\xc0\xa9\x24\x16\x66\x4c\x86\x67\x74"
+"\x04\x0b\x71\x00\x68\x0c\x20\x34\x4b\x23\x60\x1b\x69\x87\x15\x0c"
+"\x0c\xe1\xc5\x95\x60\xf2\x60\xed\x42\x80\x79\x54\x04\x81\xbd\x82"
+"\xb6\x14\x0a\xdd\x78\x3b\xac\xb4\x3c\xcd\x16\xe2\x12\x4a\x48\x24"
+"\x8a\x64\x22\x4a\x8d\x91\x6c\x14\x60\x0e\x35\x38\xd4\x34\x03\x40"
+"\xbb\x55\x83\x86\x61\x8e\x37\x57\x17\xc5\x9c\xd2\xe0\x51\xd2\x11"
+"\x20\x17\x3c\xad\xb3\xee\x20\x58\x6b\xba\xb0\x1b\x10\xb6\x8d\x1c"
+"\x31\x2e\xa8\x4d\x98\xb2\xb9\x45\xb4\x2e\xce\xb1\x91\x99\xa5\xe1"
+"\x78\xec\xf2\x50\x3d\x60\xc0\xb8\x80\xdc\xf3\xe3\x6b\xbf\x2e\x5a"
+"\x63\x26\x2f\x90\x54\xda\x51\xf7\x7d\x4b\xbe\xf2\x14\xa5\xa2\xe1"
+"\xe6\x05\xd0\x62\x76\x30\x71\x65\x7e\x22\x8e\x99\xa7\xa9\x0c\xc4"
+"\x58\x17\xa2\x3e\x70\xab\x83\xe4\x06\xb6\xb6\xd0\xf4\xa2\xfd\xf9"
+"\x77\xe1\x42\x9d\xb3\x8a\x4f\x74\x81\xd4\x3f\x44\x45\x3b\x80\x29"
+"\x62\xa8\xaa\x4f\x50\x17\x90\x0c\x3e\x21\xa2\x1a\x69\x51\xfe\x3f"
+"\x50\x40\x66\x92\x34\x51\x78\x33\x92\x5f\x33\x35\x5a\x64\x43\x05"
+"\x05\x89\x04\x32\x04\x07\x28\xa1\x30\x12\xd2\x6e\xf4\x5a\x99\x88"
+"\xec\x4b\x78\xb6\x23\x38\x47\x50\xde\x53\x37\xe5\x1a\x41\x0c\xb7"
+"\xe2\x1a\x62\xfa\x4c\x44\x5f\x30\x54\x04\x46\x08\x27\x85\x55\x65"
+"\x58\x71\x36\xed\x92\x81\xf5\x52\xb4\xd1\x95\xee\x65\x49\x8c\xc2"
+"\xfb\x1c\x33\x30\x17\x3c\x35\x19\x2b\xe7\x36\x8f\xbb\xb0\xd8\x10"
+"\x4a\xeb\xf1\x84\x4d\x90\x69\xf4\x53\xec\xa4\x08\xcc\x37\x8f\xcc"
+"\x9b\x60\xd9\x88\x60\xb8\xa5\x63\x86\xc6\xc6\xeb\xae\x69\xcb\x2f"
+"\xe0\x1c\x95\xfe\x0b\x32\x46\x16\xaa\x91\x6c\xd2\x86\x4b\x59\xf7"
+"\xd4\x84\x5e\xd8\x0e\x8a\xf4\xc5\xb8\x2f\x30\x0b\xfb\x0e\xe9\x22"
+"\xd1\x58\x88\x51\x12\xb2\xea\xae\x09\x79\xa1\xdc\xb8\x28\x28\x60"
+"\x08\xe4\x06\xf6\x0c\x19\x4f\xd9\x22\x18\xa7\xdf\x9f\xc7\x1f\x12"
+"\x97\x16\xd9\x36\xbc\x34\x50\xfa\x28\x20\x6d\xba\xb0\xa1\xe1\x4e"
+"\x7c\x8b\x88\x59\xed\x7b\x41\x81\x37\x25\x07\xe7\x74\x0a\x89\x91"
+"\xdc\x53\xa8\xb0\x04\x11\x79\x56\x21\x2d\xe5\x8a\xac\x96\x64\x87"
+"\x53\xfb\x0d\x10\xdb\xfb\x6d\x01\xf7\x5b\xa3\x1b\x39\xb9\x1d\xef"
+"\x8a\x13\xce\x0b\xbe\x26\xa8\x8c\x3c\x88\xe2\x18\xa6\x55\xe9\xee"
+"\xbd\xd6\x59\x50\xa9\x58\x06\x53\xb7\x3c\xd7\x50\xee\x46\x6e\xd9"
+"\x1d\xc6\x10\x12\x96\x8a\xe3\xe9\x93\xf9\x99\x8c\x0e\xf1\xf9\x1f"
+"\x63\x0f\xcb\x90\xea\x7d\xfe\xf8\x38\x7a\xc5\x12\x68\x1a\x8a\xfb"
+"\x3d\x89\x64\xc5\x40\xc9\x23\x60\x90\x3c\xfc\xee\xc2\xd7\xed\x45"
+"\x53\xa7\x7d\x3a\xe8\x46\x71\x36\xa5\x26\x22\x08\x56\xdb\xaa\x6a"
+"\xf3\xa5\x67\xc0\xef\x33\xa9\xc1\xcf\xa7\x2d\xdc\x94\xe9\xa1\xe8"
+"\xeb\x38\xb6\x79\x82\xab\xc9\x0a\xee\xc1\x60\x31\x60\x2a\x59\xc9"
+"\x54\xbe\xa2\x5a\xc2\x74\xa0\x74\x0f\x90\x69\x60\x47\xb4\xbe\xb1"
+"\x62\xba\xe7\x13\x8b\x97\x77\xa0\xe2\x5c\x6b\xa2\xbf\xbc\x86\xc3"
+"\x16\xb0\xc6\x12\x63\x1a\x88\xa2\x0b\x18\x0e\xc2\x92\xf8\x34\xdf"
+"\x89\xee\xf2\xde\x7d\x1d\xd4\xd5\x94\xea\x43\xc7\x5e\x76\x5a\x9c"
+"\x9f\xb2\xfd\x9a\xc3\xe0\xf8\x6d\xba\x68\x97\x91\x9a\xb8\xe4\xeb"
+"\xaf\xd7\x0d\xf5\x86\x88\xfa\x07\xa7\x0e\xcb\x2d\x49\xc0\xe5\x96"
+"\xa0\x3d\x54\x64\x49\x42\xa8\x7c\xf1\x31\x47\xad\x9c\x0d\xc2\xd8"
+"\xc5\x1b\xce\x37\x17\x19\x65\x55\x7a\x0a\x5e\x3f\x5b\x44\x9b\x70"
+"\xb3\xf7\xee\x90\xd1\xa4\xba\x21\xae\x05\x86\x7a\x4e\x38\x9c\x0f"
+"\x76\x00\x79\xda\xfd\x9f\x51\x70\xa4\xac\x28\xa0\xd4\x8a\x2c\x14"
+"\x22\x5a\x4a\xcb\x29\xfc\xb2\x51\x55\x1a\x25\x07\x54\xd3\x24\xd2"
+"\x06\x95\x4a\x65\xba\x85\x58\xe8\xa5\xc2\x2b\x11\xc0\x4d\xd9\x19"
+"\x02\x0f\x87\x4b\x85\x29\xe0\x19\x03\x77\xc4\x21\xa8\x52\xd2\x45"
+"\xc9\x35\x8c\x2d\x3f\xa7\xed\x26\x18\x1c\x98\xb9\x7d\x70\xb7\xb2"
+"\xc3\x5f\x48\x80\x7e\xde\x57\xa5\xb0\xc4\x20\xb0\x3f\xbb\x9e\x58"
+"\xa4\x3c\x0a\x28\x8d\x36\x74\xb9\xfa\x33\x08\x43\x20\x35\x24\xf0"
+"\x04\x2a\x04\x78\x97\x64\x19\xe3\xad\xbe\x4d\x24\xac\x03\xd6\xc9"
+"\x52\x45\x8f\xaa\xd1\x8a\xa1\x05\x45\x44\x56\x69\x17\xc0\x24\xa7"
+"\xd1\x96\x23\xa4\x16\x18\xdf\xd2\xf9\x39\x63\x31\x0c\xd5\xd7\x23"
+"\x00\xcc\x80\x96\x82\xd7\xa9\xb2\x02\x55\x50\x55\x75\x81\x05\x02"
+"\xea\x9d\x96\x4a\x8c\xbb\xb5\xa4\xc9\x2b\x8b\xda\xd2\xa2\x30\xd9"
+"\x80\x5e\x9e\x24\xfc\xd3\xd9\x20\xac\x8a\x88\x88\x88\xb1\x10\x7c"
+"\x25\xa8\x80\xb0\x55\x2d\x85\x7f\x0d\x7d\x06\x83\xf3\xef\x3b\xa6"
+"\xa1\xf2\x35\x33\x74\x92\xce\x5c\x06\x19\xc1\x0f\x8d\xe8\x7c\x26"
+"\xf7\x14\x84\xfc\x50\x90\x55\x82\x90\x51\x48\x43\xb7\x07\xf7\x10"
+"\xdf\x74\x7a\xb0\x43\x80\xfb\x81\x52\x0c\xe6\x94\x28\x9c\x58\x83"
+"\xe7\xd6\x85\x0a\x54\x6d\x38\xc2\x02\x9f\x8c\x1f\x4e\x7e\xab\xcb"
+"\x0f\xdf\x6f\x4e\x29\xb4\x17\x7a\x20\x32\xae\xeb\x98\xd3\xa7\xdf"
+"\x81\x50\x95\x4b\xa0\xff\x27\x5f\x97\x14\x91\x3d\x07\xf0\x9c\x1f"
+"\x8f\xc0\x3c\x15\xc7\xb9\x3c\x83\xb8\xad\xbe\x8d\xdd\x1d\x09\xf8"
+"\x6f\xf2\x33\xf7\xe1\x9c\x8c\x86\x04\xad\x05\x19\x44\x8e\xf5\x1e"
+"\xfb\x16\xbf\xb3\x2c\x7b\xfd\x5e\x1c\x9f\x52\xac\x8e\xfd\x34\xcf"
+"\xf1\xb8\x2f\x15\xb4\x12\x4d\x0d\x6d\x66\x94\xbc\x1a\x0e\xb7\x98"
+"\x0c\xfa\x72\xc5\x2a\xb1\xb0\x5c\xf9\xc2\x5c\xfa\x31\x83\x68\x18"
+"\xd2\xc5\x3f\x59\xd6\x1e\x03\x58\x5d\xbf\x72\xbf\x5e\xa2\x80\x83"
+"\xf5\xb0\x4d\x88\x3d\xad\x24\x40\xc0\x83\xe1\x6e\x87\x85\xd7\x45"
+"\x89\x57\x6e\x5e\xab\xd0\x0d\xa1\x8d\x36\xb7\x1f\x5e\x86\xa1\xe5"
+"\xed\xe4\xc6\x39\x43\x69\x3e\xd8\x48\xd1\xa9\x1a\x3e\x26\x10\x3e"
+"\x05\x24\x37\x1e\x34\x8b\xde\x8a\xee\xa6\x45\x7f\x4b\x5d\xb9\x54"
+"\x35\x16\x8c\x17\x16\x2d\x4c\x88\x49\x15\x03\xa1\xe2\xd6\x68\xbd"
+"\x91\xa9\xae\xc5\x1f\x59\xd2\xb6\x10\x83\x0c\xb2\x44\x0f\x55\xc8"
+"\x1e\xe5\x7f\xbc\xc1\xed\x46\x02\xe9\x98\xca\xac\xb0\x80\xc3\x7c"
+"\x86\xd1\xe9\x9a\xdf\x04\xe1\x10\xf1\x95\x35\x74\x67\xe3\xb0\x70"
+"\xe0\x8d\x50\x0d\x07\x16\x0a\x72\x8a\xb4\x07\x2e\xdf\x96\xc1\x18"
+"\x40\xac\xb8\x1e\xf6\x4c\x06\x65\x3b\x4f\x3f\xea\xde\xa7\x8e\xc5"
+"\x15\x51\x80\xa8\xa9\x00\x94\x3d\x27\x7b\x50\xf2\xd1\xf2\xcd\x01"
+"\xe9\x3d\x24\xda\x48\x7a\x79\xa3\x8a\x0c\xc1\x1b\x30\x18\xc4\x3f"
+"\x58\x58\x37\xc4\x76\x07\x56\x5a\xd2\xaf\x46\x88\x6c\x10\xc6\x5c"
+"\x7d\x61\x88\x76\xf8\x88\xc5\xa7\xca\x12\x82\x5c\xed\x84\xaa\x0c"
+"\x6a\xdb\x14\xeb\x22\x81\x24\x98\xfe\x76\x5b\xae\xe0\xeb\x7d\x2f"
+"\x9b\xee\xad\x56\xe4\x8d\xf4\x56\x27\x87\x04\x7b\x53\x48\x63\x69"
+"\xa5\xeb\x1d\x09\x61\x96\xcd\xe5\x86\x4d\xd7\x7b\x39\xb8\xee\x83"
+"\x89\x7b\x62\xef\x48\xb9\x8a\x78\x93\x10\xd1\xb4\x30\x49\xda\x3c"
+"\xa1\xaa\xf5\x2d\xf3\x8c\xe3\x0b\x4a\x6f\x58\x1e\x27\x1b\x6d\xec"
+"\x3e\x73\xc7\x98\xd9\x0c\xbd\xdc\x96\x02\x18\x35\x7c\x13\x9a\xf5"
+"\x0b\x45\xa5\xea\xf6\x31\x8c\x51\x04\x3a\xa7\x7f\xab\x70\x3a\x26"
+"\x6f\x2e\x92\xf4\xb4\xda\x87\x76\xce\x13\x50\xad\x23\x05\x44\x9b"
+"\xde\x59\x72\x61\x69\x89\x82\x24\xac\xa2\x6a\x95\x53\xa4\x51\xc1"
+"\xf7\xd2\x14\x95\x2d\x2a\x8b\xc4\x23\x80\x47\xa9\x76\x96\x35\x34"
+"\x37\x81\x49\x71\x0a\xc1\x3b\xc1\x92\x31\x06\x76\x41\xe4\x07\x34"
+"\x15\x56\x23\x22\x72\xf6\xe6\x4b\xc6\x4c\x75\x75\x95\xdd\x25\x7d"
+"\x94\xa9\x91\x21\xc5\xb8\x8b\x14\x87\x43\xa9\xfb\x0e\xb8\x88\x21"
+"\xe3\xce\xe7\x04\xfb\xac\xd9\x93\xb9\x9d\x1a\xc1\x41\x42\x8c\xf4"
+"\xdd\x21\xc8\x96\x4f\xb7\x38\x35\xea\xea\x2c\xef\xb7\xb8\xef\x97"
+"\xa4\xe0\x7e\x48\x0a\x06\x25\xcb\x58\x23\x03\x02\x11\x93\xf4\xbe"
+"\xbd\x98\xb7\xc8\x8b\x8c\x34\x0c\x1b\x72\xcf\x99\xa9\x98\x86\x14"
+"\xf8\x42\x31\x83\x9a\xc1\x7c\x8d\x8d\x94\xa6\xf7\xa8\x73\xb3\xdb"
+"\xcb\xbf\xad\x4d\x3e\x84\xd3\xed\x98\x27\xa5\xc2\x50\x34\x2e\xbf"
+"\xab\xae\x4f\x93\x71\xd7\xd7\xb8\xdc\xc4\x6f\x45\x48\x37\x29\xab"
+"\xd9\x09\xb0\x16\x48\xa2\x23\x21\xb2\x79\x88\x7a\xa6\x67\x0f\xab"
+"\xdf\x94\x0e\x9f\x5d\x22\xe0\xc9\x92\xda\xeb\xe4\x6a\x71\xea\xa9"
+"\xd9\x59\xa3\x24\xed\xe4\x95\x86\xb5\xdb\x41\xa0\xb4\xac\x78\x1f"
+"\x99\x8a\x55\x19\xb7\xe1\x12\xef\xc7\xb3\xac\xd4\xd2\xcc\xa9\xa3"
+"\x7d\x7e\x68\xdc\x18\x02\xb2\x1c\x70\x54\x26\xa7\xb9\x9f\x14\x95"
+"\xef\xf3\x9b\x86\x13\x90\x4f\x29\x7c\x8e\xf5\x04\x18\x32\x69\x85"
+"\x8c\x51\x48\x95\x28\xaa\x0b\x21\x7b\x1a\x0f\x19\x82\xcf\x1b\x61"
+"\xc0\x0d\x58\x08\x69\xb0\x6d\x55\x76\xf1\xf3\xfd\xd5\xad\x87\x0b"
+"\x31\x69\xbd\xd2\x7f\x2b\x51\x98\x1b\x92\x72\x0b\x3a\x26\x60\xc2"
+"\x97\xa0\xde\xd0\x68\x33\xce\xcf\x4e\xc9\x41\x71\x1b\x37\x38\x34"
+"\x71\xa4\x30\x39\x3d\x00\xd1\xc0\xc4\xc5\x66\x31\xff\x9d\x8e\x47"
+"\x0e\xe8\x92\xfe\xa8\xbb\x01\x9b\x29\x62\x4d\x9d\x77\xb3\x85\x61"
+"\xbb\xe1\xba\x6a\x3d\x5b\x79\xeb\x98\xef\x09\x98\x85\x4d\x9a\x36"
+"\xf0\xd4\xd5\x08\x82\x13\x13\x24\x4b\x12\x42\x84\x5a\xab\x10\x5c"
+"\xa3\x41\x55\x0e\xb2\xd4\x13\x64\xde\xe8\x69\xd8\x14\xde\x71\x9c"
+"\x18\x68\xca\x59\xc0\x37\x25\xc9\x73\x13\x56\xa2\xb6\xdc\xcc\x95"
+"\xbc\xf5\xbd\xda\x26\xc9\x30\xe0\xd6\x43\x56\xe8\x70\x6b\x5f\xbb"
+"\x7e\xa6\xb1\xb5\x71\x2e\x09\xfc\x99\x1e\xc1\xd6\x06\xc1\xbd\xed"
+"\xdc\xef\xb4\xab\x4c\xb2\x81\xa5\x4a\x4a\xd2\xa4\xd1\x8f\x81\x77"
+"\xa0\xda\x43\xd6\xd7\xdd\xcf\xae\xa9\x38\x7b\xb6\xb0\x76\xec\x2e"
+"\xaf\x8e\xbe\xbe\x0d\xed\x34\x29\xb4\x06\x60\x99\x4b\x16\x63\xe0"
+"\xc2\xb8\x24\xd3\x28\xa9\x2d\xaa\x18\x32\xb8\xc8\x14\x31\xcf\xe9"
+"\x61\x4e\x7b\xa5\x25\x18\x64\x2a\x58\xc5\x91\x82\x8e\xd8\x7c\x47"
+"\xc5\xf7\x10\x43\xbc\x9d\xe0\x79\x75\xd0\x13\xd9\x19\x93\x60\x7b"
+"\xd9\x3b\x4d\x49\x24\x59\x11\x21\x3b\x82\x8d\x94\x49\xca\x13\x39"
+"\xd6\xb8\x0d\x62\x5d\x17\x16\x8d\x18\x43\xfc\x8e\x44\x15\x60\x36"
+"\x36\x8a\x14\x31\x00\xc6\xc0\xdc\x42\x48\x81\x26\x49\x0b\xd2\xac"
+"\x76\xe8\xed\x54\xb3\xba\x83\x08\x90\x67\xd1\x42\x24\x35\x71\x99"
+"\xc6\xff\x34\x61\xad\x74\x12\xd1\xa5\xf3\xfa\xeb\xf3\x52\x3c\xb2"
+"\xbe\x1b\x6d\xf4\x62\x8a\xc2\x12\x07\xaf\xb7\x1b\x43\xd9\xa2\x06"
+"\x6b\x9b\x95\x4a\xb2\xad\x89\x12\xd2\x89\x85\xc3\x16\xda\xa5\xb2"
+"\xda\x58\xaa\x94\xa5\x5a\x6f\x30\x43\x10\x95\x44\x68\x38\x4c\x2d"
+"\x1f\x8e\xa6\x87\x41\xdf\x70\x28\xb1\x93\x22\xec\x0d\x64\xc9\x92"
+"\x83\x25\x04\xc1\x58\x65\xb5\x8c\xf3\x20\x72\x75\x86\xe4\x37\x0b"
+"\xc7\x12\x76\x87\xc8\xe0\x7e\x1f\x6b\x40\x63\x26\x98\x7e\x74\x0f"
+"\xba\x5d\x60\x6f\xf3\x58\x6d\x09\xa6\xd7\xe7\x43\x69\x8c\x72\x5c"
+"\xab\x02\x03\xb9\x5c\xe0\x96\xa9\xe9\x51\xca\x7b\xea\x8b\x76\x74"
+"\xb1\x1e\xcf\x2e\xa5\x34\x2b\x0d\xa9\x94\x91\x9a\x52\x2a\x33\x25"
+"\x53\x43\x91\xd8\x7b\xc6\x68\x41\x09\xb8\xb1\x49\x48\xc2\x85\xc8"
+"\x4b\xd6\xd2\x0b\xd8\x08\xd3\x48\x3c\x79\xc1\xf7\x8f\x52\xe6\x6e"
+"\x6c\x06\x24\x6f\xde\x34\x9c\x7b\xbe\x34\x7b\x8f\xa2\xc5\x9f\xa0"
+"\xc7\x85\xec\x6c\xe9\xf4\x8c\xb8\xb5\xd0\x2a\x84\x22\x1e\xe9\x97"
+"\x9d\x24\xfd\x4c\x32\x4f\x7c\x93\x4f\xcd\xf7\xe4\xab\x22\x2a\x82"
+"\x1e\xcf\x97\xac\x10\x53\x64\xd6\xd9\x3a\x5e\x7d\x08\x6f\x03\xf3"
+"\x0c\x30\xdf\xac\xf6\x38\x9c\x6c\xf9\x09\x04\x49\xce\x1b\x9c\x92"
+"\x53\x7d\x21\xe2\xc0\x21\xa8\x76\xd9\x2c\x0f\xa7\x91\x45\x91\x8b"
+"\x7b\xcb\xb2\x0a\x6c\x5c\xcd\xac\xd3\xcd\x7c\x1c\x03\xd5\x8c\x7e"
+"\x0d\x10\x78\xb1\xf8\x07\xc5\x90\x76\xe7\xca\x08\xcf\x53\xee\x62"
+"\xc1\x91\x3d\xb4\xa9\xf3\x2d\x82\x82\xde\x2f\x0e\xa6\x7b\xa8\x63"
+"\xab\x53\x56\x54\xd1\x6a\x4f\x53\x29\xe1\xea\xf8\x13\xaf\xd7\x26"
+"\xe7\xa7\xb3\x9f\x80\xfb\x4a\x58\x18\x9a\x86\xd7\x73\x90\x1e\xe1"
+"\x19\x72\xec\x59\x25\xf0\x65\xca\xe4\xc3\x56\x2e\xc3\x89\x8f\x0f"
+"\x23\xf6\x2c\x47\xc2\xe3\x81\x7f\x9f\x2b\xc9\x38\xf2\x40\x53\x99"
+"\xa3\xcb\xa3\x9c\x18\x07\xef\x41\x69\xc5\x8d\x80\x36\x0d\x97\x87"
+"\xbb\x10\xf6\x42\xc8\xea\x4a\xd7\x53\x29\x3f\x9d\x40\x8d\x98\x5c"
+"\xd3\xdd\xd5\x56\x7f\x6d\x14\x52\xa7\xca\x85\x15\x86\xff\x41\xe9"
+"\xec\xf3\xfe\x8e\xf3\xe3\xfa\x4f\x94\x76\x9e\x99\x4e\xa6\x22\x7e"
+"\x44\x08\xa1\xde\x41\x86\x5e\x7f\x07\x9d\x55\x45\x51\x84\x76\x13"
+"\x26\x16\x5d\x7d\x31\xc9\xde\xd2\xcd\x34\xe9\x41\xa8\xda\x33\xe8"
+"\x5d\x58\xba\xd8\xd0\xa0\x50\xa4\x97\xd3\x5d\xd9\x53\x1b\x4e\x16"
+"\x86\x96\x06\x20\x6c\xe8\x5c\x1a\x40\x5d\x09\x81\x53\x9e\x62\x8e"
+"\x9b\x90\x92\xc4\x84\xd1\x4b\x1c\x08\x93\x9d\xf1\xc1\x9b\x0c\x8d"
+"\xeb\x7d\x52\x4b\x42\x16\xa9\xd2\x59\x6c\xd9\xbb\x09\xe8\x98\x50"
+"\x98\x4a\xb6\xdc\x0b\x34\xc8\xbb\x86\x24\xc5\x35\x8e\x0d\x01\x10"
+"\x98\x63\x98\x40\x1e\xff\x8e\x20\x62\xf8\xda\x86\xaa\xd2\xbb\x6c"
+"\xf5\xe0\x04\x38\x24\x68\xdb\x49\x49\x74\x12\x01\xc0\xdc\xe7\x3a"
+"\xf2\x3e\x80\xf1\x45\x88\x83\x11\x62\x20\xc6\x08\x91\x55\x8c\x63"
+"\x6c\x39\xdc\x19\x66\x85\xe6\xb1\xa5\xfd\x2f\x94\xb2\xe3\x7a\x97"
+"\x3f\x07\x7b\x1c\xd2\xf6\x38\x2f\x6a\x05\x4c\xb0\x53\x12\x79\x30"
+"\xa2\x8b\x1c\xb0\xf9\x65\x36\xca\xd6\x4f\x0d\x14\x34\x0a\xa7\x16"
+"\x54\x15\x49\xef\x29\x44\x51\x91\x15\x8a\xa2\x20\xf8\x96\x8a\x0a"
+"\x0a\x2b\x31\x6d\x15\x8c\x16\x44\x44\xd1\x70\xd1\x2c\xd2\x91\x37"
+"\x7e\x5a\xd6\xa8\xae\x71\x9e\xca\x88\x53\xa2\x7f\x18\x6e\x61\x3f"
+"\xa6\x29\x43\xf8\x71\xcf\x55\x59\xe5\xd9\x61\x72\x51\x63\x20\xb0"
+"\x19\x10\xc6\x61\x6d\xc6\xca\x6b\x2e\x99\x51\xd4\x29\x14\x46\x2b"
+"\xfa\xed\xee\xf4\xe8\x7d\x0f\x08\x76\x61\xe8\x33\xea\x1f\xa3\x7f"
+"\xac\x86\x49\xe4\x7c\x63\x83\x61\x21\x98\xf2\x5b\xf7\xed\x0d\xb8"
+"\x86\xf2\x5f\x27\x79\xa0\x59\x66\xb3\x32\xbc\x06\x6e\x67\x06\x9b"
+"\x2c\xbb\xb3\x64\x32\x06\x89\xe2\xc5\x61\xab\xb7\xd8\xc5\x56\xa1"
+"\xf1\x0e\xc2\xaa\x28\xb1\x52\xb0\xcb\x27\x59\x38\x20\x77\x1e\x26"
+"\x4e\xee\xc6\x2a\x0c\x54\x43\xef\x65\x4e\x43\x03\xa7\x65\x83\x19"
+"\x20\xb0\x64\x1e\x52\xce\x9a\xe8\x05\xfd\x30\xfd\x48\xa3\xd3\x32"
+"\x16\x70\x65\x21\xf0\xa5\x80\x73\x90\xc8\x82\x30\x4d\x6d\xf1\x96"
+"\x59\x0d\x36\x92\x6c\x0c\x83\x8a\x11\x0a\x58\x67\xc1\x1b\x8e\x92"
+"\x8e\x1c\x12\xd2\x6f\xb0\x76\x02\xe2\x13\x18\x9b\x2b\x91\xa3\x37"
+"\x88\x98\x40\xd9\xb0\xd3\x88\x87\x20\xa1\x8a\x99\x4a\x2c\x12\x7c"
+"\x7c\x60\x7f\x1d\xf1\x38\x88\x14\x42\x8c\x94\x65\x68\xf6\xe1\x87"
+"\x30\x4f\x0e\x24\x9e\xe6\x07\xcc\xd1\xca\x70\x68\xa7\x36\xb5\xfd"
+"\xae\x3e\xd0\x52\x3a\x2e\x3d\xd2\x3e\xf6\x51\xc1\xa2\x0b\x7d\x4d"
+"\xeb\xf9\x8a\xdb\x08\x28\xa0\x04\x57\x43\xdd\x39\xb3\x34\xb9\xe9"
+"\x55\xb9\x78\xa6\xb5\x7a\xb5\x17\x5b\xde\x4e\x49\xbd\xd3\xe5\x69"
+"\xbe\x4d\xe1\xe6\xf2\x79\xb0\x41\x43\xa9\x0f\x69\x51\xa3\xed\x41"
+"\x46\x3c\x70\xc1\xf1\x03\x57\x3e\x9a\x34\xea\x34\x50\x5c\xbc\x2c"
+"\x8e\x9a\xc0\xbe\x14\x67\xee\xcf\x2b\x98\x0c\xa8\x2e\xe8\x41\x43"
+"\x7f\x64\xcc\x77\x30\xb9\x04\x87\x4f\xe1\xdd\xa9\x54\x58\xa1\x8b"
+"\xf1\x86\x84\x1b\x52\xcd\x0f\xef\x35\xc7\xa9\x9a\x16\xe3\x95\xdc"
+"\x42\xdd\x0e\x76\x67\xee\x30\x05\xf9\x1b\x41\x63\x0b\xa1\x46\xe8"
+"\x25\x84\xb5\xab\xb3\xc3\x37\x59\xc4\x74\x89\xa0\xb4\x9a\x5a\x6c"
+"\x23\x11\x85\x88\x22\x6e\xe8\xa5\x55\x43\x25\xca\x38\xe1\xa2\x9a"
+"\xd5\xb2\x35\xc2\x6e\x8c\xf4\xb2\xca\xf4\xf2\xe5\x78\xb4\x99\x95"
+"\xe0\x64\x2c\xea\x44\xb7\x4e\x5d\x5d\xc4\xe5\x68\x29\xe6\x6e\x49"
+"\xc6\xca\x4e\xf4\x8f\x67\x0c\x8d\x7f\x9b\x48\x52\x08\x0c\xa2\x99"
+"\x50\x80\x63\xf0\xb5\x3e\x39\x3d\xfb\xa3\xa8\x9e\x7a\x84\xf4\x58"
+"\x71\x75\x4c\xb0\xa0\x90\x12\x5d\xc4\x86\x12\x69\xee\xb1\x6a\x7b"
+"\x6b\xc0\x7b\xad\x6d\xf1\xc9\x13\xc9\xaa\xca\xf1\x7a\x03\xda\x48"
+"\x61\x23\xfa\x9f\xda\xf9\x33\xc7\xb7\x9b\x21\xdf\x3f\x0d\x06\xd3"
+"\x99\x71\x4a\x41\x9d\x99\x49\xc9\xd6\xf4\xa6\x23\x4d\xd3\x54\xa7"
+"\x18\xf3\x0f\xa7\xfc\x54\xe4\x03\xf8\xfb\x29\xea\x61\xed\x67\x8a"
+"\x58\x32\x60\x36\x83\x55\x29\xb5\xd7\xc8\x50\x4b\x6d\xf2\x50\xaf"
+"\xd8\x8f\x5f\xcf\x06\xdf\xa2\x34\x62\xc5\x84\x0c\xcc\x98\x5c\xad"
+"\x38\xc9\x0d\x91\x1c\xa2\x64\x55\x0d\x36\x81\x5d\xa0\x33\x85\x29"
+"\xe6\x30\xd6\x4f\x11\x79\xa3\xad\xa5\xf7\x59\x19\x86\x54\xd5\x8a"
+"\x58\x91\x9b\x5b\x55\x24\xb7\x4e\xd6\x12\xde\xc8\x45\xf8\xa4\x3d"
+"\x5c\xaa\x82\x07\xf3\x1b\x86\x6a\xdb\xf8\xee\xf2\xe9\xc0\x9c\x52"
+"\x88\x8e\xc5\xae\x93\xbd\x0d\xf1\x5b\xc6\x1c\x38\x8c\x66\x3c\x3b"
+"\xcd\x0f\xbb\xcf\xea\xe9\xdf\x27\xcd\x00\x20\x02\xee\x48\x46\x29"
+"\x60\xe5\x34\x10\xf1\x48\xed\x5d\xe5\xe1\x0d\xb1\x4d\x9a\xac\x4a"
+"\x38\xb4\x72\x01\x8b\xa4\x2d\xae\xce\x43\xa7\x0d\xbb\x0d\xb1\x4b"
+"\x1e\xd8\x5f\x83\xe0\xfb\x1a\xef\x61\xb3\x24\x02\x88\x41\xf8\x3f"
+"\x4e\x5c\xbc\x48\xe0\x57\x35\x60\xc7\xe6\x7b\x5a\x15\x24\x14\xeb"
+"\x7b\x8a\xaa\xa3\x81\x47\x07\x58\x11\x9b\x34\x84\x55\x50\x54\xc1"
+"\x0a\x52\x14\x61\x6c\x3b\xe2\x93\xba\x6c\x1a\x9c\x58\x02\x89\xab"
+"\xb0\x6d\x2d\x33\x01\x1c\x89\x46\x12\x1d\x61\xe3\x08\xa2\x9d\x4d"
+"\x93\x4b\x3a\x06\x06\x86\x34\x19\x82\x45\xc3\xdc\x18\x01\x80\x91"
+"\x8c\xab\x0b\x60\x0a\xb0\x75\xc1\x79\x0e\x1c\x7b\x8e\x4b\x8a\x5a"
+"\x0e\xae\x01\xb0\xa0\xa8\x5a\xca\xc0\x28\xcb\x3b\x9a\xc4\xe0\x09"
+"\x01\xe5\x15\x44\xab\x6c\xd7\x14\xe4\x29\x58\x05\x74\x0a\x3d\x5a"
+"\x53\x24\xc1\xbe\xa2\xf4\x18\x8a\x92\x1a\xb6\x65\x74\x55\x52\xaa"
+"\x54\x52\xdb\x08\x58\xa3\xc1\x24\x96\x7a\x99\x78\x46\x13\x1a\x12"
+"\xe4\x28\x58\x20\xec\xa8\x1f\x17\x16\xac\x5a\xae\x33\x9a\x74\x21"
+"\x55\x6c\xcc\x0c\x00\xac\xf2\x4b\x4d\xb2\xc9\x8b\x2e\xd8\x09\x0f"
+"\x95\x3a\x4e\x8b\x76\x6c\xd0\x56\x77\x54\xb5\x84\x64\x82\x18\xa0"
+"\x62\xa2\x34\xd1\xb4\x32\xe2\x03\x22\x11\x24\xd0\x2b\x33\x3f\x7c"
+"\x4d\x5d\x39\xcc\x69\xd9\x21\x8a\x8b\x51\x8a\x65\x8d\x0b\x02\x80"
+"\xba\xa1\x6c\x02\x4b\xc9\xe8\x33\x61\x0f\xa7\x45\x3a\x33\x8e\x76"
+"\x4b\x61\xda\x10\x72\x07\xa6\x31\x53\xb0\xd3\xa5\xdb\x0f\x95\x45"
+"\xa3\x86\x61\xad\x16\x1a\x45\x16\x3a\xba\x89\xb1\x87\x00\x14\x0a"
+"\xed\x51\xdf\x75\xcb\x32\x6c\xef\x74\x4e\xd5\x97\x39\x29\x2a\x05"
+"\xc3\x03\xbf\xac\x80\x97\x0c\x28\xf6\x1b\x77\x05\xf6\x3c\x88\x69"
+"\xb4\x52\x88\x30\x5a\x18\xe2\x07\x55\x45\x78\x89\x20\x37\x06\x2c"
+"\x37\x34\x68\x44\x37\x3d\x2a\xb2\x8c\xa7\xaa\xe8\xb2\x09\xdb\xd7"
+"\x28\x23\xee\x80\x25\x24\xe5\x2f\x49\x09\xf5\x24\x16\x40\x93\xa1"
+"\xad\xaf\x29\x35\x2f\x6c\xc0\xc1\x50\xf1\xef\xb3\x59\xc4\xc1\xb3"
+"\x2a\xc3\x0b\x1b\xe8\x0b\xc3\xa5\x37\xd0\x36\x61\x80\x67\x91\xa6"
+"\x7c\x0e\xab\x0d\xce\xa8\x78\x39\x4e\x53\x66\x8e\x37\x3b\x4e\x10"
+"\xec\x78\x52\xda\xa7\x31\xc9\x53\x37\x6c\xd5\x8a\x12\x07\x53\x58"
+"\x6f\x73\x3c\x67\x2e\x92\x1d\xc4\x84\xd3\x21\x14\x16\x4c\x3b\x98"
+"\x41\xd2\xb5\x76\x30\x45\xe2\x1b\x48\xb0\x5c\x90\x8a\xf9\x48\x76"
+"\x2d\x6f\xc1\x26\xac\x25\x8c\x85\xed\xc8\x70\xf2\xe2\xf8\xf8\x77"
+"\xe6\x84\x79\xa2\xdb\xe5\x72\x78\x14\x35\xc5\x53\x40\xe0\xbb\x82"
+"\x8d\xdb\xc4\x8d\xe0\x5c\x36\x3c\x6e\xe3\xa4\x47\xb2\xc0\x58\x5f"
+"\x26\x7f\x2d\x15\xec\x0e\xec\xb8\xee\x81\x46\xac\xae\xfb\xff\x4d"
+"\x95\xee\x49\x60\x6b\xd0\xaa\x70\xfd\xdd\xba\x4f\x20\xf6\x30\xf2"
+"\x9e\x75\x75\xed\x17\x48\x4e\xd0\x43\x28\x14\x29\xfb\x68\x4a\x0a"
+"\x75\xaf\xe6\x70\x87\xd3\x78\x70\xa5\xaf\x06\xd8\x35\xe2\x6e\x37"
+"\x8a\xf1\x9e\x63\x51\xb3\x78\x20\xe6\x10\x70\x8f\xc7\xe0\xb5\xaa"
+"\x0f\x43\x37\x2d\x0f\x16\x36\x12\xb0\xe4\x2b\x8d\x7e\xb6\xc6\xd0"
+"\x77\x93\x2b\x57\xc9\x25\x3b\x98\x7b\xe8\x47\x6b\xa8\x92\x6c\x1f"
+"\x52\x3d\xb2\xfd\x74\x4b\xa8\xfd\x3b\x92\xdb\x1d\x70\x0d\xf4\x77"
+"\xf9\x01\xc4\x45\x46\x82\x21\xa8\x39\x0f\x17\xcc\x61\xe8\xc8\x62"
+"\x1e\x63\xd6\x22\x9f\x3f\xff\x4f\x97\xd3\x3a\x88\x28\x2a\x22\x92"
+"\x28\x2c\x3e\x39\x64\xc6\x45\x90\x4e\xf8\x89\x9d\x8c\xee\x3a\x6f"
+"\x0f\x0c\xd0\x19\x03\xf7\xb0\x50\x18\x20\xa4\x4e\x67\x89\xe1\xf5"
+"\xa2\x81\xf0\x6c\xfe\x83\x30\x90\xb7\x7d\xd6\x7f\x1f\x50\x4e\x82"
+"\x94\xce\x2d\x1e\x95\xae\xe7\x0c\x8b\xa0\x77\x52\x27\x7a\xa9\x02"
+"\x3a\xdc\x18\x45\x0e\xee\xfc\xe4\x08\x31\xd2\x73\x0d\x13\x88\x64"
+"\xc0\x76\x81\x32\xea\x2a\xa1\xda\x0f\x0f\x6e\xb6\x30\xb1\x0c\xf7"
+"\x61\x8c\x8e\x88\xea\x64\x36\xcc\xd8\xa8\x35\xd9\x15\x56\x3c\x0b"
+"\x9c\x2d\xc0\xf8\x17\xe6\xe6\xd1\x08\xf1\x1a\x0a\xb2\x24\xd0\x25"
+"\x02\xa8\x4f\xb5\x5d\x46\x7b\xe2\x2f\x4a\x1d\xc1\x9c\xb6\x43\x0b"
+"\xb3\x9f\xd1\xb4\x2b\x23\x7b\xf7\x69\x1c\xe1\x87\xf8\x8e\x18\xf8"
+"\xa4\x57\x02\x43\xe8\x1b\x1a\xa9\xba\x21\x82\x96\xb7\x58\x20\x0d"
+"\x4c\xcc\xeb\x1c\x61\x95\x13\x0c\xde\xe9\x0d\xa9\xe6\xca\x07\x38"
+"\xde\xa1\x52\x76\x18\x2a\x49\x04\x66\x8a\x59\x49\x04\x29\x2d\x76"
+"\x89\x96\x33\x65\x6a\x13\x01\x19\xd1\x5c\x32\x86\x60\xf7\xbc\x0a"
+"\xa5\x1f\x4a\xd2\x30\x7a\xb3\xc2\x6b\x2a\xb5\xb4\xc0\xad\xc9\x41"
+"\x44\x44\xba\x6d\xc8\x87\x25\x1a\x58\x92\xcc\x08\x3a\xe8\x43\x68"
+"\x09\xd1\x7a\x97\xc2\x1a\x85\x4a\xcd\x09\x2b\xa2\x14\xc0\x29\x75"
+"\xfa\x93\xcc\xca\x02\x08\x94\x86\x41\x07\xe2\x40\xdd\xa5\x3d\x44"
+"\x31\x9f\xd0\xdf\xbf\xdd\xb6\xea\x7c\xd9\xeb\xc3\xa9\x17\xdc\x7e"
+"\x4e\xc9\xe0\xbf\x54\xf6\x73\xcc\x6b\xc0\xad\xdf\xa9\x72\x06\xe8"
+"\x3f\xfc\x5d\xc9\x14\xe1\x42\x43\xaf\x78\xcd\xdc"
 ""
 ;
-#define SIZEOF_usage_messages 27177
+#define SIZEOF_usage_messages 27881
